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.
Files changed (129) hide show
  1. package/README.md +25 -19
  2. package/dist/cli.mjs +2 -32
  3. package/dist/index.d.mts +25 -1
  4. package/dist/index.mjs +2 -2290
  5. package/dist/src-B3hRLZ0U.mjs +2527 -0
  6. package/package.json +2 -4
  7. package/templates/create/astro/README.md.hbs +14 -7
  8. package/templates/create/astro/astro.config.mjs.hbs +0 -11
  9. package/templates/create/astro/deno.json.hbs +5 -0
  10. package/templates/create/astro/prisma/schema.prisma.hbs +5 -0
  11. package/templates/create/astro/prisma/seed.ts.hbs +5 -1
  12. package/templates/create/astro/prisma.compute.ts.hbs +10 -0
  13. package/templates/create/astro/src/lib/prisma.ts.hbs +4 -18
  14. package/templates/create/astro/src/pages/api/users.ts.hbs +11 -1
  15. package/templates/create/astro/src/pages/index.astro.hbs +176 -36
  16. package/templates/create/elysia/README.md.hbs +13 -7
  17. package/templates/create/elysia/deno.json.hbs +5 -0
  18. package/templates/create/elysia/package.json.hbs +3 -4
  19. package/templates/create/elysia/prisma/schema.prisma.hbs +6 -0
  20. package/templates/create/elysia/prisma/seed.ts.hbs +5 -1
  21. package/templates/create/elysia/prisma.compute.ts.hbs +11 -0
  22. package/templates/create/elysia/src/index.ts.hbs +17 -13
  23. package/templates/create/elysia/src/lib/prisma.ts.hbs +4 -18
  24. package/templates/create/elysia/tsconfig.json +0 -1
  25. package/templates/create/hono/README.md.hbs +13 -7
  26. package/templates/create/hono/deno.json.hbs +5 -0
  27. package/templates/create/hono/package.json.hbs +2 -2
  28. package/templates/create/hono/prisma/schema.prisma.hbs +6 -0
  29. package/templates/create/hono/prisma/seed.ts.hbs +5 -1
  30. package/templates/create/hono/prisma.compute.ts.hbs +10 -0
  31. package/templates/create/hono/src/index.ts.hbs +7 -9
  32. package/templates/create/hono/src/lib/prisma.ts.hbs +4 -18
  33. package/templates/create/hono/tsconfig.json +0 -1
  34. package/templates/create/nest/README.md.hbs +12 -6
  35. package/templates/create/nest/deno.json.hbs +5 -0
  36. package/templates/create/nest/package.json.hbs +2 -2
  37. package/templates/create/nest/prisma/schema.prisma.hbs +6 -0
  38. package/templates/create/nest/prisma/seed.ts.hbs +5 -1
  39. package/templates/create/nest/prisma.compute.ts.hbs +10 -0
  40. package/templates/create/nest/src/app.controller.ts.hbs +1 -6
  41. package/templates/create/nest/src/app.module.ts.hbs +14 -7
  42. package/templates/create/nest/src/lib/prisma.ts.hbs +4 -17
  43. package/templates/create/nest/src/main.ts.hbs +6 -2
  44. package/templates/create/nest/src/prisma.service.ts.hbs +2 -2
  45. package/templates/create/nest/src/users.controller.ts.hbs +3 -1
  46. package/templates/create/nest/src/users.service.ts.hbs +3 -1
  47. package/templates/create/nest/tsconfig.json +0 -1
  48. package/templates/create/next/README.md.hbs +11 -7
  49. package/templates/create/next/deno.json.hbs +12 -0
  50. package/templates/create/next/prisma/schema.prisma.hbs +5 -0
  51. package/templates/create/next/prisma/seed.ts.hbs +5 -1
  52. package/templates/create/next/prisma.compute.ts.hbs +9 -0
  53. package/templates/create/next/src/app/globals.css +122 -0
  54. package/templates/create/next/src/app/layout.tsx.hbs +2 -2
  55. package/templates/create/next/src/app/page.tsx.hbs +58 -34
  56. package/templates/create/next/src/lib/prisma.ts.hbs +4 -18
  57. package/templates/create/nuxt/README.md.hbs +11 -7
  58. package/templates/create/nuxt/app/pages/index.vue.hbs +175 -43
  59. package/templates/create/nuxt/deno.json.hbs +5 -0
  60. package/templates/create/nuxt/nuxt.config.ts +0 -1
  61. package/templates/create/nuxt/prisma/schema.prisma.hbs +5 -0
  62. package/templates/create/nuxt/prisma/seed.ts.hbs +5 -1
  63. package/templates/create/nuxt/prisma.compute.ts.hbs +9 -0
  64. package/templates/create/nuxt/server/api/users.get.ts.hbs +6 -0
  65. package/templates/create/nuxt/server/utils/prisma.ts.hbs +4 -18
  66. package/templates/create/svelte/README.md.hbs +13 -4
  67. package/templates/create/svelte/deno.json.hbs +5 -0
  68. package/templates/create/svelte/package.json.hbs +1 -2
  69. package/templates/create/svelte/prisma/schema.prisma.hbs +5 -0
  70. package/templates/create/svelte/prisma/seed.ts.hbs +5 -1
  71. package/templates/create/svelte/src/lib/server/prisma.ts.hbs +2 -18
  72. package/templates/create/svelte/src/routes/+layout.svelte +0 -1
  73. package/templates/create/svelte/src/routes/+page.server.ts.hbs +7 -1
  74. package/templates/create/svelte/src/routes/+page.svelte.hbs +297 -41
  75. package/templates/create/svelte/svelte.config.js +13 -0
  76. package/templates/create/svelte/vite.config.ts +0 -3
  77. package/templates/create/tanstack-start/README.md.hbs +11 -7
  78. package/templates/create/tanstack-start/deno.json.hbs +13 -0
  79. package/templates/create/tanstack-start/prisma/schema.prisma.hbs +5 -0
  80. package/templates/create/tanstack-start/prisma/seed.ts.hbs +5 -1
  81. package/templates/create/tanstack-start/prisma.compute.ts.hbs +9 -0
  82. package/templates/create/tanstack-start/src/lib/prisma.server.ts.hbs +4 -18
  83. package/templates/create/tanstack-start/src/routes/__root.tsx.hbs +29 -4
  84. package/templates/create/tanstack-start/src/routes/index.tsx.hbs +76 -35
  85. package/templates/create/tanstack-start/src/styles.css +146 -0
  86. package/templates/create/tanstack-start/tsconfig.json +1 -1
  87. package/templates/create/turborepo/README.md.hbs +9 -7
  88. package/templates/create/turborepo/apps/api/package.json.hbs +9 -2
  89. package/templates/create/turborepo/apps/api/src/index.ts.hbs +12 -28
  90. package/templates/create/turborepo/apps/api/tsconfig.json +0 -1
  91. package/templates/create/turborepo/deno.json.hbs +5 -0
  92. package/templates/create/turborepo/package.json.hbs +6 -0
  93. package/templates/create/turborepo/packages/db/package.json.hbs +5 -4
  94. package/templates/create/turborepo/packages/db/prisma/schema.prisma.hbs +5 -0
  95. package/templates/create/turborepo/packages/db/prisma/seed.ts.hbs +5 -1
  96. package/templates/create/turborepo/packages/db/src/client.ts.hbs +5 -2
  97. package/templates/create/turborepo/packages/db/tsconfig.json +0 -1
  98. package/templates/create/turborepo/prisma.compute.ts.hbs +14 -0
  99. package/templates/create/astro/module.ts.hbs +0 -30
  100. package/templates/create/astro/prisma-composer.config.ts.hbs +0 -8
  101. package/templates/create/astro/service.ts.hbs +0 -19
  102. package/templates/create/elysia/.yarnrc.yml.hbs +0 -3
  103. package/templates/create/elysia/module.ts.hbs +0 -30
  104. package/templates/create/elysia/prisma-composer.config.ts.hbs +0 -8
  105. package/templates/create/elysia/service.ts.hbs +0 -19
  106. package/templates/create/hono/module.ts.hbs +0 -30
  107. package/templates/create/hono/prisma-composer.config.ts.hbs +0 -8
  108. package/templates/create/hono/service.ts.hbs +0 -19
  109. package/templates/create/nest/module.ts.hbs +0 -30
  110. package/templates/create/nest/prisma-composer.config.ts.hbs +0 -8
  111. package/templates/create/nest/src/service.ts.hbs +0 -19
  112. package/templates/create/next/module.ts.hbs +0 -30
  113. package/templates/create/next/prisma-composer.config.ts.hbs +0 -8
  114. package/templates/create/next/service.ts.hbs +0 -19
  115. package/templates/create/nuxt/module.ts.hbs +0 -30
  116. package/templates/create/nuxt/prisma-composer.config.ts.hbs +0 -8
  117. package/templates/create/nuxt/service.ts.hbs +0 -19
  118. package/templates/create/svelte/module.ts.hbs +0 -30
  119. package/templates/create/svelte/prisma-composer.config.ts.hbs +0 -8
  120. package/templates/create/svelte/service.ts.hbs +0 -19
  121. package/templates/create/svelte/svelte.config.js.hbs +0 -10
  122. package/templates/create/tanstack-start/module.ts.hbs +0 -30
  123. package/templates/create/tanstack-start/prisma-composer.config.ts.hbs +0 -8
  124. package/templates/create/tanstack-start/service.ts.hbs +0 -19
  125. package/templates/create/turborepo/apps/api/src/service.ts.hbs +0 -19
  126. package/templates/create/turborepo/module.ts.hbs +0 -30
  127. package/templates/create/turborepo/prisma-composer.config.ts.hbs +0 -8
  128. package/templates/shared/setup-composer-postgres.mjs.hbs +0 -179
  129. package/templates/shared/starter.css +0 -276
