@tekki-forge/generator-prisma 0.1.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.
- package/README.md +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +496 -0
- package/dist/index.js.map +1 -0
- package/package.json +38 -0
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# @tekki-forge/generator-prisma
|
|
2
|
+
|
|
3
|
+
Forge generator: IR -> Prisma schema.
|
|
4
|
+
|
|
5
|
+
Part of [Tekki Forge](https://www.npmjs.com/package/tekki-forge), which turns a `forge.config.ts` into a production-ready full-stack app. Apps created with `forge new` install this package for you; see the [tekki-forge](https://www.npmjs.com/package/tekki-forge) package for the documentation.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type AppIR, type EntityIR, type FieldIR, type Generator } from "@tekki-forge/compiler";
|
|
2
|
+
export declare const SCHEMA_PATH = "packages/database/prisma/schema.prisma";
|
|
3
|
+
export declare const prismaGenerator: Generator;
|
|
4
|
+
export declare function enumName(entity: EntityIR, field: FieldIR): string;
|
|
5
|
+
export declare function renderPrismaSchema(ir: AppIR): string;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
import { generated, indexPlan, pascalCase } from "@tekki-forge/compiler";
|
|
2
|
+
export const SCHEMA_PATH = "packages/database/prisma/schema.prisma";
|
|
3
|
+
export const prismaGenerator = {
|
|
4
|
+
name: "prisma",
|
|
5
|
+
generate: (ir) => [generated(SCHEMA_PATH, renderPrismaSchema(ir))],
|
|
6
|
+
};
|
|
7
|
+
export function enumName(entity, field) {
|
|
8
|
+
return `${entity.model}${pascalCase(field.name)}`;
|
|
9
|
+
}
|
|
10
|
+
function relationName(entity, field) {
|
|
11
|
+
return `${entity.model}_${field.name}`;
|
|
12
|
+
}
|
|
13
|
+
export function renderPrismaSchema(ir) {
|
|
14
|
+
const back = new Map();
|
|
15
|
+
const addBack = (target, rel) => back.set(target, [...(back.get(target) ?? []), rel]);
|
|
16
|
+
const fileFields = [];
|
|
17
|
+
for (const e of ir.entities) {
|
|
18
|
+
for (const f of e.fields) {
|
|
19
|
+
if (f.relation)
|
|
20
|
+
addBack(f.relation.model, { name: f.relation.inverse, model: e.model, relation: relationName(e, f) });
|
|
21
|
+
if (f.file) {
|
|
22
|
+
fileFields.push({ e, f });
|
|
23
|
+
addBack("File", { name: `${e.delegate}${pascalCase(f.name)}`, model: e.model, relation: relationName(e, f) });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (e.features.tenant)
|
|
27
|
+
addBack("Organization", { name: lowerPlural(e), model: e.model, relation: `${e.model}_organization` });
|
|
28
|
+
}
|
|
29
|
+
const hasFiles = fileFields.length > 0 || ir.plugins.some((pl) => pl.name === "storage");
|
|
30
|
+
const hasComments = ir.entities.some((e) => e.features.comments);
|
|
31
|
+
const blocks = [
|
|
32
|
+
`// @generated by Forge from forge.config.ts — do not edit. Run \`forge generate\` instead.
|
|
33
|
+
|
|
34
|
+
generator client {
|
|
35
|
+
provider = "prisma-client"
|
|
36
|
+
output = "../src/generated/prisma"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
datasource db {
|
|
40
|
+
provider = "postgresql"
|
|
41
|
+
}`,
|
|
42
|
+
...authModels(ir, back, hasFiles, hasComments),
|
|
43
|
+
auditLogModel(ir),
|
|
44
|
+
notificationModel(ir),
|
|
45
|
+
savedViewModel(ir),
|
|
46
|
+
apiKeyModel(ir),
|
|
47
|
+
...(ir.teams?.enabled ? teamModels(back.get("Team") ?? []) : []),
|
|
48
|
+
...(hasFiles ? [fileModel(ir, back.get("File") ?? [])] : []),
|
|
49
|
+
...(hasComments ? [commentModel(ir)] : []),
|
|
50
|
+
];
|
|
51
|
+
for (const e of ir.entities) {
|
|
52
|
+
blocks.push(entityModel(ir, e, back.get(e.model) ?? []));
|
|
53
|
+
for (const f of e.fields) {
|
|
54
|
+
if (f.kind === "enum")
|
|
55
|
+
blocks.push(`enum ${enumName(e, f)} {\n${f.enumValues.map((v) => ` ${v.value}`).join("\n")}\n}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return blocks.join("\n\n") + "\n";
|
|
59
|
+
}
|
|
60
|
+
function lowerPlural(e) {
|
|
61
|
+
return e.delegate + (e.delegate.endsWith("s") ? "es" : "s");
|
|
62
|
+
}
|
|
63
|
+
function backRelationLines(rels) {
|
|
64
|
+
return rels.map((r) => ` ${r.name} ${r.model}[] @relation("${r.relation}")`);
|
|
65
|
+
}
|
|
66
|
+
function entityModel(ir, e, backRels) {
|
|
67
|
+
const lines = [`model ${e.model} {`, ` id String @id @default(uuid()) @db.Uuid`];
|
|
68
|
+
const indexes = [];
|
|
69
|
+
for (const f of e.fields) {
|
|
70
|
+
if (f.relation?.type === "many-to-many") {
|
|
71
|
+
// Implicit join table (_<Model>_<field>); Prisma removes links with either side.
|
|
72
|
+
lines.push(` ${f.name} ${f.relation.model}[] @relation("${relationName(e, f)}")`);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (f.kind === "location") {
|
|
76
|
+
const opt = f.required ? "" : "?";
|
|
77
|
+
lines.push(` ${f.name}Lat Float${opt} @map("${f.column}_lat")`, ` ${f.name}Lng Float${opt} @map("${f.column}_lng")`);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (f.file) {
|
|
81
|
+
lines.push(` ${f.apiName} String? @db.Uuid @map("${f.column}")`);
|
|
82
|
+
lines.push(` ${f.name} File? @relation("${relationName(e, f)}", fields: [${f.apiName}], references: [id], onDelete: SetNull)`);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (f.relation) {
|
|
86
|
+
const fkType = f.relation.builtin ? "String" : "String @db.Uuid";
|
|
87
|
+
const [base, attr] = fkType.split(" ");
|
|
88
|
+
lines.push(` ${f.relation.foreignKey} ${base}${f.required ? "" : "?"}${attr ? " " + attr : ""} @map("${f.relation.foreignKeyColumn}")`);
|
|
89
|
+
const onDelete = { cascade: "Cascade", restrict: "Restrict", setNull: "SetNull" }[f.relation.onDelete];
|
|
90
|
+
lines.push(` ${f.name} ${f.relation.model}${f.required ? "" : "?"} @relation("${relationName(e, f)}", fields: [${f.relation.foreignKey}], references: [id], onDelete: ${onDelete})`);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const type = scalarType(e, f);
|
|
94
|
+
const attrs = [`@map("${f.column}")`];
|
|
95
|
+
if (f.unique && !e.features.tenant)
|
|
96
|
+
attrs.unshift("@unique");
|
|
97
|
+
const def = defaultAttr(f);
|
|
98
|
+
if (def)
|
|
99
|
+
attrs.unshift(def);
|
|
100
|
+
const native = nativeType(f);
|
|
101
|
+
if (native)
|
|
102
|
+
attrs.push(native);
|
|
103
|
+
lines.push(` ${f.name} ${type}${f.required || f.default ? "" : "?"} ${attrs.join(" ")}`);
|
|
104
|
+
if (f.unique && e.features.tenant)
|
|
105
|
+
indexes.push(` @@unique([organizationId, ${f.name}])`);
|
|
106
|
+
}
|
|
107
|
+
if (e.features.tenant) {
|
|
108
|
+
lines.push(` organizationId String @map("organization_id")`);
|
|
109
|
+
lines.push(` organization Organization @relation("${e.model}_organization", fields: [organizationId], references: [id], onDelete: Cascade)`);
|
|
110
|
+
}
|
|
111
|
+
if (e.features.timestamps) {
|
|
112
|
+
lines.push(` createdAt DateTime @default(now()) @map("created_at")`);
|
|
113
|
+
lines.push(` updatedAt DateTime @updatedAt @map("updated_at")`);
|
|
114
|
+
}
|
|
115
|
+
if (e.features.softDelete) {
|
|
116
|
+
lines.push(` deletedAt DateTime? @map("deleted_at")`);
|
|
117
|
+
}
|
|
118
|
+
lines.push(...backRelationLines(backRels));
|
|
119
|
+
// Indexes follow the queries the app runs (lists, filters, views, dashboard) — see indexPlan().
|
|
120
|
+
for (const idx of indexPlan(ir, e))
|
|
121
|
+
indexes.push(` @@index([${idx.fields.join(", ")}])`);
|
|
122
|
+
lines.push("", ...[...new Set(indexes)], ` @@map("${e.tableName}")`, "}");
|
|
123
|
+
return lines.join("\n");
|
|
124
|
+
}
|
|
125
|
+
function scalarType(e, f) {
|
|
126
|
+
switch (f.kind) {
|
|
127
|
+
case "integer":
|
|
128
|
+
return "Int";
|
|
129
|
+
case "decimal":
|
|
130
|
+
case "money":
|
|
131
|
+
return "Decimal";
|
|
132
|
+
case "percentage":
|
|
133
|
+
return "Float";
|
|
134
|
+
case "boolean":
|
|
135
|
+
return "Boolean";
|
|
136
|
+
case "date":
|
|
137
|
+
case "datetime":
|
|
138
|
+
return "DateTime";
|
|
139
|
+
case "json":
|
|
140
|
+
return "Json";
|
|
141
|
+
case "enum":
|
|
142
|
+
return enumName(e, f);
|
|
143
|
+
default:
|
|
144
|
+
return "String";
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function nativeType(f) {
|
|
148
|
+
switch (f.kind) {
|
|
149
|
+
case "string":
|
|
150
|
+
case "email":
|
|
151
|
+
case "url":
|
|
152
|
+
case "phone":
|
|
153
|
+
case "color":
|
|
154
|
+
return `@db.VarChar(${f.validation.maxLength ?? 255})`;
|
|
155
|
+
case "text":
|
|
156
|
+
case "richtext":
|
|
157
|
+
return "@db.Text";
|
|
158
|
+
case "decimal":
|
|
159
|
+
case "money":
|
|
160
|
+
return `@db.Decimal(${f.precision}, ${f.scale})`;
|
|
161
|
+
case "date":
|
|
162
|
+
return "@db.Date";
|
|
163
|
+
case "datetime":
|
|
164
|
+
return "@db.Timestamptz(3)";
|
|
165
|
+
default:
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function defaultAttr(f) {
|
|
170
|
+
const d = f.default;
|
|
171
|
+
if (!d)
|
|
172
|
+
return undefined;
|
|
173
|
+
if (d.kind === "now")
|
|
174
|
+
return "@default(now())";
|
|
175
|
+
const v = d.value;
|
|
176
|
+
if (f.kind === "enum")
|
|
177
|
+
return `@default(${v})`;
|
|
178
|
+
if (f.kind === "json")
|
|
179
|
+
return `@default(${JSON.stringify(JSON.stringify(v))})`;
|
|
180
|
+
if (f.kind === "date" || f.kind === "datetime")
|
|
181
|
+
return `@default(dbgenerated(${JSON.stringify(`'${v}'`)}))`;
|
|
182
|
+
if (typeof v === "string")
|
|
183
|
+
return `@default(${JSON.stringify(v)})`;
|
|
184
|
+
return `@default(${String(v)})`;
|
|
185
|
+
}
|
|
186
|
+
/** Uploaded objects (storage plugin). Rows are created on upload and attached when a record references them. */
|
|
187
|
+
function fileModel(ir, backRels) {
|
|
188
|
+
return `model File {
|
|
189
|
+
id String @id @default(uuid()) @db.Uuid
|
|
190
|
+
key String @unique
|
|
191
|
+
name String
|
|
192
|
+
size Int
|
|
193
|
+
mimeType String @map("mime_type")
|
|
194
|
+
entity String
|
|
195
|
+
field String
|
|
196
|
+
recordId String? @map("record_id")
|
|
197
|
+
status String @default("pending") // pending | attached | deleted
|
|
198
|
+
uploadedById String? @map("uploaded_by_id")
|
|
199
|
+
uploadedBy User? @relation("File_uploadedBy", fields: [uploadedById], references: [id], onDelete: SetNull)
|
|
200
|
+
${ir.tenancy.enabled ? ` organizationId String? @map("organization_id")\n` : ""} createdAt DateTime @default(now()) @map("created_at")
|
|
201
|
+
attachedAt DateTime? @map("attached_at")
|
|
202
|
+
${backRelationLines(backRels).join("\n")}
|
|
203
|
+
|
|
204
|
+
@@index([entity, recordId])
|
|
205
|
+
@@index([status, createdAt])
|
|
206
|
+
${ir.tenancy.enabled ? " @@index([organizationId])\n" : ""} @@map("files")
|
|
207
|
+
}`;
|
|
208
|
+
}
|
|
209
|
+
/** In-app notifications (bell). */
|
|
210
|
+
function notificationModel(ir) {
|
|
211
|
+
return `model Notification {
|
|
212
|
+
id String @id @default(uuid()) @db.Uuid
|
|
213
|
+
userId String @map("user_id")
|
|
214
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
215
|
+
${ir.tenancy.enabled ? ` organizationId String? @map("organization_id")\n` : ""} title String
|
|
216
|
+
body String?
|
|
217
|
+
link String?
|
|
218
|
+
event String?
|
|
219
|
+
entity String?
|
|
220
|
+
recordId String? @map("record_id")
|
|
221
|
+
readAt DateTime? @map("read_at")
|
|
222
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
223
|
+
|
|
224
|
+
@@index([userId, readAt])
|
|
225
|
+
@@index([userId, createdAt])
|
|
226
|
+
@@map("notifications")
|
|
227
|
+
}`;
|
|
228
|
+
}
|
|
229
|
+
/** Saved list filters ("views"), personal or shared with the organization. */
|
|
230
|
+
function savedViewModel(ir) {
|
|
231
|
+
return `model SavedView {
|
|
232
|
+
id String @id @default(uuid()) @db.Uuid
|
|
233
|
+
userId String @map("user_id")
|
|
234
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
235
|
+
${ir.tenancy.enabled ? ` organizationId String? @map("organization_id")\n` : ""} resource String
|
|
236
|
+
name String
|
|
237
|
+
query Json
|
|
238
|
+
shared Boolean @default(false)
|
|
239
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
240
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
241
|
+
|
|
242
|
+
@@index([resource, userId])
|
|
243
|
+
@@map("saved_views")
|
|
244
|
+
}`;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Scoped API keys (`Authorization: Bearer fk_<prefix>_<secret>`). Only a SHA-256 hash of the secret is stored;
|
|
248
|
+
* `prefix` is the public lookup id.
|
|
249
|
+
*/
|
|
250
|
+
function apiKeyModel(ir) {
|
|
251
|
+
const t = ir.tenancy.enabled;
|
|
252
|
+
return `model ApiKey {
|
|
253
|
+
id String @id @default(uuid()) @db.Uuid
|
|
254
|
+
name String
|
|
255
|
+
prefix String @unique
|
|
256
|
+
hash String
|
|
257
|
+
scopes String[]
|
|
258
|
+
role String
|
|
259
|
+
${t ? ` organizationId String? @map("organization_id")\n organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n` : ""} createdById String? @map("created_by_id")
|
|
260
|
+
createdBy User? @relation("ApiKey_createdBy", fields: [createdById], references: [id], onDelete: SetNull)
|
|
261
|
+
expiresAt DateTime? @map("expires_at")
|
|
262
|
+
lastUsedAt DateTime? @map("last_used_at")
|
|
263
|
+
revokedAt DateTime? @map("revoked_at")
|
|
264
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
265
|
+
auditLogs AuditLog[]
|
|
266
|
+
|
|
267
|
+
${t ? " @@index([organizationId])\n" : ""} @@map("api_keys")
|
|
268
|
+
}`;
|
|
269
|
+
}
|
|
270
|
+
/** Teams inside an organization (features.teams) and their members. */
|
|
271
|
+
function teamModels(backRels) {
|
|
272
|
+
return [
|
|
273
|
+
`model Team {
|
|
274
|
+
id String @id @default(uuid())
|
|
275
|
+
organizationId String @map("organization_id")
|
|
276
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
277
|
+
name String
|
|
278
|
+
description String?
|
|
279
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
280
|
+
updatedAt DateTime @updatedAt @map("updated_at")
|
|
281
|
+
members TeamMember[]
|
|
282
|
+
${backRelationLines(backRels).join("\n")}
|
|
283
|
+
|
|
284
|
+
@@unique([organizationId, name])
|
|
285
|
+
@@map("teams")
|
|
286
|
+
}`,
|
|
287
|
+
`model TeamMember {
|
|
288
|
+
id String @id @default(uuid())
|
|
289
|
+
teamId String @map("team_id")
|
|
290
|
+
team Team @relation(fields: [teamId], references: [id], onDelete: Cascade)
|
|
291
|
+
userId String @map("user_id")
|
|
292
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
293
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
294
|
+
|
|
295
|
+
@@unique([teamId, userId])
|
|
296
|
+
@@index([userId])
|
|
297
|
+
@@map("team_members")
|
|
298
|
+
}`,
|
|
299
|
+
];
|
|
300
|
+
}
|
|
301
|
+
/** Record comments, named so they never clash with a user entity called Comment (entities with `features: { comments: true }`); mentions hold user ids. */
|
|
302
|
+
function commentModel(ir) {
|
|
303
|
+
return `model RecordComment {
|
|
304
|
+
id String @id @default(uuid()) @db.Uuid
|
|
305
|
+
${ir.tenancy.enabled ? ` organizationId String? @map("organization_id")\n` : ""} entity String
|
|
306
|
+
recordId String @map("record_id")
|
|
307
|
+
authorId String? @map("author_id")
|
|
308
|
+
author User? @relation("RecordComment_author", fields: [authorId], references: [id], onDelete: SetNull)
|
|
309
|
+
body String @db.Text
|
|
310
|
+
mentions String[] @default([])
|
|
311
|
+
editedAt DateTime? @map("edited_at")
|
|
312
|
+
deletedAt DateTime? @map("deleted_at")
|
|
313
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
314
|
+
|
|
315
|
+
@@index([entity, recordId, createdAt])
|
|
316
|
+
@@index([authorId])
|
|
317
|
+
${ir.tenancy.enabled ? " @@index([organizationId])\n" : ""} @@map("record_comments")
|
|
318
|
+
}`;
|
|
319
|
+
}
|
|
320
|
+
function auditLogModel(ir) {
|
|
321
|
+
return `model AuditLog {
|
|
322
|
+
id String @id @default(uuid()) @db.Uuid
|
|
323
|
+
entity String
|
|
324
|
+
recordId String @map("record_id")
|
|
325
|
+
action String
|
|
326
|
+
userId String? @map("user_id")
|
|
327
|
+
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
|
|
328
|
+
${ir.tenancy.enabled ? ` organizationId String? @map("organization_id")\n` : ""} changes Json?
|
|
329
|
+
ipAddress String? @map("ip_address")
|
|
330
|
+
apiKeyId String? @db.Uuid @map("api_key_id")
|
|
331
|
+
apiKey ApiKey? @relation(fields: [apiKeyId], references: [id], onDelete: SetNull)
|
|
332
|
+
createdAt DateTime @default(now()) @map("created_at")
|
|
333
|
+
|
|
334
|
+
@@index([entity, recordId])
|
|
335
|
+
@@index([apiKeyId])
|
|
336
|
+
@@index([userId])
|
|
337
|
+
${ir.tenancy.enabled ? " @@index([organizationId])\n" : ""} @@index([createdAt])
|
|
338
|
+
@@map("audit_logs")
|
|
339
|
+
}`;
|
|
340
|
+
}
|
|
341
|
+
/** Better Auth core + plugin models, matching better-auth 1.7 `getAuthTables`. */
|
|
342
|
+
function authModels(ir, back, files = false, comments = false) {
|
|
343
|
+
const t = ir.tenancy.enabled;
|
|
344
|
+
const models = [];
|
|
345
|
+
models.push(`model User {
|
|
346
|
+
id String @id
|
|
347
|
+
name String
|
|
348
|
+
email String @unique
|
|
349
|
+
emailVerified Boolean @default(false)
|
|
350
|
+
image String?
|
|
351
|
+
role String?
|
|
352
|
+
banned Boolean? @default(false)
|
|
353
|
+
banReason String?
|
|
354
|
+
banExpires DateTime?
|
|
355
|
+
twoFactorEnabled Boolean? @default(false)
|
|
356
|
+
createdAt DateTime @default(now())
|
|
357
|
+
updatedAt DateTime @default(now()) @updatedAt
|
|
358
|
+
sessions Session[]
|
|
359
|
+
accounts Account[]
|
|
360
|
+
auditLogs AuditLog[]
|
|
361
|
+
notifications Notification[]
|
|
362
|
+
savedViews SavedView[]
|
|
363
|
+
createdApiKeys ApiKey[] @relation("ApiKey_createdBy")
|
|
364
|
+
${ir.teams?.enabled ? " teamMemberships TeamMember[]\n" : ""}${files ? ' uploadedFiles File[] @relation("File_uploadedBy")\n' : ""}${comments ? ' recordComments RecordComment[] @relation("RecordComment_author")\n' : ""}${ir.auth.twoFactor ? " twoFactors TwoFactor[]\n" : ""}${ir.auth.passkeys ? " passkeys Passkey[]\n" : ""}${t ? " members Member[]\n invitations Invitation[]\n" : ""}${backRelationLines(back.get("User") ?? []).join("\n")}
|
|
365
|
+
|
|
366
|
+
@@map("user")
|
|
367
|
+
}`);
|
|
368
|
+
models.push(`model Session {
|
|
369
|
+
id String @id
|
|
370
|
+
expiresAt DateTime
|
|
371
|
+
token String @unique
|
|
372
|
+
createdAt DateTime @default(now())
|
|
373
|
+
updatedAt DateTime @updatedAt
|
|
374
|
+
ipAddress String?
|
|
375
|
+
userAgent String?
|
|
376
|
+
userId String
|
|
377
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
378
|
+
impersonatedBy String?
|
|
379
|
+
${t ? " activeOrganizationId String?\n" : ""}
|
|
380
|
+
@@index([userId])
|
|
381
|
+
@@map("session")
|
|
382
|
+
}`);
|
|
383
|
+
models.push(`model Account {
|
|
384
|
+
id String @id
|
|
385
|
+
accountId String
|
|
386
|
+
providerId String
|
|
387
|
+
userId String
|
|
388
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
389
|
+
accessToken String?
|
|
390
|
+
refreshToken String?
|
|
391
|
+
idToken String?
|
|
392
|
+
accessTokenExpiresAt DateTime?
|
|
393
|
+
refreshTokenExpiresAt DateTime?
|
|
394
|
+
scope String?
|
|
395
|
+
password String?
|
|
396
|
+
createdAt DateTime @default(now())
|
|
397
|
+
updatedAt DateTime @updatedAt
|
|
398
|
+
|
|
399
|
+
@@index([userId])
|
|
400
|
+
@@map("account")
|
|
401
|
+
}`);
|
|
402
|
+
models.push(`model Verification {
|
|
403
|
+
id String @id
|
|
404
|
+
identifier String
|
|
405
|
+
value String
|
|
406
|
+
expiresAt DateTime
|
|
407
|
+
createdAt DateTime @default(now())
|
|
408
|
+
updatedAt DateTime @default(now()) @updatedAt
|
|
409
|
+
|
|
410
|
+
@@index([identifier])
|
|
411
|
+
@@map("verification")
|
|
412
|
+
}`);
|
|
413
|
+
if (t) {
|
|
414
|
+
models.push(`model Organization {
|
|
415
|
+
id String @id
|
|
416
|
+
name String
|
|
417
|
+
slug String @unique
|
|
418
|
+
logo String?
|
|
419
|
+
createdAt DateTime
|
|
420
|
+
metadata String?
|
|
421
|
+
members Member[]
|
|
422
|
+
invitations Invitation[]
|
|
423
|
+
apiKeys ApiKey[]
|
|
424
|
+
${ir.teams?.enabled ? " teams Team[]\n" : ""}${backRelationLines(back.get("Organization") ?? []).join("\n")}
|
|
425
|
+
|
|
426
|
+
@@map("organization")
|
|
427
|
+
}`);
|
|
428
|
+
models.push(`model Member {
|
|
429
|
+
id String @id
|
|
430
|
+
organizationId String
|
|
431
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
432
|
+
userId String
|
|
433
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
434
|
+
role String @default("member")
|
|
435
|
+
createdAt DateTime
|
|
436
|
+
|
|
437
|
+
@@index([organizationId])
|
|
438
|
+
@@index([userId])
|
|
439
|
+
@@map("member")
|
|
440
|
+
}`);
|
|
441
|
+
models.push(`model Invitation {
|
|
442
|
+
id String @id
|
|
443
|
+
organizationId String
|
|
444
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
445
|
+
email String
|
|
446
|
+
role String?
|
|
447
|
+
status String @default("pending")
|
|
448
|
+
expiresAt DateTime
|
|
449
|
+
createdAt DateTime @default(now())
|
|
450
|
+
inviterId String
|
|
451
|
+
user User @relation(fields: [inviterId], references: [id], onDelete: Cascade)
|
|
452
|
+
|
|
453
|
+
@@index([organizationId])
|
|
454
|
+
@@index([email])
|
|
455
|
+
@@map("invitation")
|
|
456
|
+
}`);
|
|
457
|
+
}
|
|
458
|
+
if (ir.auth.twoFactor) {
|
|
459
|
+
models.push(`model TwoFactor {
|
|
460
|
+
id String @id
|
|
461
|
+
secret String
|
|
462
|
+
backupCodes String
|
|
463
|
+
userId String
|
|
464
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
465
|
+
verified Boolean? @default(true)
|
|
466
|
+
failedVerificationCount Int? @default(0)
|
|
467
|
+
lockedUntil DateTime?
|
|
468
|
+
|
|
469
|
+
@@index([secret])
|
|
470
|
+
@@index([userId])
|
|
471
|
+
@@map("twoFactor")
|
|
472
|
+
}`);
|
|
473
|
+
}
|
|
474
|
+
if (ir.auth.passkeys) {
|
|
475
|
+
models.push(`model Passkey {
|
|
476
|
+
id String @id
|
|
477
|
+
name String?
|
|
478
|
+
publicKey String
|
|
479
|
+
userId String
|
|
480
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
481
|
+
credentialID String
|
|
482
|
+
counter Int
|
|
483
|
+
deviceType String
|
|
484
|
+
backedUp Boolean
|
|
485
|
+
transports String?
|
|
486
|
+
createdAt DateTime?
|
|
487
|
+
aaguid String?
|
|
488
|
+
|
|
489
|
+
@@index([userId])
|
|
490
|
+
@@index([credentialID])
|
|
491
|
+
@@map("passkey")
|
|
492
|
+
}`);
|
|
493
|
+
}
|
|
494
|
+
return models;
|
|
495
|
+
}
|
|
496
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tekki-forge/generator-prisma",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Forge generator: IR -> Prisma schema",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"code-generator",
|
|
7
|
+
"forge",
|
|
8
|
+
"full-stack",
|
|
9
|
+
"tekki-forge"
|
|
10
|
+
],
|
|
11
|
+
"author": "Mahy KANE",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"default": "./dist/index.js"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=22"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@tekki-forge/compiler": "^0.1.0"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc -p tsconfig.json",
|
|
36
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
37
|
+
}
|
|
38
|
+
}
|