@techstream/quark-create-app 1.2.0 → 1.4.0

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 (40) hide show
  1. package/package.json +34 -33
  2. package/src/index.js +193 -56
  3. package/templates/base-project/apps/web/src/app/api/auth/register/route.js +17 -1
  4. package/templates/base-project/apps/web/src/app/api/error-handler.js +4 -2
  5. package/templates/base-project/apps/web/src/app/api/health/route.js +8 -3
  6. package/templates/base-project/apps/web/src/app/api/posts/[id]/route.js +9 -5
  7. package/templates/base-project/apps/web/src/app/api/posts/route.js +13 -5
  8. package/templates/base-project/apps/web/src/app/api/users/[id]/route.js +9 -9
  9. package/templates/base-project/apps/web/src/app/api/users/route.js +6 -6
  10. package/templates/base-project/apps/web/src/lib/auth-middleware.js +18 -1
  11. package/templates/base-project/apps/web/src/{middleware.js → proxy.js} +3 -3
  12. package/templates/base-project/apps/worker/package.json +1 -2
  13. package/templates/base-project/apps/worker/src/index.js +71 -19
  14. package/templates/base-project/docker-compose.yml +3 -6
  15. package/templates/base-project/package.json +16 -1
  16. package/templates/base-project/packages/db/package.json +10 -4
  17. package/templates/base-project/packages/db/prisma.config.ts +2 -2
  18. package/templates/base-project/packages/db/scripts/seed.js +1 -1
  19. package/templates/base-project/packages/db/src/client.js +41 -25
  20. package/templates/base-project/packages/db/src/queries.js +22 -9
  21. package/templates/base-project/packages/db/src/schemas.js +6 -1
  22. package/templates/base-project/turbo.json +17 -1
  23. package/templates/config/package.json +3 -1
  24. package/templates/config/src/app-url.js +71 -0
  25. package/templates/config/src/validate-env.js +104 -0
  26. package/templates/base-project/packages/db/src/generated/prisma/browser.ts +0 -53
  27. package/templates/base-project/packages/db/src/generated/prisma/client.ts +0 -82
  28. package/templates/base-project/packages/db/src/generated/prisma/commonInputTypes.ts +0 -649
  29. package/templates/base-project/packages/db/src/generated/prisma/enums.ts +0 -19
  30. package/templates/base-project/packages/db/src/generated/prisma/internal/class.ts +0 -305
  31. package/templates/base-project/packages/db/src/generated/prisma/internal/prismaNamespace.ts +0 -1428
  32. package/templates/base-project/packages/db/src/generated/prisma/internal/prismaNamespaceBrowser.ts +0 -217
  33. package/templates/base-project/packages/db/src/generated/prisma/models/Account.ts +0 -2098
  34. package/templates/base-project/packages/db/src/generated/prisma/models/AuditLog.ts +0 -1805
  35. package/templates/base-project/packages/db/src/generated/prisma/models/Job.ts +0 -1737
  36. package/templates/base-project/packages/db/src/generated/prisma/models/Post.ts +0 -1762
  37. package/templates/base-project/packages/db/src/generated/prisma/models/Session.ts +0 -1738
  38. package/templates/base-project/packages/db/src/generated/prisma/models/User.ts +0 -2298
  39. package/templates/base-project/packages/db/src/generated/prisma/models/VerificationToken.ts +0 -1450
  40. package/templates/base-project/packages/db/src/generated/prisma/models.ts +0 -18
