create-prisma 0.3.2 → 0.4.0-pr.32.60.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 +86 -117
- package/dist/cli.mjs +1 -1
- package/dist/{create-DOr8R2_6.mjs → create-Dm_HiTCj.mjs} +221 -120
- package/dist/index.d.mts +6 -0
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/templates/create/astro/src/pages/index.astro.hbs +39 -49
- package/templates/create/elysia/README.md.hbs +32 -0
- package/templates/create/elysia/deno.json.hbs +5 -0
- package/templates/create/elysia/package.json.hbs +21 -0
- package/templates/create/elysia/prisma/schema.prisma.hbs +25 -0
- package/templates/create/elysia/prisma/seed.ts.hbs +42 -0
- package/templates/create/elysia/prisma.config.ts.hbs +15 -0
- package/templates/create/elysia/src/index.ts.hbs +43 -0
- package/templates/create/elysia/src/lib/prisma.ts.hbs +56 -0
- package/templates/create/elysia/tsconfig.json +14 -0
- package/templates/create/hono/README.md.hbs +3 -2
- package/templates/create/hono/package.json.hbs +3 -4
- package/templates/create/hono/prisma/schema.prisma.hbs +4 -0
- package/templates/create/hono/prisma/seed.ts.hbs +5 -1
- package/templates/create/hono/prisma.config.ts.hbs +15 -0
- package/templates/create/hono/src/index.ts.hbs +8 -2
- package/templates/create/hono/src/lib/prisma.ts.hbs +6 -3
- package/templates/create/nest/.yarnrc.yml.hbs +3 -0
- package/templates/create/nest/README.md.hbs +32 -0
- package/templates/create/nest/deno.json.hbs +5 -0
- package/templates/create/nest/package.json.hbs +24 -0
- package/templates/create/nest/prisma/schema.prisma.hbs +25 -0
- package/templates/create/nest/prisma/seed.ts.hbs +44 -0
- package/templates/create/nest/prisma.config.ts.hbs +15 -0
- package/templates/create/nest/src/app.controller.ts.hbs +11 -0
- package/templates/create/nest/src/app.module.ts.hbs +20 -0
- package/templates/create/nest/src/lib/prisma.ts.hbs +58 -0
- package/templates/create/nest/src/main.ts.hbs +27 -0
- package/templates/create/nest/src/prisma.service.ts.hbs +10 -0
- package/templates/create/nest/src/users.controller.ts.hbs +15 -0
- package/templates/create/nest/src/users.service.ts.hbs +19 -0
- package/templates/create/nest/tsconfig.json +16 -0
- package/templates/create/next/src/app/globals.css +38 -46
- package/templates/create/nuxt/app/pages/index.vue.hbs +45 -55
- package/templates/create/svelte/src/routes/+page.svelte.hbs +78 -99
- package/templates/create/tanstack-start/prisma/schema.prisma.hbs +0 -1
- package/templates/create/tanstack-start/src/routes/index.tsx.hbs +28 -30
- package/templates/create/tanstack-start/src/styles.css +80 -121
- package/templates/create/turborepo/apps/api/package.json.hbs +0 -2
- package/templates/create/turborepo/apps/api/src/index.ts.hbs +7 -1
- package/templates/create/hono/prisma.config.ts +0 -13
|
@@ -111,53 +111,48 @@ const users = await prisma.user
|
|
|
111
111
|
<style>
|
|
112
112
|
:global(body) {
|
|
113
113
|
margin: 0;
|
|
114
|
-
font-family:
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
sans-serif;
|
|
118
|
-
background: #f7f8fb;
|
|
119
|
-
color: #0f172a;
|
|
114
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
|
|
115
|
+
background: #fff;
|
|
116
|
+
color: #111;
|
|
120
117
|
}
|
|
121
118
|
|
|
122
119
|
.shell {
|
|
123
|
-
width:
|
|
120
|
+
max-width: 40rem;
|
|
124
121
|
margin: 0 auto;
|
|
125
|
-
padding:
|
|
122
|
+
padding: 3rem 1.5rem;
|
|
126
123
|
}
|
|
127
124
|
|
|
128
125
|
.hero {
|
|
129
|
-
margin-bottom:
|
|
126
|
+
margin-bottom: 1.5rem;
|
|
130
127
|
}
|
|
131
128
|
|
|
132
129
|
.eyebrow {
|
|
133
|
-
margin: 0 0 0.
|
|
134
|
-
color: #
|
|
135
|
-
font-size: 0.
|
|
136
|
-
font-weight:
|
|
137
|
-
letter-spacing: 0.
|
|
130
|
+
margin: 0 0 0.5rem;
|
|
131
|
+
color: #666;
|
|
132
|
+
font-size: 0.75rem;
|
|
133
|
+
font-weight: 600;
|
|
134
|
+
letter-spacing: 0.06em;
|
|
138
135
|
text-transform: uppercase;
|
|
139
136
|
}
|
|
140
137
|
|
|
141
138
|
h1 {
|
|
142
139
|
margin: 0;
|
|
143
|
-
|
|
144
|
-
font-
|
|
145
|
-
line-height:
|
|
140
|
+
font-size: 1.25rem;
|
|
141
|
+
font-weight: 600;
|
|
142
|
+
line-height: 1.4;
|
|
146
143
|
}
|
|
147
144
|
|
|
148
145
|
.lede {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
146
|
+
margin: 0.5rem 0 0;
|
|
147
|
+
color: #666;
|
|
148
|
+
font-size: 0.875rem;
|
|
149
|
+
line-height: 1.6;
|
|
153
150
|
}
|
|
154
151
|
|
|
155
152
|
.panel {
|
|
156
|
-
|
|
157
|
-
border:
|
|
158
|
-
|
|
159
|
-
background: #ffffff;
|
|
160
|
-
box-shadow: 0 12px 32px rgba(15, 23, 42, 0.06);
|
|
153
|
+
border: 1px solid #e5e5e5;
|
|
154
|
+
border-radius: 0.5rem;
|
|
155
|
+
padding: 1rem;
|
|
161
156
|
}
|
|
162
157
|
|
|
163
158
|
.panel-header {
|
|
@@ -165,22 +160,25 @@ const users = await prisma.user
|
|
|
165
160
|
align-items: center;
|
|
166
161
|
justify-content: space-between;
|
|
167
162
|
gap: 1rem;
|
|
168
|
-
margin-bottom:
|
|
163
|
+
margin-bottom: 0.75rem;
|
|
169
164
|
}
|
|
170
165
|
|
|
171
166
|
h2 {
|
|
172
167
|
margin: 0;
|
|
173
|
-
font-size:
|
|
168
|
+
font-size: 0.875rem;
|
|
169
|
+
font-weight: 600;
|
|
174
170
|
}
|
|
175
171
|
|
|
176
172
|
.panel-header span,
|
|
177
173
|
.empty,
|
|
178
174
|
time {
|
|
179
|
-
color: #
|
|
175
|
+
color: #888;
|
|
176
|
+
font-size: 0.8rem;
|
|
180
177
|
}
|
|
181
178
|
|
|
182
179
|
.panel p {
|
|
183
|
-
color: #
|
|
180
|
+
color: #666;
|
|
181
|
+
font-size: 0.8rem;
|
|
184
182
|
}
|
|
185
183
|
|
|
186
184
|
.users {
|
|
@@ -188,7 +186,7 @@ const users = await prisma.user
|
|
|
188
186
|
margin: 0;
|
|
189
187
|
padding: 0;
|
|
190
188
|
display: grid;
|
|
191
|
-
gap: 0.
|
|
189
|
+
gap: 0.5rem;
|
|
192
190
|
}
|
|
193
191
|
|
|
194
192
|
.users li {
|
|
@@ -196,37 +194,29 @@ const users = await prisma.user
|
|
|
196
194
|
align-items: center;
|
|
197
195
|
justify-content: space-between;
|
|
198
196
|
gap: 1rem;
|
|
199
|
-
padding:
|
|
200
|
-
border
|
|
201
|
-
|
|
202
|
-
border: 1px solid #dbe2ea;
|
|
197
|
+
padding: 0.625rem 0.75rem;
|
|
198
|
+
border: 1px solid #eee;
|
|
199
|
+
border-radius: 0.375rem;
|
|
203
200
|
}
|
|
204
201
|
|
|
205
202
|
.users p {
|
|
206
|
-
margin: 0.
|
|
203
|
+
margin: 0.125rem 0 0;
|
|
207
204
|
}
|
|
208
205
|
|
|
209
206
|
time {
|
|
210
|
-
font-size: 0.
|
|
207
|
+
font-size: 0.75rem;
|
|
211
208
|
white-space: nowrap;
|
|
212
209
|
}
|
|
213
210
|
|
|
214
211
|
code {
|
|
215
|
-
padding: 0.
|
|
216
|
-
border-radius: 0.
|
|
217
|
-
background: #
|
|
218
|
-
font-family:
|
|
219
|
-
|
|
220
|
-
Consolas,
|
|
221
|
-
monospace;
|
|
222
|
-
font-size: 0.95em;
|
|
212
|
+
padding: 0.125rem 0.25rem;
|
|
213
|
+
border-radius: 0.25rem;
|
|
214
|
+
background: #f5f5f5;
|
|
215
|
+
font-family: SFMono-Regular, Consolas, monospace;
|
|
216
|
+
font-size: 0.875em;
|
|
223
217
|
}
|
|
224
218
|
|
|
225
219
|
@media (max-width: 640px) {
|
|
226
|
-
.shell {
|
|
227
|
-
padding-top: 3rem;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
220
|
.users li,
|
|
231
221
|
.panel-header {
|
|
232
222
|
flex-direction: column;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# {{projectName}}
|
|
2
|
+
|
|
3
|
+
Generated by `create-prisma` with the Elysia template.
|
|
4
|
+
|
|
5
|
+
## Scripts
|
|
6
|
+
|
|
7
|
+
- `{{runScriptCommand packageManager "dev"}}` - start local dev server with hot reload
|
|
8
|
+
- `{{runScriptCommand packageManager "build"}}` - {{#if (eq packageManager "deno")}}type-check the app with Deno{{else}}{{#if (eq packageManager "bun")}}type-check the app for Bun{{else}}typecheck and compile{{/if}}{{/if}}
|
|
9
|
+
- `{{runScriptCommand packageManager "start"}}` - {{#if (eq packageManager "deno")}}run the server directly from `src/index.ts` with Deno{{else}}{{#if (eq packageManager "bun")}}run the server directly from `src/index.ts` with Bun{{else}}run compiled server from `dist/`{{/if}}{{/if}}
|
|
10
|
+
|
|
11
|
+
## Prisma
|
|
12
|
+
|
|
13
|
+
1. Make sure dependencies are installed.
|
|
14
|
+
2. Generate Prisma Client:
|
|
15
|
+
|
|
16
|
+
`{{runScriptCommand packageManager "db:generate"}}`
|
|
17
|
+
|
|
18
|
+
3. Run your first migration:
|
|
19
|
+
|
|
20
|
+
`{{runScriptCommand packageManager "db:migrate"}}`
|
|
21
|
+
|
|
22
|
+
4. Seed the database:
|
|
23
|
+
|
|
24
|
+
`{{runScriptCommand packageManager "db:seed"}}`
|
|
25
|
+
|
|
26
|
+
5. Use the Prisma client from `src/lib/prisma.ts`.
|
|
27
|
+
|
|
28
|
+
Generated Prisma files are written to `src/generated/prisma`.
|
|
29
|
+
{{#if (eq schemaPreset "basic")}}
|
|
30
|
+
|
|
31
|
+
The template includes a basic `User` model, a sample `GET /users` endpoint, and seed data in `prisma/seed.ts`.
|
|
32
|
+
{{/if}}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{projectName}}",
|
|
3
|
+
"private": true,
|
|
4
|
+
{{#if (packageManagerManifestValue packageManager)}}
|
|
5
|
+
"packageManager": "{{packageManagerManifestValue packageManager}}",
|
|
6
|
+
{{/if}}
|
|
7
|
+
"type": "module",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"dev": "{{runtimeScript packageManager "dev" "src/index.ts" "dist/src/index.js" denoFlags="--unstable-net"}}",
|
|
10
|
+
"build": "{{runtimeScript packageManager "build" "src/index.ts" "dist/src/index.js"}}",
|
|
11
|
+
"start": "{{runtimeScript packageManager "start" "src/index.ts" "dist/src/index.js" denoFlags="--unstable-net"}}"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@sinclair/typebox": "^0.34.48",
|
|
15
|
+
"elysia": "^1.4.28",
|
|
16
|
+
"openapi-types": "^12.1.3"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"typescript": "^5.9.3"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client"
|
|
3
|
+
output = "../src/generated/prisma"
|
|
4
|
+
{{#if (eq packageManager "deno")}}
|
|
5
|
+
runtime = "deno"
|
|
6
|
+
{{else}}
|
|
7
|
+
{{#if (eq packageManager "bun")}}
|
|
8
|
+
runtime = "bun"
|
|
9
|
+
{{/if}}
|
|
10
|
+
{{/if}}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
datasource db {
|
|
14
|
+
provider = "{{provider}}"
|
|
15
|
+
}
|
|
16
|
+
{{#if (eq schemaPreset "basic")}}
|
|
17
|
+
|
|
18
|
+
model User {
|
|
19
|
+
id String @id @default(cuid())
|
|
20
|
+
email String @unique
|
|
21
|
+
name String?
|
|
22
|
+
createdAt DateTime @default(now())
|
|
23
|
+
updatedAt DateTime @updatedAt
|
|
24
|
+
}
|
|
25
|
+
{{/if}}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import prisma from "../src/lib/prisma{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
2
|
+
|
|
3
|
+
async function main() {
|
|
4
|
+
{{#if (eq schemaPreset "basic")}}
|
|
5
|
+
const users = await Promise.all([
|
|
6
|
+
prisma.user.upsert({
|
|
7
|
+
where: { email: "alice@prisma.io" },
|
|
8
|
+
update: { name: "Alice" },
|
|
9
|
+
create: {
|
|
10
|
+
email: "alice@prisma.io",
|
|
11
|
+
name: "Alice",
|
|
12
|
+
},
|
|
13
|
+
}),
|
|
14
|
+
prisma.user.upsert({
|
|
15
|
+
where: { email: "bob@prisma.io" },
|
|
16
|
+
update: { name: "Bob" },
|
|
17
|
+
create: {
|
|
18
|
+
email: "bob@prisma.io",
|
|
19
|
+
name: "Bob",
|
|
20
|
+
},
|
|
21
|
+
}),
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
console.log(`Seeded ${users.length} users.`);
|
|
25
|
+
{{else}}
|
|
26
|
+
console.log("No seed data defined for the empty schema preset.");
|
|
27
|
+
{{/if}}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
main()
|
|
31
|
+
.then(async () => {
|
|
32
|
+
await prisma.$disconnect();
|
|
33
|
+
})
|
|
34
|
+
.catch(async (error) => {
|
|
35
|
+
console.error(error);
|
|
36
|
+
await prisma.$disconnect();
|
|
37
|
+
{{#if (eq packageManager "deno")}}
|
|
38
|
+
Deno.exit(1);
|
|
39
|
+
{{else}}
|
|
40
|
+
process.exit(1);
|
|
41
|
+
{{/if}}
|
|
42
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
{{/if}}
|
|
4
|
+
import { defineConfig, env } from "prisma/config";
|
|
5
|
+
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
schema: "prisma/schema.prisma",
|
|
8
|
+
migrations: {
|
|
9
|
+
path: "prisma/migrations",
|
|
10
|
+
seed: "{{#if (eq packageManager "deno")}}deno run -A --env-file=.env ./prisma/seed.ts{{else}}{{#if (eq packageManager "bun")}}bun ./prisma/seed.ts{{else}}tsx prisma/seed.ts{{/if}}{{/if}}",
|
|
11
|
+
},
|
|
12
|
+
datasource: {
|
|
13
|
+
url: env("DATABASE_URL"),
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
{{/if}}
|
|
4
|
+
{{#if (eq packageManager "deno")}}
|
|
5
|
+
{{else}}
|
|
6
|
+
import { node } from "@elysiajs/node";
|
|
7
|
+
{{/if}}
|
|
8
|
+
import { Elysia } from "elysia";
|
|
9
|
+
{{#if (eq schemaPreset "basic")}}
|
|
10
|
+
import { prisma } from "./lib/prisma{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
11
|
+
{{/if}}
|
|
12
|
+
|
|
13
|
+
const rawPort = ({{#if (eq packageManager "deno")}}Deno.env.get("PORT"){{else}}process.env.PORT{{/if}} ?? "").trim();
|
|
14
|
+
const parsedPort = rawPort.length > 0 ? Number(rawPort) : Number.NaN;
|
|
15
|
+
const port =
|
|
16
|
+
Number.isInteger(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort : 3000;
|
|
17
|
+
|
|
18
|
+
const app = new Elysia({{#if (eq packageManager "deno")}}{{else}}{ adapter: node() }{{/if}})
|
|
19
|
+
.get("/", () => {
|
|
20
|
+
return {
|
|
21
|
+
message: "hello from create-prisma + elysia",
|
|
22
|
+
};
|
|
23
|
+
})
|
|
24
|
+
{{#if (eq schemaPreset "basic")}}
|
|
25
|
+
.get("/users", async () => {
|
|
26
|
+
return prisma.user.findMany({
|
|
27
|
+
take: 10,
|
|
28
|
+
orderBy: {
|
|
29
|
+
createdAt: "desc",
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
})
|
|
33
|
+
{{/if}}
|
|
34
|
+
{{#if (eq packageManager "deno")}}
|
|
35
|
+
;
|
|
36
|
+
|
|
37
|
+
Deno.serve({ port }, app.fetch);
|
|
38
|
+
console.log(`Server running at http://localhost:${port}`);
|
|
39
|
+
{{else}}
|
|
40
|
+
.listen(port);
|
|
41
|
+
|
|
42
|
+
console.log(`Server running at http://localhost:${app.server?.port ?? port}`);
|
|
43
|
+
{{/if}}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
{{/if}}
|
|
4
|
+
import { PrismaClient } from "../generated/prisma/client{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
5
|
+
{{#if (eq provider "postgresql")}}
|
|
6
|
+
import { PrismaPg } from "@prisma/adapter-pg";
|
|
7
|
+
{{/if}}
|
|
8
|
+
{{#if (eq provider "cockroachdb")}}
|
|
9
|
+
import { PrismaPg } from "@prisma/adapter-pg";
|
|
10
|
+
{{/if}}
|
|
11
|
+
{{#if (eq provider "mysql")}}
|
|
12
|
+
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
|
|
13
|
+
{{/if}}
|
|
14
|
+
{{#if (eq provider "sqlite")}}
|
|
15
|
+
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
|
|
16
|
+
{{/if}}
|
|
17
|
+
{{#if (eq provider "sqlserver")}}
|
|
18
|
+
import { PrismaMssql } from "@prisma/adapter-mssql";
|
|
19
|
+
{{/if}}
|
|
20
|
+
|
|
21
|
+
const rawDatabaseUrl = {{#if (eq packageManager "deno")}}Deno.env.get("DATABASE_URL"){{else}}process.env.DATABASE_URL{{/if}};
|
|
22
|
+
{{#if (eq provider "sqlite")}}
|
|
23
|
+
const databaseUrl = (rawDatabaseUrl ?? "").trim() || "file:./dev.db";
|
|
24
|
+
{{else}}
|
|
25
|
+
const databaseUrl = (rawDatabaseUrl ?? "").trim();
|
|
26
|
+
if (!databaseUrl) {
|
|
27
|
+
throw new Error("DATABASE_URL is required");
|
|
28
|
+
}
|
|
29
|
+
{{/if}}
|
|
30
|
+
|
|
31
|
+
{{#if (eq provider "postgresql")}}
|
|
32
|
+
const adapter = new PrismaPg({
|
|
33
|
+
connectionString: databaseUrl,
|
|
34
|
+
});
|
|
35
|
+
{{/if}}
|
|
36
|
+
{{#if (eq provider "cockroachdb")}}
|
|
37
|
+
const adapter = new PrismaPg({
|
|
38
|
+
connectionString: databaseUrl,
|
|
39
|
+
});
|
|
40
|
+
{{/if}}
|
|
41
|
+
{{#if (eq provider "mysql")}}
|
|
42
|
+
const adapter = new PrismaMariaDb(databaseUrl);
|
|
43
|
+
{{/if}}
|
|
44
|
+
{{#if (eq provider "sqlite")}}
|
|
45
|
+
const adapter = new PrismaBetterSqlite3({
|
|
46
|
+
url: databaseUrl,
|
|
47
|
+
});
|
|
48
|
+
{{/if}}
|
|
49
|
+
{{#if (eq provider "sqlserver")}}
|
|
50
|
+
const adapter = new PrismaMssql(databaseUrl);
|
|
51
|
+
{{/if}}
|
|
52
|
+
|
|
53
|
+
const prisma = new PrismaClient({ adapter });
|
|
54
|
+
|
|
55
|
+
export { prisma };
|
|
56
|
+
export default prisma;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "Bundler",
|
|
6
|
+
"verbatimModuleSyntax": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"forceConsistentCasingInFileNames": true,
|
|
11
|
+
"outDir": "dist",
|
|
12
|
+
"rootDir": "."
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -5,8 +5,8 @@ Generated by `create-prisma` with the Hono template.
|
|
|
5
5
|
## Scripts
|
|
6
6
|
|
|
7
7
|
- `{{runScriptCommand packageManager "dev"}}` - start local dev server
|
|
8
|
-
- `{{runScriptCommand packageManager "build"}}` - typecheck and compile
|
|
9
|
-
- `{{runScriptCommand packageManager "start"}}` - run compiled server from `dist/`
|
|
8
|
+
- `{{runScriptCommand packageManager "build"}}` - {{#if (eq packageManager "deno")}}type-check the app with Deno{{else}}{{#if (eq packageManager "bun")}}type-check the app for Bun{{else}}typecheck and compile{{/if}}{{/if}}
|
|
9
|
+
- `{{runScriptCommand packageManager "start"}}` - {{#if (eq packageManager "deno")}}run the server directly from `src/index.ts` with Deno{{else}}{{#if (eq packageManager "bun")}}run the server directly from `src/index.ts` with Bun{{else}}run compiled server from `dist/`{{/if}}{{/if}}
|
|
10
10
|
|
|
11
11
|
## Prisma
|
|
12
12
|
|
|
@@ -18,6 +18,7 @@ Generated by `create-prisma` with the Hono template.
|
|
|
18
18
|
3. Run your first migration:
|
|
19
19
|
|
|
20
20
|
`{{runScriptCommand packageManager "db:migrate"}}`
|
|
21
|
+
|
|
21
22
|
4. Seed the database:
|
|
22
23
|
|
|
23
24
|
`{{runScriptCommand packageManager "db:seed"}}`
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
{{/if}}
|
|
7
7
|
"type": "module",
|
|
8
8
|
"scripts": {
|
|
9
|
-
"dev": "
|
|
10
|
-
"build": "
|
|
11
|
-
"start": "
|
|
9
|
+
"dev": "{{runtimeScript packageManager "dev" "src/index.ts" "dist/src/index.js"}}",
|
|
10
|
+
"build": "{{runtimeScript packageManager "build" "src/index.ts" "dist/src/index.js"}}",
|
|
11
|
+
"start": "{{runtimeScript packageManager "start" "src/index.ts" "dist/src/index.js"}}"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@hono/node-server": "^1.19.9",
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@types/node": "^20.11.17",
|
|
19
|
-
"tsx": "^4.7.1",
|
|
20
19
|
"typescript": "^5.8.3"
|
|
21
20
|
}
|
|
22
21
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import prisma from "../src/lib/prisma";
|
|
1
|
+
import prisma from "../src/lib/prisma{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
2
2
|
|
|
3
3
|
async function main() {
|
|
4
4
|
{{#if (eq schemaPreset "basic")}}
|
|
@@ -34,5 +34,9 @@ main()
|
|
|
34
34
|
.catch(async (error) => {
|
|
35
35
|
console.error(error);
|
|
36
36
|
await prisma.$disconnect();
|
|
37
|
+
{{#if (eq packageManager "deno")}}
|
|
38
|
+
Deno.exit(1);
|
|
39
|
+
{{else}}
|
|
37
40
|
process.exit(1);
|
|
41
|
+
{{/if}}
|
|
38
42
|
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
{{/if}}
|
|
4
|
+
import { defineConfig, env } from "prisma/config";
|
|
5
|
+
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
schema: "prisma/schema.prisma",
|
|
8
|
+
migrations: {
|
|
9
|
+
path: "prisma/migrations",
|
|
10
|
+
seed: "{{#if (eq packageManager "deno")}}deno run -A --env-file=.env ./prisma/seed.ts{{else}}{{#if (eq packageManager "bun")}}bun ./prisma/seed.ts{{else}}tsx prisma/seed.ts{{/if}}{{/if}}",
|
|
11
|
+
},
|
|
12
|
+
datasource: {
|
|
13
|
+
url: env("DATABASE_URL"),
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
{{/if}}
|
|
1
4
|
import { serve } from "@hono/node-server";
|
|
2
5
|
import { Hono } from "hono";
|
|
3
6
|
{{#if (eq schemaPreset "basic")}}
|
|
4
|
-
import { prisma } from "./lib/prisma";
|
|
7
|
+
import { prisma } from "./lib/prisma{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
5
8
|
{{/if}}
|
|
6
9
|
|
|
7
10
|
const app = new Hono();
|
|
@@ -25,7 +28,10 @@ app.get("/users", async (c) => {
|
|
|
25
28
|
});
|
|
26
29
|
{{/if}}
|
|
27
30
|
|
|
28
|
-
const
|
|
31
|
+
const rawPort = ({{#if (eq packageManager "deno")}}Deno.env.get("PORT"){{else}}process.env.PORT{{/if}} ?? "").trim();
|
|
32
|
+
const parsedPort = rawPort.length > 0 ? Number(rawPort) : Number.NaN;
|
|
33
|
+
const port =
|
|
34
|
+
Number.isInteger(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort : 3000;
|
|
29
35
|
serve({
|
|
30
36
|
fetch: app.fetch,
|
|
31
37
|
port,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
1
2
|
import "dotenv/config";
|
|
2
|
-
|
|
3
|
+
{{/if}}
|
|
4
|
+
import { PrismaClient } from "../generated/prisma/client{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
3
5
|
{{#if (eq provider "postgresql")}}
|
|
4
6
|
import { PrismaPg } from "@prisma/adapter-pg";
|
|
5
7
|
{{/if}}
|
|
@@ -16,10 +18,11 @@ import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
|
|
|
16
18
|
import { PrismaMssql } from "@prisma/adapter-mssql";
|
|
17
19
|
{{/if}}
|
|
18
20
|
|
|
21
|
+
const rawDatabaseUrl = {{#if (eq packageManager "deno")}}Deno.env.get("DATABASE_URL"){{else}}process.env.DATABASE_URL{{/if}};
|
|
19
22
|
{{#if (eq provider "sqlite")}}
|
|
20
|
-
const databaseUrl =
|
|
23
|
+
const databaseUrl = (rawDatabaseUrl ?? "").trim() || "file:./dev.db";
|
|
21
24
|
{{else}}
|
|
22
|
-
const databaseUrl =
|
|
25
|
+
const databaseUrl = (rawDatabaseUrl ?? "").trim();
|
|
23
26
|
if (!databaseUrl) {
|
|
24
27
|
throw new Error("DATABASE_URL is required");
|
|
25
28
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# {{projectName}}
|
|
2
|
+
|
|
3
|
+
Generated by `create-prisma` with the NestJS template.
|
|
4
|
+
|
|
5
|
+
## Scripts
|
|
6
|
+
|
|
7
|
+
- `{{runScriptCommand packageManager "dev"}}` - start the Nest dev server with watch mode
|
|
8
|
+
- `{{runScriptCommand packageManager "build"}}` - {{#if (eq packageManager "deno")}}type-check the app with Deno{{else}}{{#if (eq packageManager "bun")}}type-check the app for Bun{{else}}compile the app into `dist/`{{/if}}{{/if}}
|
|
9
|
+
- `{{runScriptCommand packageManager "start"}}` - {{#if (eq packageManager "deno")}}run the server directly from `src/main.ts` with Deno{{else}}{{#if (eq packageManager "bun")}}run the server directly from `src/main.ts` with Bun{{else}}run the compiled server from `dist/main.js`{{/if}}{{/if}}
|
|
10
|
+
|
|
11
|
+
## Prisma
|
|
12
|
+
|
|
13
|
+
1. Make sure dependencies are installed.
|
|
14
|
+
2. Generate Prisma Client:
|
|
15
|
+
|
|
16
|
+
`{{runScriptCommand packageManager "db:generate"}}`
|
|
17
|
+
|
|
18
|
+
3. Run your first migration:
|
|
19
|
+
|
|
20
|
+
`{{runScriptCommand packageManager "db:migrate"}}`
|
|
21
|
+
|
|
22
|
+
4. Seed the database:
|
|
23
|
+
|
|
24
|
+
`{{runScriptCommand packageManager "db:seed"}}`
|
|
25
|
+
|
|
26
|
+
5. Use the shared Prisma setup from `src/lib/prisma.ts` and inject `PrismaService` from `src/prisma.service.ts` inside Nest providers.
|
|
27
|
+
|
|
28
|
+
Generated Prisma files are written to `src/generated/prisma`.
|
|
29
|
+
{{#if (eq schemaPreset "basic")}}
|
|
30
|
+
|
|
31
|
+
The template includes a basic `User` model, a sample `GET /users` endpoint, and seed data in `prisma/seed.ts`.
|
|
32
|
+
{{/if}}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{projectName}}",
|
|
3
|
+
"private": true,
|
|
4
|
+
{{#if (packageManagerManifestValue packageManager)}}
|
|
5
|
+
"packageManager": "{{packageManagerManifestValue packageManager}}",
|
|
6
|
+
{{/if}}
|
|
7
|
+
"type": "module",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"dev": "{{runtimeScript packageManager "dev" "src/main.ts" "dist/main.js"}}",
|
|
10
|
+
"build": "{{runtimeScript packageManager "build" "src/main.ts" "dist/main.js"}}",
|
|
11
|
+
"start": "{{runtimeScript packageManager "start" "src/main.ts" "dist/main.js"}}"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@nestjs/common": "^11.1.17",
|
|
15
|
+
"@nestjs/core": "^11.1.17",
|
|
16
|
+
"@nestjs/platform-express": "^11.1.17",
|
|
17
|
+
"reflect-metadata": "^0.2.2",
|
|
18
|
+
"rxjs": "^7.8.2"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/node": "^25.5.0",
|
|
22
|
+
"typescript": "^5.9.3"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client"
|
|
3
|
+
output = "../src/generated/prisma"
|
|
4
|
+
{{#if (eq packageManager "deno")}}
|
|
5
|
+
runtime = "deno"
|
|
6
|
+
{{else}}
|
|
7
|
+
{{#if (eq packageManager "bun")}}
|
|
8
|
+
runtime = "bun"
|
|
9
|
+
{{/if}}
|
|
10
|
+
{{/if}}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
datasource db {
|
|
14
|
+
provider = "{{provider}}"
|
|
15
|
+
}
|
|
16
|
+
{{#if (eq schemaPreset "basic")}}
|
|
17
|
+
|
|
18
|
+
model User {
|
|
19
|
+
id String @id @default(cuid())
|
|
20
|
+
email String @unique
|
|
21
|
+
name String?
|
|
22
|
+
createdAt DateTime @default(now())
|
|
23
|
+
updatedAt DateTime @updatedAt
|
|
24
|
+
}
|
|
25
|
+
{{/if}}
|