@prisma-idb/idb-client-generator 0.28.0 → 0.29.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/dist/fileCreators/batch-processor/create.js +9 -9
- package/dist/fileCreators/batch-processor/createDAG.js +18 -0
- package/dist/fileCreators/batch-processor/createDAG.js.map +1 -1
- package/dist/fileCreators/prisma-idb-client/classes/BaseIDBModelClass.js +9 -17
- package/dist/fileCreators/prisma-idb-client/classes/BaseIDBModelClass.js.map +1 -1
- package/dist/helpers/parseGeneratorConfig.js +170 -5
- package/dist/helpers/parseGeneratorConfig.js.map +1 -1
- package/package.json +1 -1
|
@@ -45,7 +45,7 @@ function createBatchProcessorFile(writer, models, prismaClientImport, rootModel)
|
|
|
45
45
|
const modelNames = models.map((m) => m.name);
|
|
46
46
|
writer.writeLine(`import { z, type ZodTypeAny } from "zod";`);
|
|
47
47
|
writer.writeLine(`import type { OutboxEventRecord } from "../client/idb-interface";`);
|
|
48
|
-
writer.writeLine(`import type {
|
|
48
|
+
writer.writeLine(`import type { Changelog } from "${prismaClientImport}";`);
|
|
49
49
|
writer.writeLine(`import type { PrismaClient } from "${prismaClientImport}";`);
|
|
50
50
|
writer.writeLine(`import { validators, keyPathValidators } from "../validators";`);
|
|
51
51
|
writer.blankLine();
|
|
@@ -62,7 +62,7 @@ function createBatchProcessorFile(writer, models, prismaClientImport, rootModel)
|
|
|
62
62
|
writer.writeLine(`}[keyof V & string];`);
|
|
63
63
|
writer.blankLine();
|
|
64
64
|
writer.writeLine(`export type LogWithRecord<V extends Partial<Record<string, ZodTypeAny>>> = {`);
|
|
65
|
-
writer.writeLine(` [M in keyof V & string]: Omit<
|
|
65
|
+
writer.writeLine(` [M in keyof V & string]: Omit<Changelog, "model" | "keyPath"> & {`);
|
|
66
66
|
writer.writeLine(` model: M;`);
|
|
67
67
|
writer.writeLine(` keyPath: Array<string | number>;`);
|
|
68
68
|
writer.writeLine(` record?: z.infer<V[M]> | null;`);
|
|
@@ -170,7 +170,7 @@ function createBatchProcessorFile(writer, models, prismaClientImport, rootModel)
|
|
|
170
170
|
writer.writeLine(`}): Promise<Array<LogWithRecord<typeof validators>>>`);
|
|
171
171
|
writer.block(() => {
|
|
172
172
|
writer
|
|
173
|
-
.writeLine(`const logs = await prisma.
|
|
173
|
+
.writeLine(`const logs = await prisma.changelog.findMany(`)
|
|
174
174
|
.block(() => {
|
|
175
175
|
writer
|
|
176
176
|
.writeLine(`where: `)
|
|
@@ -289,7 +289,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
|
|
|
289
289
|
writer.writeLine(`switch (operation) {`);
|
|
290
290
|
writer.writeLine(` case "create": {`);
|
|
291
291
|
writer.writeLine(` const result = await prisma.$transaction(async (tx) => {`);
|
|
292
|
-
writer.writeLine(` const existingLog = await tx.
|
|
292
|
+
writer.writeLine(` const existingLog = await tx.changelog.findUnique({`);
|
|
293
293
|
writer.writeLine(` where: { outboxEventId: event.id },`);
|
|
294
294
|
writer.writeLine(` });`);
|
|
295
295
|
writer.writeLine(` if (existingLog) {`);
|
|
@@ -360,7 +360,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
|
|
|
360
360
|
writer.writeLine(` }`);
|
|
361
361
|
writer.blankLine();
|
|
362
362
|
}
|
|
363
|
-
writer.writeLine(` const newLog = await tx.
|
|
363
|
+
writer.writeLine(` const newLog = await tx.changelog.create({`);
|
|
364
364
|
writer.writeLine(` data: {`);
|
|
365
365
|
writer.writeLine(` model: "${model.name}",`);
|
|
366
366
|
writer.writeLine(` keyPath: validKeyPath,`);
|
|
@@ -377,7 +377,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
|
|
|
377
377
|
writer.blankLine();
|
|
378
378
|
writer.writeLine(` case "update": {`);
|
|
379
379
|
writer.writeLine(` const result = await prisma.$transaction(async (tx) => {`);
|
|
380
|
-
writer.writeLine(` const existingLog = await tx.
|
|
380
|
+
writer.writeLine(` const existingLog = await tx.changelog.findUnique({`);
|
|
381
381
|
writer.writeLine(` where: { outboxEventId: event.id },`);
|
|
382
382
|
writer.writeLine(` });`);
|
|
383
383
|
writer.writeLine(` if (existingLog) {`);
|
|
@@ -494,7 +494,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
|
|
|
494
494
|
writer.writeLine(` }`);
|
|
495
495
|
}
|
|
496
496
|
writer.blankLine();
|
|
497
|
-
writer.writeLine(` const newLog = await tx.
|
|
497
|
+
writer.writeLine(` const newLog = await tx.changelog.create({`);
|
|
498
498
|
writer.writeLine(` data: {`);
|
|
499
499
|
writer.writeLine(` model: "${model.name}",`);
|
|
500
500
|
writer.writeLine(` keyPath: validKeyPath,`);
|
|
@@ -515,7 +515,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
|
|
|
515
515
|
writer.blankLine();
|
|
516
516
|
writer.writeLine(` case "delete": {`);
|
|
517
517
|
writer.writeLine(` const result = await prisma.$transaction(async (tx) => {`);
|
|
518
|
-
writer.writeLine(` const existingLog = await tx.
|
|
518
|
+
writer.writeLine(` const existingLog = await tx.changelog.findUnique({`);
|
|
519
519
|
writer.writeLine(` where: { outboxEventId: event.id },`);
|
|
520
520
|
writer.writeLine(` });`);
|
|
521
521
|
writer.writeLine(` if (existingLog) {`);
|
|
@@ -552,7 +552,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
|
|
|
552
552
|
writer.writeLine(` }`);
|
|
553
553
|
}
|
|
554
554
|
writer.blankLine();
|
|
555
|
-
writer.writeLine(` const newLog = await tx.
|
|
555
|
+
writer.writeLine(` const newLog = await tx.changelog.create({`);
|
|
556
556
|
writer.writeLine(` data: {`);
|
|
557
557
|
writer.writeLine(` model: "${model.name}",`);
|
|
558
558
|
writer.writeLine(` keyPath: validKeyPath,`);
|
|
@@ -17,6 +17,7 @@ function createDAG(filteredModels, rootModel) {
|
|
|
17
17
|
}
|
|
18
18
|
validateRootAuthority(dag, rootModel);
|
|
19
19
|
checkForCycles(dag);
|
|
20
|
+
validateClientGeneratedIds(filteredModels);
|
|
20
21
|
return dag;
|
|
21
22
|
}
|
|
22
23
|
function validateRootAuthority(dag, rootModel) {
|
|
@@ -72,4 +73,21 @@ function checkForCycles(dag) {
|
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
}
|
|
76
|
+
function validateClientGeneratedIds(models) {
|
|
77
|
+
for (const model of models) {
|
|
78
|
+
const idField = model.fields.find((f) => f.isId);
|
|
79
|
+
if (!idField) {
|
|
80
|
+
throw new Error(`Model "${model.name}" is missing an @id field. All syncable models must have a primary key.`);
|
|
81
|
+
}
|
|
82
|
+
if (!idField.hasDefaultValue) {
|
|
83
|
+
throw new Error(`Model "${model.name}" has @id field "${idField.name}" without a default value. Required: Use random defaults like uuid() or cuid() for all models (except rootModel) included in sync.`);
|
|
84
|
+
}
|
|
85
|
+
const isValidClientGeneratedId = typeof idField.default === "object" &&
|
|
86
|
+
"name" in idField.default &&
|
|
87
|
+
(idField.default.name === "uuid" || idField.default.name === "cuid");
|
|
88
|
+
if (!isValidClientGeneratedId) {
|
|
89
|
+
throw new Error(`Model "${model.name}" has @id field "${idField.name}" with invalid default "${typeof idField.default === "object" && "name" in idField.default ? idField.default.name : idField.default}". Required: Use random defaults like uuid() or cuid() for all models (except rootModel) included in sync.`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
75
93
|
//# sourceMappingURL=createDAG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDAG.js","sourceRoot":"","sources":["../../../src/fileCreators/batch-processor/createDAG.ts"],"names":[],"mappings":";;AAEA,
|
|
1
|
+
{"version":3,"file":"createDAG.js","sourceRoot":"","sources":["../../../src/fileCreators/batch-processor/createDAG.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,26 +21,18 @@ function addBaseModelClass(writer, outboxSync = false) {
|
|
|
21
21
|
}
|
|
22
22
|
function addEventEmitters(writer, outboxSync) {
|
|
23
23
|
writer
|
|
24
|
-
.writeLine(`subscribe(event: "create" | "update" | "delete" | ("create" | "update" | "delete")[], callback: (e:
|
|
24
|
+
.writeLine(`subscribe(event: "create" | "update" | "delete" | ("create" | "update" | "delete")[], callback: (e: CustomEvent<{ keyPath: PrismaIDBSchema[T]["key"]; oldKeyPath?: PrismaIDBSchema[T]["key"] }>) => void): () => void`)
|
|
25
25
|
.block(() => {
|
|
26
|
-
writer
|
|
27
|
-
.writeLine(`
|
|
28
|
-
.block(() => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
.writeLine(`else`)
|
|
32
|
-
.block(() => {
|
|
33
|
-
writer.writeLine(`this.eventEmitter.addEventListener(event, callback);`);
|
|
26
|
+
writer.write(`if (Array.isArray(event))`).block(() => {
|
|
27
|
+
writer.writeLine(`event.forEach((evt) => this.eventEmitter.addEventListener(evt, callback as EventListener));`);
|
|
28
|
+
writer.write(`return () =>`).block(() => {
|
|
29
|
+
writer.writeLine(`event.forEach((evt) => this.eventEmitter.removeEventListener(evt, callback as EventListener));`);
|
|
30
|
+
});
|
|
34
31
|
});
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
.block(() => {
|
|
39
|
-
writer.writeLine(`if (Array.isArray(event))`).block(() => {
|
|
40
|
-
writer.writeLine(`event.forEach((event) => this.eventEmitter.removeEventListener(event, callback));`);
|
|
41
|
-
writer.writeLine(`return;`);
|
|
32
|
+
writer.writeLine(`this.eventEmitter.addEventListener(event, callback as EventListener);`);
|
|
33
|
+
writer.write(`return () =>`).block(() => {
|
|
34
|
+
writer.writeLine(`this.eventEmitter.removeEventListener(event, callback as EventListener);`);
|
|
42
35
|
});
|
|
43
|
-
writer.writeLine(`this.eventEmitter.removeEventListener(event, callback);`);
|
|
44
36
|
});
|
|
45
37
|
writer
|
|
46
38
|
.writeLine(`protected async emit(event: "create" | "update" | "delete", keyPath: PrismaIDBSchema[T]["key"], oldKeyPath?: PrismaIDBSchema[T]["key"], record?: unknown, opts?: { silent?: boolean; addToOutbox?: boolean; tx?: IDBUtils.ReadwriteTransactionType })`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseIDBModelClass.js","sourceRoot":"","sources":["../../../../src/fileCreators/prisma-idb-client/classes/BaseIDBModelClass.ts"],"names":[],"mappings":";;AAEA,8CAmBC;AAnBD,SAAgB,iBAAiB,CAAC,MAAuB,EAAE,aAAsB,KAAK;IACpF,MAAM,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACtF,MAAM;aACH,SAAS,CAAC,oCAAoC,CAAC;aAC/C,SAAS,CAAC,8BAA8B,CAAC;aACzC,SAAS,CAAC,8BAA8B,CAAC;aACzC,SAAS,CAAC,oCAAoC,CAAC;aAC/C,SAAS,EAAE,CAAC;QAEf,MAAM,CAAC,SAAS,CAAC,4EAA4E,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACxG,MAAM;iBACH,SAAS,CAAC,uBAAuB,CAAC;iBAClC,SAAS,CAAC,yBAAyB,CAAC;iBACpC,SAAS,CAAC,6BAA6B,CAAC;iBACxC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAuB,EAAE,UAAmB;IACpE,MAAM;SACH,SAAS,CACR
|
|
1
|
+
{"version":3,"file":"BaseIDBModelClass.js","sourceRoot":"","sources":["../../../../src/fileCreators/prisma-idb-client/classes/BaseIDBModelClass.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ exports.parseGeneratorConfig = parseGeneratorConfig;
|
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const getFilteredModels_1 = require("./getFilteredModels");
|
|
9
9
|
function parseGeneratorConfig(options) {
|
|
10
|
-
const { models } = options.dmmf.datamodel;
|
|
10
|
+
const { models, enums } = options.dmmf.datamodel;
|
|
11
11
|
const outputPath = options.generator.output?.value;
|
|
12
12
|
const generatorConfig = options.generator.config;
|
|
13
13
|
const clientGenerator = options.otherGenerators.find((gen) => gen.provider.value === "prisma-client" || gen.provider.value === "prisma-client-js");
|
|
@@ -47,6 +47,9 @@ function parseGeneratorConfig(options) {
|
|
|
47
47
|
if (rootModelString && !rootModel) {
|
|
48
48
|
throw new Error(`@prisma-idb/idb-client-generator: Specified root model "${rootModelString}" does not exist in the Prisma schema.`);
|
|
49
49
|
}
|
|
50
|
+
if (outboxSync) {
|
|
51
|
+
validateChangelogSchema(models, enums);
|
|
52
|
+
}
|
|
50
53
|
const exportEnums = generatorConfig.exportEnums === "true";
|
|
51
54
|
let include = ["*"];
|
|
52
55
|
let exclude = [];
|
|
@@ -62,10 +65,6 @@ function parseGeneratorConfig(options) {
|
|
|
62
65
|
else if (Array.isArray(generatorConfig.exclude)) {
|
|
63
66
|
exclude = generatorConfig.exclude;
|
|
64
67
|
}
|
|
65
|
-
if (include.length > 0 && include[0] !== "*" && exclude.length > 0) {
|
|
66
|
-
throw new Error(`@prisma-idb/idb-client-generator: "include" and "exclude" are mutually exclusive (XOR).\n` +
|
|
67
|
-
`You can use either "include" or "exclude", but not both.`);
|
|
68
|
-
}
|
|
69
68
|
const matchPattern = (name, pattern) => {
|
|
70
69
|
const globToRegex = (glob) => {
|
|
71
70
|
const escaped = glob.replace(/[.+^${}()|[\]\\]/g, "\\$&");
|
|
@@ -74,6 +73,16 @@ function parseGeneratorConfig(options) {
|
|
|
74
73
|
};
|
|
75
74
|
return globToRegex(pattern).test(name);
|
|
76
75
|
};
|
|
76
|
+
if (include[0] !== "*" && include.some((pattern) => matchPattern("Changelog", pattern))) {
|
|
77
|
+
throw new Error(`@prisma-idb/idb-client-generator: "Changelog" model is automatically excluded and cannot be manually included. It is reserved for internal sync infrastructure.`);
|
|
78
|
+
}
|
|
79
|
+
if (!exclude.includes("Changelog")) {
|
|
80
|
+
exclude.push("Changelog");
|
|
81
|
+
}
|
|
82
|
+
if (include.length > 0 && include[0] !== "*" && exclude.length > 1) {
|
|
83
|
+
throw new Error(`@prisma-idb/idb-client-generator: "include" and "exclude" are mutually exclusive (XOR).\n` +
|
|
84
|
+
`You can use either "include" or "exclude", but not both.`);
|
|
85
|
+
}
|
|
77
86
|
const isIncluded = (modelName) => {
|
|
78
87
|
if (include[0] !== "*") {
|
|
79
88
|
return include.some((pattern) => matchPattern(modelName, pattern));
|
|
@@ -93,4 +102,160 @@ function parseGeneratorConfig(options) {
|
|
|
93
102
|
rootModel,
|
|
94
103
|
};
|
|
95
104
|
}
|
|
105
|
+
function validateChangelogSchema(models, enums) {
|
|
106
|
+
const changelogModel = models.find((m) => m.name === "Changelog");
|
|
107
|
+
if (!changelogModel) {
|
|
108
|
+
throw new Error(`@prisma-idb/idb-client-generator: A "Changelog" model is required when "outboxSync" is enabled.\n\n` +
|
|
109
|
+
`Add the following to your schema:\n\n` +
|
|
110
|
+
`model Changelog {\n` +
|
|
111
|
+
` id String @id @default(uuid(7))\n` +
|
|
112
|
+
` model String\n` +
|
|
113
|
+
` keyPath Json\n` +
|
|
114
|
+
` operation ChangeOperation\n` +
|
|
115
|
+
` scopeKey String\n` +
|
|
116
|
+
` outboxEventId String @unique\n` +
|
|
117
|
+
` @@index([model, id])\n` +
|
|
118
|
+
`}\n\n` +
|
|
119
|
+
`enum ChangeOperation {\n` +
|
|
120
|
+
` create\n` +
|
|
121
|
+
` update\n` +
|
|
122
|
+
` delete\n` +
|
|
123
|
+
`}`);
|
|
124
|
+
}
|
|
125
|
+
const expectedFieldCount = 6;
|
|
126
|
+
if (changelogModel.fields.length !== expectedFieldCount) {
|
|
127
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog model must have exactly ${expectedFieldCount} fields, but has ${changelogModel.fields.length}.`);
|
|
128
|
+
}
|
|
129
|
+
for (const field of changelogModel.fields) {
|
|
130
|
+
switch (field.name) {
|
|
131
|
+
case "id":
|
|
132
|
+
if (field.type !== "String") {
|
|
133
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.id must be of type String, got ${field.type}.`);
|
|
134
|
+
}
|
|
135
|
+
if (field.isList) {
|
|
136
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.id must not be a list.`);
|
|
137
|
+
}
|
|
138
|
+
if (!field.isId) {
|
|
139
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.id must have @id attribute.`);
|
|
140
|
+
}
|
|
141
|
+
if (!field.hasDefaultValue) {
|
|
142
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.id must have @default(uuid(7)).`);
|
|
143
|
+
}
|
|
144
|
+
if (typeof field.default !== "object" ||
|
|
145
|
+
!("name" in field.default) ||
|
|
146
|
+
field.default.name !== "uuid" ||
|
|
147
|
+
!field.default.args ||
|
|
148
|
+
field.default.args[0] !== 7) {
|
|
149
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.id @default must be uuid(7), got ${typeof field.default === "object" && "name" in field.default ? field.default.name : field.default}.`);
|
|
150
|
+
}
|
|
151
|
+
break;
|
|
152
|
+
case "model":
|
|
153
|
+
if (field.type !== "String") {
|
|
154
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.model must be of type String, got ${field.type}.`);
|
|
155
|
+
}
|
|
156
|
+
if (field.isList) {
|
|
157
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.model must not be a list.`);
|
|
158
|
+
}
|
|
159
|
+
if (!field.isRequired) {
|
|
160
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.model must be required (no ? modifier).`);
|
|
161
|
+
}
|
|
162
|
+
if (field.hasDefaultValue) {
|
|
163
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.model must not have a default value.`);
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
case "keyPath":
|
|
167
|
+
if (field.type !== "Json") {
|
|
168
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.keyPath must be of type Json, got ${field.type}.`);
|
|
169
|
+
}
|
|
170
|
+
if (field.isList) {
|
|
171
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.keyPath must not be a list.`);
|
|
172
|
+
}
|
|
173
|
+
if (!field.isRequired) {
|
|
174
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.keyPath must be required (no ? modifier).`);
|
|
175
|
+
}
|
|
176
|
+
if (field.hasDefaultValue) {
|
|
177
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.keyPath must not have a default value.`);
|
|
178
|
+
}
|
|
179
|
+
break;
|
|
180
|
+
case "operation":
|
|
181
|
+
if (field.type !== "ChangeOperation") {
|
|
182
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.operation must be of type ChangeOperation, got ${field.type}.`);
|
|
183
|
+
}
|
|
184
|
+
if (field.isList) {
|
|
185
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.operation must not be a list.`);
|
|
186
|
+
}
|
|
187
|
+
if (!field.isRequired) {
|
|
188
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.operation must be required (no ? modifier).`);
|
|
189
|
+
}
|
|
190
|
+
if (field.hasDefaultValue) {
|
|
191
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.operation must not have a default value.`);
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
194
|
+
case "scopeKey":
|
|
195
|
+
if (field.type !== "String") {
|
|
196
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.scopeKey must be of type String, got ${field.type}.`);
|
|
197
|
+
}
|
|
198
|
+
if (field.isList) {
|
|
199
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.scopeKey must not be a list.`);
|
|
200
|
+
}
|
|
201
|
+
if (!field.isRequired) {
|
|
202
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.scopeKey must be required (no ? modifier).`);
|
|
203
|
+
}
|
|
204
|
+
if (field.hasDefaultValue) {
|
|
205
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.scopeKey must not have a default value.`);
|
|
206
|
+
}
|
|
207
|
+
break;
|
|
208
|
+
case "outboxEventId":
|
|
209
|
+
if (field.type !== "String") {
|
|
210
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.outboxEventId must be of type String, got ${field.type}.`);
|
|
211
|
+
}
|
|
212
|
+
if (field.isList) {
|
|
213
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.outboxEventId must not be a list.`);
|
|
214
|
+
}
|
|
215
|
+
if (!field.isRequired) {
|
|
216
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.outboxEventId must be required (no ? modifier).`);
|
|
217
|
+
}
|
|
218
|
+
if (!field.isUnique) {
|
|
219
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.outboxEventId must have @unique attribute.`);
|
|
220
|
+
}
|
|
221
|
+
if (field.hasDefaultValue) {
|
|
222
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog.outboxEventId must not have a default value.`);
|
|
223
|
+
}
|
|
224
|
+
break;
|
|
225
|
+
default:
|
|
226
|
+
throw new Error(`@prisma-idb/idb-client-generator: Changelog model has unexpected field "${field.name}". Only these fields are allowed: id, model, keyPath, operation, scopeKey, outboxEventId.`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const changeOperationEnum = enums.find((e) => e.name === "ChangeOperation");
|
|
230
|
+
if (!changeOperationEnum) {
|
|
231
|
+
throw new Error(`@prisma-idb/idb-client-generator: A "ChangeOperation" enum is required when "outboxSync" is enabled.\n\n` +
|
|
232
|
+
`Add the following to your schema:\n\n` +
|
|
233
|
+
`enum ChangeOperation {\n` +
|
|
234
|
+
` create\n` +
|
|
235
|
+
` update\n` +
|
|
236
|
+
` delete\n` +
|
|
237
|
+
`}`);
|
|
238
|
+
}
|
|
239
|
+
if (changeOperationEnum.values.length !== 3) {
|
|
240
|
+
throw new Error(`@prisma-idb/idb-client-generator: ChangeOperation enum must have exactly 3 values (create, update, delete), but has ${changeOperationEnum.values.length}.`);
|
|
241
|
+
}
|
|
242
|
+
const enumValueNames = new Set();
|
|
243
|
+
for (const enumValue of changeOperationEnum.values) {
|
|
244
|
+
enumValueNames.add(enumValue.name);
|
|
245
|
+
switch (enumValue.name) {
|
|
246
|
+
case "create":
|
|
247
|
+
case "update":
|
|
248
|
+
case "delete":
|
|
249
|
+
break;
|
|
250
|
+
default:
|
|
251
|
+
throw new Error(`@prisma-idb/idb-client-generator: ChangeOperation enum has invalid value "${enumValue.name}". Only valid values are: create, update, delete.`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
const requiredEnumValues = ["create", "update", "delete"];
|
|
255
|
+
for (const required of requiredEnumValues) {
|
|
256
|
+
if (!enumValueNames.has(required)) {
|
|
257
|
+
throw new Error(`@prisma-idb/idb-client-generator: ChangeOperation enum is missing required value "${required}". Required values: create, update, delete.`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
96
261
|
//# sourceMappingURL=parseGeneratorConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseGeneratorConfig.js","sourceRoot":"","sources":["../../src/helpers/parseGeneratorConfig.ts"],"names":[],"mappings":";;;;;AAoBA,
|
|
1
|
+
{"version":3,"file":"parseGeneratorConfig.js","sourceRoot":"","sources":["../../src/helpers/parseGeneratorConfig.ts"],"names":[],"mappings":"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"}
|