@@ -1,305 +0,0 @@
1
- /* !!! This is code generated by Prisma. Do not edit directly. !!! */
2
- /* eslint-disable */
3
- // biome-ignore-all lint: generated file
4
- // @ts-nocheck
5
- /*
6
- * WARNING: This is an internal file that is subject to change!
7
- *
8
- * 🛑 Under no circumstances should you import this file directly! 🛑
9
- *
10
- * Please import the `PrismaClient` class from the `client.ts` file instead.
11
- */
12
-
13
- import * as runtime from "@prisma/client/runtime/client";
14
- import type * as Prisma from "./prismaNamespace.ts";
15
-
16
- const config: runtime.GetPrismaClientConfig = {
17
- previewFeatures: [],
18
- clientVersion: "7.0.0",
19
- engineVersion: "0c19ccc313cf9911a90d99d2ac2eb0280c76c513",
20
- activeProvider: "postgresql",
21
- inlineSchema:
22
- '// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = "prisma-client"\n output = "../src/generated/prisma"\n}\n\ndatasource db {\n provider = "postgresql"\n}\n\nmodel User {\n id String @id @default(cuid())\n email String @unique\n emailVerified DateTime?\n name String?\n image String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n posts Post[]\n accounts Account[]\n sessions Session[]\n auditLogs AuditLog[]\n\n @@index([email])\n @@index([createdAt])\n}\n\nmodel Post {\n id String @id @default(cuid())\n title String\n content String? @db.Text\n published Boolean @default(false)\n authorId String\n author User @relation(fields: [authorId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([authorId])\n @@index([published])\n @@index([createdAt])\n}\n\n// NextAuth Models\nmodel Account {\n id String @id @default(cuid())\n userId String\n type String\n provider String\n providerAccountId String\n refresh_token String? @db.Text\n access_token String? @db.Text\n expires_at Int?\n token_type String?\n scope String?\n id_token String? @db.Text\n session_state String?\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([provider, providerAccountId])\n @@index([userId])\n}\n\nmodel Session {\n id String @id @default(cuid())\n sessionToken String @unique\n userId String\n expires DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n}\n\nmodel VerificationToken {\n identifier String\n token String @unique\n expires DateTime\n createdAt DateTime @default(now())\n\n @@unique([identifier, token])\n @@index([token])\n}\n\n// Job Queue Model\nmodel Job {\n id String @id @default(cuid())\n queue String\n name String\n data Json?\n status JobStatus @default(PENDING)\n error String?\n attempts Int @default(0)\n maxRetries Int @default(3)\n runAt DateTime @default(now())\n startedAt DateTime?\n completedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([queue])\n @@index([status])\n @@index([runAt])\n @@index([createdAt])\n}\n\nenum JobStatus {\n PENDING\n IN_PROGRESS\n COMPLETED\n FAILED\n CANCELLED\n}\n\n// Audit Log Model\nmodel AuditLog {\n id String @id @default(cuid())\n userId String\n action String\n entity String\n entityId String\n changes Json?\n metadata Json?\n createdAt DateTime @default(now())\n\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@index([action])\n @@index([entity])\n @@index([createdAt])\n}\n',
23
- runtimeDataModel: {
24
- models: {},
25
- enums: {},
26
- types: {},
27
- },
28
- };
29
-
30
- config.runtimeDataModel = JSON.parse(
31
- '{"models":{"User":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"email","kind":"scalar","type":"String"},{"name":"emailVerified","kind":"scalar","type":"DateTime"},{"name":"name","kind":"scalar","type":"String"},{"name":"image","kind":"scalar","type":"String"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"posts","kind":"object","type":"Post","relationName":"PostToUser"},{"name":"accounts","kind":"object","type":"Account","relationName":"AccountToUser"},{"name":"sessions","kind":"object","type":"Session","relationName":"SessionToUser"},{"name":"auditLogs","kind":"object","type":"AuditLog","relationName":"AuditLogToUser"}],"dbName":null},"Post":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"title","kind":"scalar","type":"String"},{"name":"content","kind":"scalar","type":"String"},{"name":"published","kind":"scalar","type":"Boolean"},{"name":"authorId","kind":"scalar","type":"String"},{"name":"author","kind":"object","type":"User","relationName":"PostToUser"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"}],"dbName":null},"Account":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"userId","kind":"scalar","type":"String"},{"name":"type","kind":"scalar","type":"String"},{"name":"provider","kind":"scalar","type":"String"},{"name":"providerAccountId","kind":"scalar","type":"String"},{"name":"refresh_token","kind":"scalar","type":"String"},{"name":"access_token","kind":"scalar","type":"String"},{"name":"expires_at","kind":"scalar","type":"Int"},{"name":"token_type","kind":"scalar","type":"String"},{"name":"scope","kind":"scalar","type":"String"},{"name":"id_token","kind":"scalar","type":"String"},{"name":"session_state","kind":"scalar","type":"String"},{"name":"user","kind":"object","type":"User","relationName":"AccountToUser"}],"dbName":null},"Session":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"sessionToken","kind":"scalar","type":"String"},{"name":"userId","kind":"scalar","type":"String"},{"name":"expires","kind":"scalar","type":"DateTime"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"},{"name":"user","kind":"object","type":"User","relationName":"SessionToUser"}],"dbName":null},"VerificationToken":{"fields":[{"name":"identifier","kind":"scalar","type":"String"},{"name":"token","kind":"scalar","type":"String"},{"name":"expires","kind":"scalar","type":"DateTime"},{"name":"createdAt","kind":"scalar","type":"DateTime"}],"dbName":null},"Job":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"queue","kind":"scalar","type":"String"},{"name":"name","kind":"scalar","type":"String"},{"name":"data","kind":"scalar","type":"Json"},{"name":"status","kind":"enum","type":"JobStatus"},{"name":"error","kind":"scalar","type":"String"},{"name":"attempts","kind":"scalar","type":"Int"},{"name":"maxRetries","kind":"scalar","type":"Int"},{"name":"runAt","kind":"scalar","type":"DateTime"},{"name":"startedAt","kind":"scalar","type":"DateTime"},{"name":"completedAt","kind":"scalar","type":"DateTime"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"updatedAt","kind":"scalar","type":"DateTime"}],"dbName":null},"AuditLog":{"fields":[{"name":"id","kind":"scalar","type":"String"},{"name":"userId","kind":"scalar","type":"String"},{"name":"action","kind":"scalar","type":"String"},{"name":"entity","kind":"scalar","type":"String"},{"name":"entityId","kind":"scalar","type":"String"},{"name":"changes","kind":"scalar","type":"Json"},{"name":"metadata","kind":"scalar","type":"Json"},{"name":"createdAt","kind":"scalar","type":"DateTime"},{"name":"user","kind":"object","type":"User","relationName":"AuditLogToUser"}],"dbName":null}},"enums":{},"types":{}}',
32
- );
33
-
34
- async function decodeBase64AsWasm(
35
- wasmBase64: string,
36
- ): Promise<WebAssembly.Module> {
37
- const { Buffer } = await import("node:buffer");
38
- const wasmArray = Buffer.from(wasmBase64, "base64");
39
- return new WebAssembly.Module(wasmArray);
40
- }
41
-
42
- config.compilerWasm = {
43
- getRuntime: async () =>
44
- await import("@prisma/client/runtime/query_compiler_bg.postgresql.mjs"),
45
-
46
- getQueryCompilerWasmModule: async () => {
47
- const { wasm } = await import(
48
- "@prisma/client/runtime/query_compiler_bg.postgresql.wasm-base64.mjs"
49
- );
50
- return await decodeBase64AsWasm(wasm);
51
- },
52
- };
53
-
54
- export type LogOptions<ClientOptions extends Prisma.PrismaClientOptions> =
55
- "log" extends keyof ClientOptions
56
- ? ClientOptions["log"] extends Array<Prisma.LogLevel | Prisma.LogDefinition>
57
- ? Prisma.GetEvents<ClientOptions["log"]>
58
- : never
59
- : never;
60
-
61
- export interface PrismaClientConstructor {
62
- /**
63
- * ## Prisma Client
64
- *
65
- * Type-safe database client for TypeScript
66
- * @example
67
- * ```
68
- * const prisma = new PrismaClient()
69
- * // Fetch zero or more Users
70
- * const users = await prisma.user.findMany()
71
- * ```
72
- *
73
- * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
74
- */
75
-
76
- new <
77
- Options extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions,
78
- LogOpts extends LogOptions<Options> = LogOptions<Options>,
79
- OmitOpts extends Prisma.PrismaClientOptions["omit"] = Options extends {
80
- omit: infer U;
81
- }
82
- ? U
83
- : Prisma.PrismaClientOptions["omit"],
84
- ExtArgs extends
85
- runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs,
86
- >(
87
- options: Prisma.Subset<Options, Prisma.PrismaClientOptions>,
88
- ): PrismaClient<LogOpts, OmitOpts, ExtArgs>;
89
- }
90
-
91
- /**
92
- * ## Prisma Client
93
- *
94
- * Type-safe database client for TypeScript
95
- * @example
96
- * ```
97
- * const prisma = new PrismaClient()
98
- * // Fetch zero or more Users
99
- * const users = await prisma.user.findMany()
100
- * ```
101
- *
102
- * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
103
- */
104
-
105
- export interface PrismaClient<
106
- in LogOpts extends Prisma.LogLevel = never,
107
- in out OmitOpts extends Prisma.PrismaClientOptions["omit"] = undefined,
108
- in out ExtArgs extends
109
- runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs,
110
- > {
111
- [K: symbol]: { types: Prisma.TypeMap<ExtArgs>["other"] };
112
-
113
- $on<V extends LogOpts>(
114
- eventType: V,
115
- callback: (
116
- event: V extends "query" ? Prisma.QueryEvent : Prisma.LogEvent,
117
- ) => void,
118
- ): PrismaClient;
119
-
120
- /**
121
- * Connect with the database
122
- */
123
- $connect(): runtime.Types.Utils.JsPromise<void>;
124
-
125
- /**
126
- * Disconnect from the database
127
- */
128
- $disconnect(): runtime.Types.Utils.JsPromise<void>;
129
-
130
- /**
131
- * Executes a prepared raw query and returns the number of affected rows.
132
- * @example
133
- * ```
134
- * const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`
135
- * ```
136
- *
137
- * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
138
- */
139
- $executeRaw<T = unknown>(
140
- query: TemplateStringsArray | Prisma.Sql,
141
- ...values: any[]
142
- ): Prisma.PrismaPromise<number>;
143
-
144
- /**
145
- * Executes a raw query and returns the number of affected rows.
146
- * Susceptible to SQL injections, see documentation.
147
- * @example
148
- * ```
149
- * const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com')
150
- * ```
151
- *
152
- * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
153
- */
154
- $executeRawUnsafe<T = unknown>(
155
- query: string,
156
- ...values: any[]
157
- ): Prisma.PrismaPromise<number>;
158
-
159
- /**
160
- * Performs a prepared raw query and returns the `SELECT` data.
161
- * @example
162
- * ```
163
- * const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`
164
- * ```
165
- *
166
- * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
167
- */
168
- $queryRaw<T = unknown>(
169
- query: TemplateStringsArray | Prisma.Sql,
170
- ...values: any[]
171
- ): Prisma.PrismaPromise<T>;
172
-
173
- /**
174
- * Performs a raw query and returns the `SELECT` data.
175
- * Susceptible to SQL injections, see documentation.
176
- * @example
177
- * ```
178
- * const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com')
179
- * ```
180
- *
181
- * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
182
- */
183
- $queryRawUnsafe<T = unknown>(
184
- query: string,
185
- ...values: any[]
186
- ): Prisma.PrismaPromise<T>;
187
-
188
- /**
189
- * Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole.
190
- * @example
191
- * ```
192
- * const [george, bob, alice] = await prisma.$transaction([
193
- * prisma.user.create({ data: { name: 'George' } }),
194
- * prisma.user.create({ data: { name: 'Bob' } }),
195
- * prisma.user.create({ data: { name: 'Alice' } }),
196
- * ])
197
- * ```
198
- *
199
- * Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions).
200
- */
201
- $transaction<P extends Prisma.PrismaPromise<any>[]>(
202
- arg: [...P],
203
- options?: { isolationLevel?: Prisma.TransactionIsolationLevel },
204
- ): runtime.Types.Utils.JsPromise<runtime.Types.Utils.UnwrapTuple<P>>;
205
-
206
- $transaction<R>(
207
- fn: (
208
- prisma: Omit<PrismaClient, runtime.ITXClientDenyList>,
209
- ) => runtime.Types.Utils.JsPromise<R>,
210
- options?: {
211
- maxWait?: number;
212
- timeout?: number;
213
- isolationLevel?: Prisma.TransactionIsolationLevel;
214
- },
215
- ): runtime.Types.Utils.JsPromise<R>;
216
-
217
- $extends: runtime.Types.Extensions.ExtendsHook<
218
- "extends",
219
- Prisma.TypeMapCb<OmitOpts>,
220
- ExtArgs,
221
- runtime.Types.Utils.Call<
222
- Prisma.TypeMapCb<OmitOpts>,
223
- {
224
- extArgs: ExtArgs;
225
- }
226
- >
227
- >;
228
-
229
- /**
230
- * `prisma.user`: Exposes CRUD operations for the **User** model.
231
- * Example usage:
232
- * ```ts
233
- * // Fetch zero or more Users
234
- * const users = await prisma.user.findMany()
235
- * ```
236
- */
237
- get user(): Prisma.UserDelegate<ExtArgs, { omit: OmitOpts }>;
238
-
239
- /**
240
- * `prisma.post`: Exposes CRUD operations for the **Post** model.
241
- * Example usage:
242
- * ```ts
243
- * // Fetch zero or more Posts
244
- * const posts = await prisma.post.findMany()
245
- * ```
246
- */
247
- get post(): Prisma.PostDelegate<ExtArgs, { omit: OmitOpts }>;
248
-
249
- /**
250
- * `prisma.account`: Exposes CRUD operations for the **Account** model.
251
- * Example usage:
252
- * ```ts
253
- * // Fetch zero or more Accounts
254
- * const accounts = await prisma.account.findMany()
255
- * ```
256
- */
257
- get account(): Prisma.AccountDelegate<ExtArgs, { omit: OmitOpts }>;
258
-
259
- /**
260
- * `prisma.session`: Exposes CRUD operations for the **Session** model.
261
- * Example usage:
262
- * ```ts
263
- * // Fetch zero or more Sessions
264
- * const sessions = await prisma.session.findMany()
265
- * ```
266
- */
267
- get session(): Prisma.SessionDelegate<ExtArgs, { omit: OmitOpts }>;
268
-
269
- /**
270
- * `prisma.verificationToken`: Exposes CRUD operations for the **VerificationToken** model.
271
- * Example usage:
272
- * ```ts
273
- * // Fetch zero or more VerificationTokens
274
- * const verificationTokens = await prisma.verificationToken.findMany()
275
- * ```
276
- */
277
- get verificationToken(): Prisma.VerificationTokenDelegate<
278
- ExtArgs,
279
- { omit: OmitOpts }
280
- >;
281
-
282
- /**
283
- * `prisma.job`: Exposes CRUD operations for the **Job** model.
284
- * Example usage:
285
- * ```ts
286
- * // Fetch zero or more Jobs
287
- * const jobs = await prisma.job.findMany()
288
- * ```
289
- */
290
- get job(): Prisma.JobDelegate<ExtArgs, { omit: OmitOpts }>;
291
-
292
- /**
293
- * `prisma.auditLog`: Exposes CRUD operations for the **AuditLog** model.
294
- * Example usage:
295
- * ```ts
296
- * // Fetch zero or more AuditLogs
297
- * const auditLogs = await prisma.auditLog.findMany()
298
- * ```
299
- */
300
- get auditLog(): Prisma.AuditLogDelegate<ExtArgs, { omit: OmitOpts }>;
301
- }
302
-
303
- export function getPrismaClientClass(): PrismaClientConstructor {
304
- return runtime.getPrismaClient(config) as unknown as PrismaClientConstructor;
305
- }