@@ -1,179 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import { fileURLToPath } from "node:url";
3
-
4
- const platformCli = {{composerPlatformCliInvocation packageManager}};
5
- const prismaCli = {{prismaCliInvocation packageManager}};
6
- const projectDir = fileURLToPath(new URL("../", import.meta.url));
7
- const prismaProjectDir = fileURLToPath(
8
- new URL("{{#if (eq template "turborepo")}}../packages/db/{{else}}../{{/if}}", import.meta.url),
9
- );
10
-
11
- function redactSecrets(message) {
12
- return message
13
- .replace(/\b((?:prisma\+)?postgres(?:ql)?:\/\/)[^\s'"]+/gi, "$1<redacted>")
14
- .replace(
15
- /(['"])([A-Z0-9_]*(?:DATABASE_URL|DIRECT_URL|TOKEN|SECRET|PASSWORD|API_KEY|PRIVATE_KEY|ACCESS_KEY)[A-Z0-9_]*=)(.*?)\1/g,
16
- "$1$2<redacted>$1",
17
- )
18
- .replace(
19
- /\b([A-Z0-9_]*(?:DATABASE_URL|DIRECT_URL|TOKEN|SECRET|PASSWORD|API_KEY|PRIVATE_KEY|ACCESS_KEY)[A-Z0-9_]*=)[^\s]+/g,
20
- "$1<redacted>",
21
- );
22
- }
23
-
24
- function runPlatformCli(args) {
25
- const result = spawnSync(
26
- platformCli.command,
27
- [...platformCli.args, ...args, "--json", "--no-interactive"],
28
- {
29
- cwd: projectDir,
30
- encoding: "utf8",
31
- env: process.env,
32
- shell: process.platform === "win32",
33
- },
34
- );
35
- let envelope;
36
- const lines = result.stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
37
- for (const line of lines.reverse()) {
38
- try {
39
- const parsed = JSON.parse(line);
40
- const candidate = parsed?.kind === "result" ? parsed.envelope : parsed;
41
- if (typeof candidate?.ok === "boolean") {
42
- envelope = candidate;
43
- break;
44
- }
45
- } catch {
46
- // Ignore non-JSON commentary and continue looking for the result event.
47
- }
48
- }
49
- if (result.error || result.status !== 0) {
50
- const detail =
51
- result.error?.message ??
52
- envelope?.error?.summary ??
53
- envelope?.error?.message ??
54
- result.stderr ??
55
- result.stdout ??
56
- "Prisma CLI reported an unknown error";
57
- throw new Error(redactSecrets(String(detail).trim()));
58
- }
59
- if (!envelope) {
60
- throw new Error("Prisma CLI returned output that is not a valid result envelope.");
61
- }
62
- if (!envelope.ok) {
63
- const detail = envelope.error?.summary ?? envelope.error?.message ?? "Prisma CLI reported an unknown error";
64
- throw new Error(redactSecrets(String(detail)));
65
- }
66
- return envelope.result;
67
- }
68
-
69
- function findNamedDatabase(value) {
70
- if (Array.isArray(value)) {
71
- for (const item of value) {
72
- const match = findNamedDatabase(item);
73
- if (match) return match;
74
- }
75
- return undefined;
76
- }
77
- if (typeof value !== "object" || value === null) return undefined;
78
- if (value.name === "database" && typeof value.id === "string") return value;
79
- for (const item of Object.values(value)) {
80
- const match = findNamedDatabase(item);
81
- if (match) return match;
82
- }
83
- return undefined;
84
- }
85
-
86
- function findDatabaseUrl(value) {
87
- if (typeof value === "string") {
88
- return /^(?:prisma\+)?postgres(?:ql)?:\/\//.test(value) ? value : undefined;
89
- }
90
- if (Array.isArray(value)) {
91
- for (const item of value) {
92
- const match = findDatabaseUrl(item);
93
- if (match) return match;
94
- }
95
- return undefined;
96
- }
97
- if (typeof value !== "object" || value === null) return undefined;
98
- for (const item of Object.values(value)) {
99
- const match = findDatabaseUrl(item);
100
- if (match) return match;
101
- }
102
- return undefined;
103
- }
104
-
105
- function findConnectionId(value) {
106
- if (Array.isArray(value)) {
107
- for (const item of value) {
108
- const match = findConnectionId(item);
109
- if (match) return match;
110
- }
111
- return undefined;
112
- }
113
- if (typeof value !== "object" || value === null) return undefined;
114
- if (typeof value.id === "string" && value.id.startsWith("con_")) return value.id;
115
- for (const item of Object.values(value)) {
116
- const match = findConnectionId(item);
117
- if (match) return match;
118
- }
119
- return undefined;
120
- }
121
-
122
- function runPrisma(args, databaseUrl) {
123
- const result = spawnSync(prismaCli.command, [...prismaCli.args, ...args], {
124
- cwd: prismaProjectDir,
125
- env: { ...process.env, DATABASE_URL: databaseUrl },
126
- shell: process.platform === "win32",
127
- stdio: "inherit",
128
- });
129
- if (result.error || result.status !== 0) {
130
- throw result.error ?? new Error(`Prisma exited with status ${String(result.status)}`);
131
- }
132
- }
133
-
134
- const databases = runPlatformCli(["postgres", "list", "--project", "{{projectName}}"]);
135
- const database = findNamedDatabase(databases);
136
- if (!database) {
137
- throw new Error('Composer deployed, but the provisioned "database" resource was not found.');
138
- }
139
-
140
- const connection = runPlatformCli([
141
- "postgres",
142
- "connection",
143
- "create",
144
- database.id,
145
- "--project",
146
- "{{projectName}}",
147
- "--name",
148
- `create-prisma-deploy-${Date.now()}`,
149
- ]);
150
- const databaseUrl = findDatabaseUrl(connection);
151
- const connectionId = findConnectionId(connection);
152
-
153
- try {
154
- if (!databaseUrl) {
155
- throw new Error("Composer database connection output did not include a connection URL.");
156
- }
157
- runPrisma(["migrate", "deploy"], databaseUrl);
158
- runPrisma(["db", "seed"], databaseUrl);
159
- console.log("Composer-managed Prisma Postgres migrated and seeded.");
160
- } finally {
161
- if (connectionId) {
162
- try {
163
- runPlatformCli([
164
- "postgres",
165
- "connection",
166
- "remove",
167
- connectionId,
168
- "--confirm",
169
- connectionId,
170
- ]);
171
- } catch (error) {
172
- console.warn(`Could not remove temporary database connection: ${redactSecrets(String(error))}`);
173
- }
174
- } else {
175
- console.warn(
176
- "Could not determine the temporary database connection id. Remove it manually in the Prisma console.",
177
- );
178
- }
179
- }
@@ -1,276 +0,0 @@
1
- :root {
2
- color-scheme: light;
3
- --background: #f7f7f5;
4
- --surface: #ffffff;
5
- --text: #18181b;
6
- --muted: #71717a;
7
- --line: #e4e4e7;
8
- --soft: #f4f4f5;
9
- --accent: #0f766e;
10
- }
11
-
12
- * {
13
- box-sizing: border-box;
14
- }
15
-
16
- html {
17
- min-height: 100%;
18
- background: var(--background);
19
- }
20
-
21
- body {
22
- min-height: 100%;
23
- margin: 0;
24
- background: var(--background);
25
- color: var(--text);
26
- font-family:
27
- Inter,
28
- ui-sans-serif,
29
- -apple-system,
30
- BlinkMacSystemFont,
31
- "Segoe UI",
32
- sans-serif;
33
- -webkit-font-smoothing: antialiased;
34
- }
35
-
36
- a {
37
- color: inherit;
38
- }
39
-
40
- .shell {
41
- display: flex;
42
- width: min(100%, 44rem);
43
- min-height: 100svh;
44
- margin: 0 auto;
45
- padding: 4.5rem 1.5rem 2rem;
46
- flex-direction: column;
47
- }
48
-
49
- .product {
50
- display: flex;
51
- align-items: center;
52
- gap: 0.625rem;
53
- color: var(--muted);
54
- font-size: 0.8125rem;
55
- }
56
-
57
- .product-mark {
58
- display: inline-grid;
59
- width: 1.75rem;
60
- height: 1.75rem;
61
- border-radius: 0.5rem;
62
- background: var(--text);
63
- color: white;
64
- font-size: 0.75rem;
65
- font-weight: 700;
66
- place-items: center;
67
- }
68
-
69
- .product-name {
70
- color: var(--text);
71
- font-weight: 650;
72
- }
73
-
74
- .framework {
75
- padding: 0.2rem 0.5rem;
76
- border: 1px solid var(--line);
77
- border-radius: 999px;
78
- background: var(--surface);
79
- font-size: 0.75rem;
80
- }
81
-
82
- .intro {
83
- margin-bottom: 2.5rem;
84
- }
85
-
86
- h1 {
87
- max-width: 38rem;
88
- margin: 1.5rem 0 0.75rem;
89
- font-size: clamp(2rem, 7vw, 3.25rem);
90
- font-weight: 650;
91
- letter-spacing: -0.045em;
92
- line-height: 1.05;
93
- }
94
-
95
- .lede {
96
- max-width: 34rem;
97
- margin: 0;
98
- color: var(--muted);
99
- font-size: 1rem;
100
- line-height: 1.65;
101
- }
102
-
103
- .user-panel {
104
- overflow: hidden;
105
- border: 1px solid var(--line);
106
- border-radius: 0.875rem;
107
- background: var(--surface);
108
- box-shadow: 0 1px 2px rgb(24 24 27 / 4%);
109
- }
110
-
111
- .panel-header {
112
- display: flex;
113
- min-height: 4.25rem;
114
- padding: 0.875rem 1.125rem;
115
- align-items: center;
116
- justify-content: space-between;
117
- gap: 1rem;
118
- border-bottom: 1px solid var(--line);
119
- }
120
-
121
- .panel-title h2,
122
- .panel-title p {
123
- margin: 0;
124
- }
125
-
126
- .panel-title h2 {
127
- font-size: 0.9375rem;
128
- font-weight: 650;
129
- }
130
-
131
- .panel-title p {
132
- margin-top: 0.125rem;
133
- color: var(--muted);
134
- font-size: 0.75rem;
135
- }
136
-
137
- .count {
138
- min-width: 1.75rem;
139
- padding: 0.2rem 0.45rem;
140
- border-radius: 999px;
141
- background: var(--soft);
142
- color: var(--muted);
143
- font-size: 0.75rem;
144
- font-variant-numeric: tabular-nums;
145
- text-align: center;
146
- }
147
-
148
- .user-list {
149
- margin: 0;
150
- padding: 0;
151
- list-style: none;
152
- }
153
-
154
- .user-row {
155
- display: grid;
156
- min-height: 4.5rem;
157
- padding: 0.75rem 1.125rem;
158
- grid-template-columns: 2.25rem minmax(0, 1fr) auto;
159
- align-items: center;
160
- gap: 0.875rem;
161
- }
162
-
163
- .user-row + .user-row {
164
- border-top: 1px solid var(--line);
165
- }
166
-
167
- .avatar {
168
- display: grid;
169
- width: 2.25rem;
170
- height: 2.25rem;
171
- border-radius: 50%;
172
- background: #e7f3f1;
173
- color: var(--accent);
174
- font-size: 0.75rem;
175
- font-weight: 700;
176
- place-items: center;
177
- }
178
-
179
- .user-copy {
180
- min-width: 0;
181
- }
182
-
183
- .user-name,
184
- .user-email {
185
- overflow: hidden;
186
- margin: 0;
187
- text-overflow: ellipsis;
188
- white-space: nowrap;
189
- }
190
-
191
- .user-name {
192
- font-size: 0.875rem;
193
- font-weight: 600;
194
- }
195
-
196
- .user-email,
197
- time {
198
- color: var(--muted);
199
- font-size: 0.75rem;
200
- }
201
-
202
- .user-email {
203
- margin-top: 0.15rem;
204
- }
205
-
206
- time {
207
- white-space: nowrap;
208
- }
209
-
210
- .empty-state {
211
- margin: 0;
212
- padding: 2rem 1.125rem;
213
- color: var(--muted);
214
- font-size: 0.875rem;
215
- line-height: 1.6;
216
- text-align: center;
217
- }
218
-
219
- .footer {
220
- display: flex;
221
- margin-top: auto;
222
- padding-top: 2rem;
223
- align-items: center;
224
- justify-content: space-between;
225
- gap: 1rem;
226
- color: var(--muted);
227
- font-size: 0.75rem;
228
- }
229
-
230
- .footer p {
231
- margin: 0;
232
- }
233
-
234
- code {
235
- padding: 0.125rem 0.3rem;
236
- border-radius: 0.25rem;
237
- background: var(--soft);
238
- color: #3f3f46;
239
- font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
240
- font-size: 0.9em;
241
- }
242
-
243
- .docs-link {
244
- font-weight: 600;
245
- text-decoration: none;
246
- }
247
-
248
- .docs-link:hover {
249
- text-decoration: underline;
250
- text-underline-offset: 0.2rem;
251
- }
252
-
253
- .docs-link:focus-visible {
254
- border-radius: 0.2rem;
255
- outline: 2px solid var(--accent);
256
- outline-offset: 0.2rem;
257
- }
258
-
259
- @media (max-width: 36rem) {
260
- .shell {
261
- padding-top: 3rem;
262
- }
263
-
264
- .user-row {
265
- grid-template-columns: 2.25rem minmax(0, 1fr);
266
- }
267
-
268
- time {
269
- grid-column: 2;
270
- }
271
-
272
- .footer {
273
- align-items: flex-start;
274
- flex-direction: column;
275
- }
276
- }