@zenstackhq/runtime 1.1.1 → 1.2.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/cross/index.d.mts +229 -0
- package/cross/index.d.ts +229 -0
- package/cross/index.js +464 -0
- package/cross/index.js.map +1 -0
- package/cross/index.mjs +431 -0
- package/cross/index.mjs.map +1 -0
- package/enhancements/index.d.ts +2 -3
- package/enhancements/index.js +2 -3
- package/enhancements/index.js.map +1 -1
- package/enhancements/model-data-visitor.d.ts +1 -1
- package/enhancements/model-data-visitor.js +2 -2
- package/enhancements/model-data-visitor.js.map +1 -1
- package/enhancements/omit.d.ts +2 -1
- package/enhancements/omit.js +4 -5
- package/enhancements/omit.js.map +1 -1
- package/enhancements/password.d.ts +2 -1
- package/enhancements/password.js +2 -2
- package/enhancements/password.js.map +1 -1
- package/enhancements/policy/handler.d.ts +2 -1
- package/enhancements/policy/handler.js +14 -15
- package/enhancements/policy/handler.js.map +1 -1
- package/enhancements/policy/index.d.ts +2 -1
- package/enhancements/policy/index.js +2 -2
- package/enhancements/policy/index.js.map +1 -1
- package/enhancements/policy/policy-utils.d.ts +4 -4
- package/enhancements/policy/policy-utils.js +11 -11
- package/enhancements/policy/policy-utils.js.map +1 -1
- package/enhancements/proxy.d.ts +2 -2
- package/enhancements/proxy.js.map +1 -1
- package/enhancements/types.d.ts +2 -17
- package/enhancements/types.js.map +1 -1
- package/enhancements/utils.d.ts +3 -19
- package/enhancements/utils.js +1 -44
- package/enhancements/utils.js.map +1 -1
- package/enhancements/where-visitor.d.ts +1 -2
- package/enhancements/where-visitor.js +3 -4
- package/enhancements/where-visitor.js.map +1 -1
- package/package.json +10 -5
- package/types.d.ts +0 -58
- package/types.js +0 -14
- package/types.js.map +1 -1
- package/enhancements/model-meta.d.ts +0 -10
- package/enhancements/model-meta.js +0 -21
- package/enhancements/model-meta.js.map +0 -1
- package/enhancements/nested-write-visitor.d.ts +0 -75
- package/enhancements/nested-write-visitor.js +0 -241
- package/enhancements/nested-write-visitor.js.map +0 -1
package/cross/index.mjs
ADDED
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __async = (__this, __arguments, generator) => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
var fulfilled = (value) => {
|
|
23
|
+
try {
|
|
24
|
+
step(generator.next(value));
|
|
25
|
+
} catch (e) {
|
|
26
|
+
reject(e);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var rejected = (value) => {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.throw(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// src/cross/model-meta.ts
|
|
42
|
+
import { lowerCaseFirst } from "lower-case-first";
|
|
43
|
+
function resolveField(modelMeta, model, field) {
|
|
44
|
+
var _a;
|
|
45
|
+
return (_a = modelMeta.fields[lowerCaseFirst(model)]) == null ? void 0 : _a[field];
|
|
46
|
+
}
|
|
47
|
+
function getFields(modelMeta, model) {
|
|
48
|
+
return modelMeta.fields[lowerCaseFirst(model)];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// src/cross/nested-read-visitor.ts
|
|
52
|
+
var NestedReadVisitor = class {
|
|
53
|
+
constructor(modelMeta, callback) {
|
|
54
|
+
this.modelMeta = modelMeta;
|
|
55
|
+
this.callback = callback;
|
|
56
|
+
}
|
|
57
|
+
doVisit(model, field, kind, args) {
|
|
58
|
+
if (this.callback.field) {
|
|
59
|
+
const r = this.callback.field(model, field, kind, args);
|
|
60
|
+
if (r === false) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (!args || typeof args !== "object") {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
let selectInclude;
|
|
68
|
+
let nextKind;
|
|
69
|
+
if (args.select) {
|
|
70
|
+
selectInclude = args.select;
|
|
71
|
+
nextKind = "select";
|
|
72
|
+
} else if (args.include) {
|
|
73
|
+
selectInclude = args.include;
|
|
74
|
+
nextKind = "include";
|
|
75
|
+
}
|
|
76
|
+
if (selectInclude && typeof selectInclude === "object") {
|
|
77
|
+
for (const [k, v] of Object.entries(selectInclude)) {
|
|
78
|
+
if (k === "_count" && typeof v === "object" && v) {
|
|
79
|
+
this.doVisit(model, field, kind, v);
|
|
80
|
+
} else {
|
|
81
|
+
const field2 = resolveField(this.modelMeta, model, k);
|
|
82
|
+
if (field2) {
|
|
83
|
+
this.doVisit(field2.type, field2, nextKind, v);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
visit(model, args) {
|
|
90
|
+
this.doVisit(model, void 0, void 0, args);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// src/cross/types.ts
|
|
95
|
+
var PrismaWriteActions = [
|
|
96
|
+
"create",
|
|
97
|
+
"createMany",
|
|
98
|
+
"connectOrCreate",
|
|
99
|
+
"update",
|
|
100
|
+
"updateMany",
|
|
101
|
+
"upsert",
|
|
102
|
+
"connect",
|
|
103
|
+
"disconnect",
|
|
104
|
+
"set",
|
|
105
|
+
"delete",
|
|
106
|
+
"deleteMany"
|
|
107
|
+
];
|
|
108
|
+
|
|
109
|
+
// src/cross/utils.ts
|
|
110
|
+
function getModelFields(data) {
|
|
111
|
+
return data ? Object.keys(data) : [];
|
|
112
|
+
}
|
|
113
|
+
function enumerate(x) {
|
|
114
|
+
if (x === null || x === void 0) {
|
|
115
|
+
return [];
|
|
116
|
+
} else if (Array.isArray(x)) {
|
|
117
|
+
return x;
|
|
118
|
+
} else {
|
|
119
|
+
return [x];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function zip(x, y) {
|
|
123
|
+
if (Array.isArray(x)) {
|
|
124
|
+
if (!Array.isArray(y)) {
|
|
125
|
+
throw new Error("x and y should be both array or both scalar");
|
|
126
|
+
}
|
|
127
|
+
if (x.length !== y.length) {
|
|
128
|
+
throw new Error("x and y should have the same length");
|
|
129
|
+
}
|
|
130
|
+
return x.map((_, i) => [x[i], y[i]]);
|
|
131
|
+
} else {
|
|
132
|
+
if (Array.isArray(y)) {
|
|
133
|
+
throw new Error("x and y should be both array or both scalar");
|
|
134
|
+
}
|
|
135
|
+
return [[x, y]];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// src/cross/nested-write-visitor.ts
|
|
140
|
+
var NestedWriteVisitor = class {
|
|
141
|
+
constructor(modelMeta, callback) {
|
|
142
|
+
this.modelMeta = modelMeta;
|
|
143
|
+
this.callback = callback;
|
|
144
|
+
}
|
|
145
|
+
isPrismaWriteAction(value) {
|
|
146
|
+
return PrismaWriteActions.includes(value);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Start visiting
|
|
150
|
+
*
|
|
151
|
+
* @see NestedWriterVisitorCallback
|
|
152
|
+
*/
|
|
153
|
+
visit(model, action, args) {
|
|
154
|
+
return __async(this, null, function* () {
|
|
155
|
+
if (!args) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
let topData = args;
|
|
159
|
+
switch (action) {
|
|
160
|
+
case "create":
|
|
161
|
+
topData = topData.data;
|
|
162
|
+
break;
|
|
163
|
+
case "delete":
|
|
164
|
+
case "deleteMany":
|
|
165
|
+
topData = topData.where;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
yield this.doVisit(model, action, topData, void 0, void 0, []);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
doVisit(model, action, data, parent, field, nestingPath) {
|
|
172
|
+
return __async(this, null, function* () {
|
|
173
|
+
if (!data) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const context = { parent, field, nestingPath: [...nestingPath] };
|
|
177
|
+
const toplevel = field == void 0;
|
|
178
|
+
switch (action) {
|
|
179
|
+
case "create":
|
|
180
|
+
context.nestingPath.push({ field, model, where: {}, unique: false });
|
|
181
|
+
for (const item of enumerate(data)) {
|
|
182
|
+
let callbackResult;
|
|
183
|
+
if (this.callback.create) {
|
|
184
|
+
callbackResult = yield this.callback.create(model, item, context);
|
|
185
|
+
}
|
|
186
|
+
if (callbackResult !== false) {
|
|
187
|
+
const subPayload = typeof callbackResult === "object" ? callbackResult : item;
|
|
188
|
+
yield this.visitSubPayload(model, action, subPayload, context.nestingPath);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
break;
|
|
192
|
+
case "createMany":
|
|
193
|
+
if (data) {
|
|
194
|
+
context.nestingPath.push({ field, model, where: {}, unique: false });
|
|
195
|
+
let callbackResult;
|
|
196
|
+
if (this.callback.createMany) {
|
|
197
|
+
callbackResult = yield this.callback.createMany(model, data, context);
|
|
198
|
+
}
|
|
199
|
+
if (callbackResult !== false) {
|
|
200
|
+
const subPayload = typeof callbackResult === "object" ? callbackResult : data.data;
|
|
201
|
+
yield this.visitSubPayload(model, action, subPayload, context.nestingPath);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
break;
|
|
205
|
+
case "connectOrCreate":
|
|
206
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
207
|
+
for (const item of enumerate(data)) {
|
|
208
|
+
let callbackResult;
|
|
209
|
+
if (this.callback.connectOrCreate) {
|
|
210
|
+
callbackResult = yield this.callback.connectOrCreate(model, item, context);
|
|
211
|
+
}
|
|
212
|
+
if (callbackResult !== false) {
|
|
213
|
+
const subPayload = typeof callbackResult === "object" ? callbackResult : item.create;
|
|
214
|
+
yield this.visitSubPayload(model, action, subPayload, context.nestingPath);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
break;
|
|
218
|
+
case "connect":
|
|
219
|
+
if (this.callback.connect) {
|
|
220
|
+
for (const item of enumerate(data)) {
|
|
221
|
+
const newContext = __spreadProps(__spreadValues({}, context), {
|
|
222
|
+
nestingPath: [...context.nestingPath, { field, model, where: item, unique: true }]
|
|
223
|
+
});
|
|
224
|
+
yield this.callback.connect(model, item, newContext);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
break;
|
|
228
|
+
case "disconnect":
|
|
229
|
+
if (this.callback.disconnect) {
|
|
230
|
+
for (const item of enumerate(data)) {
|
|
231
|
+
const newContext = __spreadProps(__spreadValues({}, context), {
|
|
232
|
+
nestingPath: [
|
|
233
|
+
...context.nestingPath,
|
|
234
|
+
{ field, model, where: item, unique: typeof item === "object" }
|
|
235
|
+
]
|
|
236
|
+
});
|
|
237
|
+
yield this.callback.disconnect(model, item, newContext);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
break;
|
|
241
|
+
case "set":
|
|
242
|
+
if (this.callback.set) {
|
|
243
|
+
context.nestingPath.push({ field, model, where: {}, unique: false });
|
|
244
|
+
yield this.callback.set(model, data, context);
|
|
245
|
+
}
|
|
246
|
+
break;
|
|
247
|
+
case "update":
|
|
248
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
249
|
+
for (const item of enumerate(data)) {
|
|
250
|
+
let callbackResult;
|
|
251
|
+
if (this.callback.update) {
|
|
252
|
+
callbackResult = yield this.callback.update(model, item, context);
|
|
253
|
+
}
|
|
254
|
+
if (callbackResult !== false) {
|
|
255
|
+
const subPayload = typeof callbackResult === "object" ? callbackResult : typeof item.data === "object" ? item.data : item;
|
|
256
|
+
yield this.visitSubPayload(model, action, subPayload, context.nestingPath);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
break;
|
|
260
|
+
case "updateMany":
|
|
261
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
262
|
+
for (const item of enumerate(data)) {
|
|
263
|
+
let callbackResult;
|
|
264
|
+
if (this.callback.updateMany) {
|
|
265
|
+
callbackResult = yield this.callback.updateMany(model, item, context);
|
|
266
|
+
}
|
|
267
|
+
if (callbackResult !== false) {
|
|
268
|
+
const subPayload = typeof callbackResult === "object" ? callbackResult : item;
|
|
269
|
+
yield this.visitSubPayload(model, action, subPayload, context.nestingPath);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
break;
|
|
273
|
+
case "upsert": {
|
|
274
|
+
context.nestingPath.push({ field, model, where: data.where, unique: false });
|
|
275
|
+
for (const item of enumerate(data)) {
|
|
276
|
+
let callbackResult;
|
|
277
|
+
if (this.callback.upsert) {
|
|
278
|
+
callbackResult = yield this.callback.upsert(model, item, context);
|
|
279
|
+
}
|
|
280
|
+
if (callbackResult !== false) {
|
|
281
|
+
if (typeof callbackResult === "object") {
|
|
282
|
+
yield this.visitSubPayload(model, action, callbackResult, context.nestingPath);
|
|
283
|
+
} else {
|
|
284
|
+
yield this.visitSubPayload(model, action, item.create, context.nestingPath);
|
|
285
|
+
yield this.visitSubPayload(model, action, item.update, context.nestingPath);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
case "delete": {
|
|
292
|
+
if (this.callback.delete) {
|
|
293
|
+
for (const item of enumerate(data)) {
|
|
294
|
+
const newContext = __spreadProps(__spreadValues({}, context), {
|
|
295
|
+
nestingPath: [
|
|
296
|
+
...context.nestingPath,
|
|
297
|
+
{ field, model, where: toplevel ? item.where : item, unique: false }
|
|
298
|
+
]
|
|
299
|
+
});
|
|
300
|
+
yield this.callback.delete(model, item, newContext);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
case "deleteMany":
|
|
306
|
+
if (this.callback.deleteMany) {
|
|
307
|
+
for (const item of enumerate(data)) {
|
|
308
|
+
const newContext = __spreadProps(__spreadValues({}, context), {
|
|
309
|
+
nestingPath: [
|
|
310
|
+
...context.nestingPath,
|
|
311
|
+
{ field, model, where: toplevel ? item.where : item, unique: false }
|
|
312
|
+
]
|
|
313
|
+
});
|
|
314
|
+
yield this.callback.deleteMany(model, item, newContext);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
break;
|
|
318
|
+
default: {
|
|
319
|
+
throw new Error(`unhandled action type ${action}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
visitSubPayload(model, action, payload, nestingPath) {
|
|
325
|
+
return __async(this, null, function* () {
|
|
326
|
+
for (const field of getModelFields(payload)) {
|
|
327
|
+
const fieldInfo = resolveField(this.modelMeta, model, field);
|
|
328
|
+
if (!fieldInfo) {
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
if (fieldInfo.isDataModel) {
|
|
332
|
+
if (payload[field]) {
|
|
333
|
+
for (const [subAction, subData] of Object.entries(payload[field])) {
|
|
334
|
+
if (this.isPrismaWriteAction(subAction) && subData) {
|
|
335
|
+
yield this.doVisit(fieldInfo.type, subAction, subData, payload[field], fieldInfo, [
|
|
336
|
+
...nestingPath
|
|
337
|
+
]);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
} else {
|
|
342
|
+
if (this.callback.field) {
|
|
343
|
+
yield this.callback.field(fieldInfo, action, payload[field], {
|
|
344
|
+
parent: payload,
|
|
345
|
+
nestingPath,
|
|
346
|
+
field: fieldInfo
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
// src/cross/query-analyzer.ts
|
|
356
|
+
import { lowerCaseFirst as lowerCaseFirst2 } from "lower-case-first";
|
|
357
|
+
function getReadModels(model, modelMeta, args) {
|
|
358
|
+
const result = /* @__PURE__ */ new Set();
|
|
359
|
+
result.add(model);
|
|
360
|
+
const visitor = new NestedReadVisitor(modelMeta, {
|
|
361
|
+
field: (model2) => {
|
|
362
|
+
result.add(model2);
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
visitor.visit(model, args);
|
|
367
|
+
return [...result];
|
|
368
|
+
}
|
|
369
|
+
function getMutatedModels(model, operation, mutationArgs, modelMeta) {
|
|
370
|
+
return __async(this, null, function* () {
|
|
371
|
+
const result = /* @__PURE__ */ new Set();
|
|
372
|
+
result.add(model);
|
|
373
|
+
if (mutationArgs) {
|
|
374
|
+
const addModel = (model2) => void result.add(model2);
|
|
375
|
+
const addCascades = (model2) => {
|
|
376
|
+
const cascades = /* @__PURE__ */ new Set();
|
|
377
|
+
const visited = /* @__PURE__ */ new Set();
|
|
378
|
+
collectDeleteCascades(model2, modelMeta, cascades, visited);
|
|
379
|
+
cascades.forEach((m) => addModel(m));
|
|
380
|
+
};
|
|
381
|
+
const visitor = new NestedWriteVisitor(modelMeta, {
|
|
382
|
+
create: addModel,
|
|
383
|
+
createMany: addModel,
|
|
384
|
+
connectOrCreate: addModel,
|
|
385
|
+
connect: addModel,
|
|
386
|
+
disconnect: addModel,
|
|
387
|
+
set: addModel,
|
|
388
|
+
update: addModel,
|
|
389
|
+
updateMany: addModel,
|
|
390
|
+
upsert: addModel,
|
|
391
|
+
delete: (model2) => {
|
|
392
|
+
addModel(model2);
|
|
393
|
+
addCascades(model2);
|
|
394
|
+
},
|
|
395
|
+
deleteMany: (model2) => {
|
|
396
|
+
addModel(model2);
|
|
397
|
+
addCascades(model2);
|
|
398
|
+
}
|
|
399
|
+
});
|
|
400
|
+
yield visitor.visit(model, operation, mutationArgs);
|
|
401
|
+
}
|
|
402
|
+
return [...result];
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
function collectDeleteCascades(model, modelMeta, result, visited) {
|
|
406
|
+
if (visited.has(model)) {
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
visited.add(model);
|
|
410
|
+
const cascades = modelMeta.deleteCascade[lowerCaseFirst2(model)];
|
|
411
|
+
if (!cascades) {
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
cascades.forEach((m) => {
|
|
415
|
+
result.add(m);
|
|
416
|
+
collectDeleteCascades(m, modelMeta, result, visited);
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
export {
|
|
420
|
+
NestedReadVisitor,
|
|
421
|
+
NestedWriteVisitor,
|
|
422
|
+
PrismaWriteActions,
|
|
423
|
+
enumerate,
|
|
424
|
+
getFields,
|
|
425
|
+
getModelFields,
|
|
426
|
+
getMutatedModels,
|
|
427
|
+
getReadModels,
|
|
428
|
+
resolveField,
|
|
429
|
+
zip
|
|
430
|
+
};
|
|
431
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cross/model-meta.ts","../../src/cross/nested-read-visitor.ts","../../src/cross/types.ts","../../src/cross/utils.ts","../../src/cross/nested-write-visitor.ts","../../src/cross/query-analyzer.ts"],"sourcesContent":["import { lowerCaseFirst } from 'lower-case-first';\n\n/**\n * Runtime information of a data model or field attribute\n */\nexport type RuntimeAttribute = {\n name: string;\n args: Array<{ name?: string; value: unknown }>;\n};\n\n/**\n * Runtime information of a data model field\n */\nexport type FieldInfo = {\n /**\n * Field name\n */\n name: string;\n\n /**\n * Field type name\n */\n type: string;\n\n /**\n * If the field is an ID field or part of a multi-field ID\n */\n isId: boolean;\n\n /**\n * If the field type is a data model (or an optional/array of data model)\n */\n isDataModel: boolean;\n\n /**\n * If the field is an array\n */\n isArray: boolean;\n\n /**\n * If the field is optional\n */\n isOptional: boolean;\n\n /**\n * Attributes on the field\n */\n attributes: RuntimeAttribute[];\n\n /**\n * If the field is a relation field, the field name of the reverse side of the relation\n */\n backLink?: string;\n\n /**\n * If the field is the owner side of a relation\n */\n isRelationOwner: boolean;\n\n /**\n * If the field is a foreign key field\n */\n isForeignKey: boolean;\n\n /**\n * Mapping from foreign key field names to relation field names\n */\n foreignKeyMapping?: Record<string, string>;\n};\n\n/**\n * Metadata for a model-level unique constraint\n * e.g.: @@unique([a, b])\n */\nexport type UniqueConstraint = { name: string; fields: string[] };\n\n/**\n * ZModel data model metadata\n */\nexport type ModelMeta = {\n /**\n * Model fields\n */\n fields: Record<string, Record<string, FieldInfo>>;\n\n /**\n * Model unique constraints\n */\n uniqueConstraints: Record<string, Record<string, UniqueConstraint>>;\n\n /**\n * Information for cascading delete\n */\n deleteCascade: Record<string, string[]>;\n\n /**\n * Name of model that backs the `auth()` function\n */\n authModel?: string;\n};\n\n/**\n * Resolves a model field to its metadata. Returns undefined if not found.\n */\nexport function resolveField(modelMeta: ModelMeta, model: string, field: string): FieldInfo | undefined {\n return modelMeta.fields[lowerCaseFirst(model)]?.[field];\n}\n\n/**\n * Gets all fields of a model.\n */\nexport function getFields(modelMeta: ModelMeta, model: string) {\n return modelMeta.fields[lowerCaseFirst(model)];\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { resolveField, type FieldInfo, type ModelMeta } from './model-meta';\n\nexport type NestedReadVisitorCallback = {\n field?: (\n model: string,\n field: FieldInfo | undefined,\n kind: 'include' | 'select' | undefined,\n args: unknown\n ) => void | boolean;\n};\n\n/**\n * Visitor for nested read payload.\n */\nexport class NestedReadVisitor {\n constructor(private readonly modelMeta: ModelMeta, private readonly callback: NestedReadVisitorCallback) {}\n\n doVisit(model: string, field: FieldInfo | undefined, kind: 'include' | 'select' | undefined, args: unknown) {\n if (this.callback.field) {\n const r = this.callback.field(model, field, kind, args);\n if (r === false) {\n return;\n }\n }\n\n if (!args || typeof args !== 'object') {\n return;\n }\n\n let selectInclude: any;\n let nextKind: 'select' | 'include' | undefined;\n if ((args as any).select) {\n selectInclude = (args as any).select;\n nextKind = 'select';\n } else if ((args as any).include) {\n selectInclude = (args as any).include;\n nextKind = 'include';\n }\n\n if (selectInclude && typeof selectInclude === 'object') {\n for (const [k, v] of Object.entries(selectInclude)) {\n if (k === '_count' && typeof v === 'object' && v) {\n // recurse into { _count: { ... } }\n this.doVisit(model, field, kind, v);\n } else {\n const field = resolveField(this.modelMeta, model, k);\n if (field) {\n this.doVisit(field.type, field, nextKind, v);\n }\n }\n }\n }\n }\n\n visit(model: string, args: unknown) {\n this.doVisit(model, undefined, undefined, args);\n }\n}\n","/**\n * Prisma write operation kinds\n */\nexport const PrismaWriteActions = [\n 'create',\n 'createMany',\n 'connectOrCreate',\n 'update',\n 'updateMany',\n 'upsert',\n 'connect',\n 'disconnect',\n 'set',\n 'delete',\n 'deleteMany',\n] as const;\n\n/**\n * Prisma write operation kinds\n */\nexport type PrismaWriteActionType = (typeof PrismaWriteActions)[number];\n\n/**\n * Maybe promise\n */\nexport type MaybePromise<T> = T | Promise<T> | PromiseLike<T>;\n","/**\n * Gets field names in a data model entity, filtering out internal fields.\n */\nexport function getModelFields(data: object) {\n return data ? Object.keys(data) : [];\n}\n\n/**\n * Array or scalar\n */\nexport type Enumerable<T> = T | Array<T>;\n\n/**\n * Uniformly enumerates an array or scalar.\n */\nexport function enumerate<T>(x: Enumerable<T>) {\n if (x === null || x === undefined) {\n return [];\n } else if (Array.isArray(x)) {\n return x;\n } else {\n return [x];\n }\n}\n\n/**\n * Zip two arrays or scalars.\n */\nexport function zip<T1, T2>(x: Enumerable<T1>, y: Enumerable<T2>): Array<[T1, T2]> {\n if (Array.isArray(x)) {\n if (!Array.isArray(y)) {\n throw new Error('x and y should be both array or both scalar');\n }\n if (x.length !== y.length) {\n throw new Error('x and y should have the same length');\n }\n return x.map((_, i) => [x[i], y[i]] as [T1, T2]);\n } else {\n if (Array.isArray(y)) {\n throw new Error('x and y should be both array or both scalar');\n }\n return [[x, y]];\n }\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { FieldInfo, ModelMeta } from './model-meta';\nimport { resolveField } from './model-meta';\nimport { MaybePromise, PrismaWriteActionType, PrismaWriteActions } from './types';\nimport { enumerate, getModelFields } from './utils';\n\ntype NestingPathItem = { field?: FieldInfo; model: string; where: any; unique: boolean };\n\n/**\n * Context for visiting\n */\nexport type NestedWriteVisitorContext = {\n /**\n * Parent data, can be used to replace fields\n */\n parent: any;\n\n /**\n * Current field, undefined if toplevel\n */\n field?: FieldInfo;\n\n /**\n * A top-down path of all nested update conditions and corresponding field till now\n */\n nestingPath: NestingPathItem[];\n};\n\n/**\n * NestedWriteVisitor's callback actions. A call back function should return true or void to indicate\n * that the visitor should continue traversing its children, or false to stop. It can also return an object\n * to let the visitor traverse it instead of its original children.\n */\nexport type NestedWriterVisitorCallback = {\n create?: (model: string, args: any[], context: NestedWriteVisitorContext) => MaybePromise<boolean | object | void>;\n\n createMany?: (\n model: string,\n args: { data: any; skipDuplicates?: boolean },\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n connectOrCreate?: (\n model: string,\n args: { where: object; create: any },\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n connect?: (\n model: string,\n args: object,\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n disconnect?: (\n model: string,\n args: object,\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n set?: (model: string, args: object, context: NestedWriteVisitorContext) => MaybePromise<boolean | object | void>;\n\n update?: (model: string, args: object, context: NestedWriteVisitorContext) => MaybePromise<boolean | object | void>;\n\n updateMany?: (\n model: string,\n args: { where?: object; data: any },\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n upsert?: (\n model: string,\n args: { where: object; create: any; update: any },\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n delete?: (\n model: string,\n args: object | boolean,\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n deleteMany?: (\n model: string,\n args: any | object,\n context: NestedWriteVisitorContext\n ) => MaybePromise<boolean | object | void>;\n\n field?: (\n field: FieldInfo,\n action: PrismaWriteActionType,\n data: any,\n context: NestedWriteVisitorContext\n ) => MaybePromise<void>;\n};\n\n/**\n * Recursive visitor for nested write (create/update) payload.\n */\nexport class NestedWriteVisitor {\n constructor(private readonly modelMeta: ModelMeta, private readonly callback: NestedWriterVisitorCallback) {}\n\n private isPrismaWriteAction(value: string): value is PrismaWriteActionType {\n return PrismaWriteActions.includes(value as PrismaWriteActionType);\n }\n\n /**\n * Start visiting\n *\n * @see NestedWriterVisitorCallback\n */\n async visit(model: string, action: PrismaWriteActionType, args: any): Promise<void> {\n if (!args) {\n return;\n }\n\n let topData = args;\n\n switch (action) {\n // create has its data wrapped in 'data' field\n case 'create':\n topData = topData.data;\n break;\n\n case 'delete':\n case 'deleteMany':\n topData = topData.where;\n break;\n }\n\n await this.doVisit(model, action, topData, undefined, undefined, []);\n }\n\n private async doVisit(\n model: string,\n action: PrismaWriteActionType,\n data: any,\n parent: any,\n field: FieldInfo | undefined,\n nestingPath: NestingPathItem[]\n ): Promise<void> {\n if (!data) {\n return;\n }\n\n const context = { parent, field, nestingPath: [...nestingPath] };\n const toplevel = field == undefined;\n\n // visit payload\n switch (action) {\n case 'create':\n context.nestingPath.push({ field, model, where: {}, unique: false });\n for (const item of enumerate(data)) {\n let callbackResult: any;\n if (this.callback.create) {\n callbackResult = await this.callback.create(model, item, context);\n }\n if (callbackResult !== false) {\n const subPayload = typeof callbackResult === 'object' ? callbackResult : item;\n await this.visitSubPayload(model, action, subPayload, context.nestingPath);\n }\n }\n break;\n\n case 'createMany':\n if (data) {\n context.nestingPath.push({ field, model, where: {}, unique: false });\n let callbackResult: any;\n if (this.callback.createMany) {\n callbackResult = await this.callback.createMany(model, data, context);\n }\n if (callbackResult !== false) {\n const subPayload = typeof callbackResult === 'object' ? callbackResult : data.data;\n await this.visitSubPayload(model, action, subPayload, context.nestingPath);\n }\n }\n break;\n\n case 'connectOrCreate':\n context.nestingPath.push({ field, model, where: data.where, unique: false });\n for (const item of enumerate(data)) {\n let callbackResult: any;\n if (this.callback.connectOrCreate) {\n callbackResult = await this.callback.connectOrCreate(model, item, context);\n }\n if (callbackResult !== false) {\n const subPayload = typeof callbackResult === 'object' ? callbackResult : item.create;\n await this.visitSubPayload(model, action, subPayload, context.nestingPath);\n }\n }\n break;\n\n case 'connect':\n if (this.callback.connect) {\n for (const item of enumerate(data)) {\n const newContext = {\n ...context,\n nestingPath: [...context.nestingPath, { field, model, where: item, unique: true }],\n };\n await this.callback.connect(model, item, newContext);\n }\n }\n break;\n\n case 'disconnect':\n // disconnect has two forms:\n // if relation is to-many, the payload is a unique filter object\n // if relation is to-one, the payload can only be boolean `true`\n if (this.callback.disconnect) {\n for (const item of enumerate(data)) {\n const newContext = {\n ...context,\n nestingPath: [\n ...context.nestingPath,\n { field, model, where: item, unique: typeof item === 'object' },\n ],\n };\n await this.callback.disconnect(model, item, newContext);\n }\n }\n break;\n\n case 'set':\n if (this.callback.set) {\n context.nestingPath.push({ field, model, where: {}, unique: false });\n await this.callback.set(model, data, context);\n }\n break;\n\n case 'update':\n context.nestingPath.push({ field, model, where: data.where, unique: false });\n for (const item of enumerate(data)) {\n let callbackResult: any;\n if (this.callback.update) {\n callbackResult = await this.callback.update(model, item, context);\n }\n if (callbackResult !== false) {\n const subPayload =\n typeof callbackResult === 'object'\n ? callbackResult\n : typeof item.data === 'object'\n ? item.data\n : item;\n await this.visitSubPayload(model, action, subPayload, context.nestingPath);\n }\n }\n break;\n\n case 'updateMany':\n context.nestingPath.push({ field, model, where: data.where, unique: false });\n for (const item of enumerate(data)) {\n let callbackResult: any;\n if (this.callback.updateMany) {\n callbackResult = await this.callback.updateMany(model, item, context);\n }\n if (callbackResult !== false) {\n const subPayload = typeof callbackResult === 'object' ? callbackResult : item;\n await this.visitSubPayload(model, action, subPayload, context.nestingPath);\n }\n }\n break;\n\n case 'upsert': {\n context.nestingPath.push({ field, model, where: data.where, unique: false });\n for (const item of enumerate(data)) {\n let callbackResult: any;\n if (this.callback.upsert) {\n callbackResult = await this.callback.upsert(model, item, context);\n }\n if (callbackResult !== false) {\n if (typeof callbackResult === 'object') {\n await this.visitSubPayload(model, action, callbackResult, context.nestingPath);\n } else {\n await this.visitSubPayload(model, action, item.create, context.nestingPath);\n await this.visitSubPayload(model, action, item.update, context.nestingPath);\n }\n }\n }\n break;\n }\n\n case 'delete': {\n if (this.callback.delete) {\n for (const item of enumerate(data)) {\n const newContext = {\n ...context,\n nestingPath: [\n ...context.nestingPath,\n { field, model, where: toplevel ? item.where : item, unique: false },\n ],\n };\n await this.callback.delete(model, item, newContext);\n }\n }\n break;\n }\n\n case 'deleteMany':\n if (this.callback.deleteMany) {\n for (const item of enumerate(data)) {\n const newContext = {\n ...context,\n nestingPath: [\n ...context.nestingPath,\n { field, model, where: toplevel ? item.where : item, unique: false },\n ],\n };\n await this.callback.deleteMany(model, item, newContext);\n }\n }\n break;\n\n default: {\n throw new Error(`unhandled action type ${action}`);\n }\n }\n }\n\n private async visitSubPayload(\n model: string,\n action: PrismaWriteActionType,\n payload: any,\n nestingPath: NestingPathItem[]\n ) {\n for (const field of getModelFields(payload)) {\n const fieldInfo = resolveField(this.modelMeta, model, field);\n if (!fieldInfo) {\n continue;\n }\n\n if (fieldInfo.isDataModel) {\n if (payload[field]) {\n // recurse into nested payloads\n for (const [subAction, subData] of Object.entries<any>(payload[field])) {\n if (this.isPrismaWriteAction(subAction) && subData) {\n await this.doVisit(fieldInfo.type, subAction, subData, payload[field], fieldInfo, [\n ...nestingPath,\n ]);\n }\n }\n }\n } else {\n // visit plain field\n if (this.callback.field) {\n await this.callback.field(fieldInfo, action, payload[field], {\n parent: payload,\n nestingPath,\n field: fieldInfo,\n });\n }\n }\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { lowerCaseFirst } from 'lower-case-first';\nimport type { ModelMeta } from './model-meta';\nimport { NestedReadVisitor } from './nested-read-visitor';\nimport { NestedWriteVisitor } from './nested-write-visitor';\nimport type { PrismaWriteActionType } from './types';\n\n/**\n * Gets models read (including nested ones) given a query args.\n * @param model\n * @param targetModels\n * @param modelMeta\n * @param args\n * @returns\n */\nexport function getReadModels(model: string, modelMeta: ModelMeta, args: any) {\n const result = new Set<string>();\n result.add(model);\n const visitor = new NestedReadVisitor(modelMeta, {\n field: (model) => {\n result.add(model);\n return true;\n },\n });\n visitor.visit(model, args);\n return [...result];\n}\n\n/**\n * Gets mutated models (including nested ones) given a mutation args.\n */\nexport async function getMutatedModels(\n model: string,\n operation: PrismaWriteActionType,\n mutationArgs: any,\n modelMeta: ModelMeta\n) {\n const result = new Set<string>();\n result.add(model);\n\n if (mutationArgs) {\n const addModel = (model: string) => void result.add(model);\n\n // add models that are cascaded deleted recursively\n const addCascades = (model: string) => {\n const cascades = new Set<string>();\n const visited = new Set<string>();\n collectDeleteCascades(model, modelMeta, cascades, visited);\n cascades.forEach((m) => addModel(m));\n };\n\n const visitor = new NestedWriteVisitor(modelMeta, {\n create: addModel,\n createMany: addModel,\n connectOrCreate: addModel,\n connect: addModel,\n disconnect: addModel,\n set: addModel,\n update: addModel,\n updateMany: addModel,\n upsert: addModel,\n delete: (model) => {\n addModel(model);\n addCascades(model);\n },\n deleteMany: (model) => {\n addModel(model);\n addCascades(model);\n },\n });\n await visitor.visit(model, operation, mutationArgs);\n }\n\n return [...result];\n}\n\nfunction collectDeleteCascades(model: string, modelMeta: ModelMeta, result: Set<string>, visited: Set<string>) {\n if (visited.has(model)) {\n // break circle\n return;\n }\n visited.add(model);\n\n const cascades = modelMeta.deleteCascade[lowerCaseFirst(model)];\n\n if (!cascades) {\n return;\n }\n\n cascades.forEach((m) => {\n result.add(m);\n collectDeleteCascades(m, modelMeta, result, visited);\n });\n}\n"],"mappings":"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","names":["field","lowerCaseFirst","model","lowerCaseFirst"]}
|
package/enhancements/index.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
export * from '
|
|
2
|
-
export * from './
|
|
1
|
+
export * from '../cross';
|
|
2
|
+
export * from './enhance';
|
|
3
3
|
export * from './omit';
|
|
4
4
|
export * from './password';
|
|
5
5
|
export * from './policy';
|
|
6
6
|
export * from './preset';
|
|
7
|
-
export * from './enhance';
|
|
8
7
|
export * from './types';
|
|
9
8
|
export * from './utils';
|
|
10
9
|
export * from './where-visitor';
|
package/enhancements/index.js
CHANGED
|
@@ -14,13 +14,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("
|
|
18
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("../cross"), exports);
|
|
18
|
+
__exportStar(require("./enhance"), exports);
|
|
19
19
|
__exportStar(require("./omit"), exports);
|
|
20
20
|
__exportStar(require("./password"), exports);
|
|
21
21
|
__exportStar(require("./policy"), exports);
|
|
22
22
|
__exportStar(require("./preset"), exports);
|
|
23
|
-
__exportStar(require("./enhance"), exports);
|
|
24
23
|
__exportStar(require("./types"), exports);
|
|
25
24
|
__exportStar(require("./utils"), exports);
|
|
26
25
|
__exportStar(require("./where-visitor"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enhancements/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enhancements/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,yCAAuB;AACvB,6CAA2B;AAC3B,2CAAyB;AACzB,2CAAyB;AACzB,0CAAwB;AACxB,0CAAwB;AACxB,kDAAgC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ModelDataVisitor = void 0;
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
-
const
|
|
5
|
+
const cross_1 = require("../cross");
|
|
6
6
|
/**
|
|
7
7
|
* Visitor that traverses data returned by a Prisma query.
|
|
8
8
|
*/
|
|
@@ -20,7 +20,7 @@ class ModelDataVisitor {
|
|
|
20
20
|
const scalarData = {};
|
|
21
21
|
const subTasks = [];
|
|
22
22
|
for (const [k, v] of Object.entries(data)) {
|
|
23
|
-
const field = (0,
|
|
23
|
+
const field = (0, cross_1.resolveField)(this.modelMeta, model, k);
|
|
24
24
|
if (field && field.isDataModel) {
|
|
25
25
|
if (field.isArray && Array.isArray(v)) {
|
|
26
26
|
subTasks.push(...v.map((item) => ({ model: field.type, data: item })));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-data-visitor.js","sourceRoot":"","sources":["../../src/enhancements/model-data-visitor.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,
|
|
1
|
+
{"version":3,"file":"model-data-visitor.js","sourceRoot":"","sources":["../../src/enhancements/model-data-visitor.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,oCAAwD;AAOxD;;GAEG;AACH,MAAa,gBAAgB;IACzB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C;;OAEG;IACH,KAAK,CAAC,KAAa,EAAE,IAAS,EAAE,QAAkC;QAC9D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YACnC,OAAO;SACV;QAED,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAwC,EAAE,CAAC;QAEzD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvC,MAAM,KAAK,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACrD,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE;gBAC5B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACnC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;iBAC1E;qBAAM;oBACH,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;iBACjD;aACJ;iBAAM;gBACH,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACrB;SACJ;QAED,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;CACJ;AA9BD,4CA8BC"}
|
package/enhancements/omit.d.ts
CHANGED
package/enhancements/omit.js
CHANGED
|
@@ -12,10 +12,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.withOmit = void 0;
|
|
15
|
+
const cross_1 = require("../cross");
|
|
15
16
|
const loader_1 = require("../loader");
|
|
16
|
-
const model_meta_1 = require("./model-meta");
|
|
17
17
|
const proxy_1 = require("./proxy");
|
|
18
|
-
const utils_1 = require("./utils");
|
|
19
18
|
/**
|
|
20
19
|
* Gets an enhanced Prisma client that supports @omit attribute.
|
|
21
20
|
*/
|
|
@@ -34,7 +33,7 @@ class OmitHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
34
33
|
processResultEntity(data) {
|
|
35
34
|
return __awaiter(this, void 0, void 0, function* () {
|
|
36
35
|
if (data) {
|
|
37
|
-
for (const value of (0,
|
|
36
|
+
for (const value of (0, cross_1.enumerate)(data)) {
|
|
38
37
|
yield this.doPostProcess(value, this.model);
|
|
39
38
|
}
|
|
40
39
|
}
|
|
@@ -43,8 +42,8 @@ class OmitHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
43
42
|
}
|
|
44
43
|
doPostProcess(entityData, model) {
|
|
45
44
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
for (const field of (0,
|
|
47
|
-
const fieldInfo = yield (0,
|
|
45
|
+
for (const field of (0, cross_1.getModelFields)(entityData)) {
|
|
46
|
+
const fieldInfo = yield (0, cross_1.resolveField)(this.modelMeta, model, field);
|
|
48
47
|
if (!fieldInfo) {
|
|
49
48
|
continue;
|
|
50
49
|
}
|
package/enhancements/omit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omit.js","sourceRoot":"","sources":["../../src/enhancements/omit.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,uDAAuD;;;;;;;;;;;;AAEvD,sCAAgD;AAEhD,
|
|
1
|
+
{"version":3,"file":"omit.js","sourceRoot":"","sources":["../../src/enhancements/omit.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,uDAAuD;;;;;;;;;;;;AAEvD,oCAAmF;AACnF,sCAAgD;AAEhD,mCAA+D;AAa/D;;GAEG;AACH,SAAgB,QAAQ,CAA0B,MAAgB,EAAE,OAAyB;;IACzF,MAAM,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,IAAA,4BAAmB,EAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,CAAC;IAChF,OAAO,IAAA,iBAAS,EACZ,MAAM,EACN,UAAU,EACV,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,OAA2B,EAAE,KAAK,EAAE,UAAU,CAAC,EACnF,MAAM,CACT,CAAC;AACN,CAAC;AARD,4BAQC;AAED,MAAM,WAAY,SAAQ,iCAAyB;IAC/C,YAAY,MAAwB,EAAE,KAAa,EAAmB,SAAoB;QACtF,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAD6C,cAAS,GAAT,SAAS,CAAW;IAE1F,CAAC;IAED,gBAAgB;IACA,mBAAmB,CAAI,IAAO;;YAC1C,IAAI,IAAI,EAAE;gBACN,KAAK,MAAM,KAAK,IAAI,IAAA,iBAAS,EAAC,IAAI,CAAC,EAAE;oBACjC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC/C;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;KAAA;IAEa,aAAa,CAAC,UAAe,EAAE,KAAa;;YACtD,KAAK,MAAM,KAAK,IAAI,IAAA,sBAAc,EAAC,UAAU,CAAC,EAAE;gBAC5C,MAAM,SAAS,GAAG,MAAM,IAAA,oBAAY,EAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACnE,IAAI,CAAC,SAAS,EAAE;oBACZ,SAAS;iBACZ;gBAED,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE;oBAC5D,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;iBAC5B;qBAAM,IAAI,SAAS,CAAC,WAAW,EAAE;oBAC9B,UAAU;oBACV,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC/D;aACJ;QACL,CAAC;KAAA;CACJ"}
|
package/enhancements/password.js
CHANGED
|
@@ -14,8 +14,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.withPassword = void 0;
|
|
15
15
|
const bcryptjs_1 = require("bcryptjs");
|
|
16
16
|
const constants_1 = require("../constants");
|
|
17
|
+
const cross_1 = require("../cross");
|
|
17
18
|
const loader_1 = require("../loader");
|
|
18
|
-
const nested_write_visitor_1 = require("./nested-write-visitor");
|
|
19
19
|
const proxy_1 = require("./proxy");
|
|
20
20
|
/**
|
|
21
21
|
* Gets an enhanced Prisma client that supports @password attribute.
|
|
@@ -43,7 +43,7 @@ class PasswordHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
43
43
|
}
|
|
44
44
|
preprocessWritePayload(model, action, args) {
|
|
45
45
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
const visitor = new
|
|
46
|
+
const visitor = new cross_1.NestedWriteVisitor(this.modelMeta, {
|
|
47
47
|
field: (field, _action, data, context) => __awaiter(this, void 0, void 0, function* () {
|
|
48
48
|
var _a, _b, _c;
|
|
49
49
|
const pwdAttr = (_a = field.attributes) === null || _a === void 0 ? void 0 : _a.find((attr) => attr.name === '@password');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/enhancements/password.ts"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,sDAAsD;;;;;;;;;;;;AAEtD,uCAAgC;AAChC,4CAA4D;AAC5D,sCAAgD;AAEhD,
|
|
1
|
+
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/enhancements/password.ts"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,sDAAsD;;;;;;;;;;;;AAEtD,uCAAgC;AAChC,4CAA4D;AAC5D,oCAA0F;AAC1F,sCAAgD;AAEhD,mCAAmF;AAanF;;GAEG;AACH,SAAgB,YAAY,CAAgC,MAAgB,EAAE,OAA6B;;IACvG,MAAM,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,IAAA,4BAAmB,EAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,CAAC;IAChF,OAAO,IAAA,iBAAS,EACZ,MAAM,EACN,UAAU,EACV,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,OAA2B,EAAE,KAAK,EAAE,UAAU,CAAC,EACvF,UAAU,CACb,CAAC;AACN,CAAC;AARD,oCAQC;AAED,MAAM,eAAgB,SAAQ,iCAAyB;IACnD,YAAY,MAAwB,EAAE,KAAa,EAAW,SAAoB;QAC9E,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QADqC,cAAS,GAAT,SAAS,CAAW;IAElF,CAAC;IAED,gBAAgB;IACA,cAAc,CAAC,MAA0B,EAAE,IAAS;;YAChE,MAAM,iBAAiB,GAAyB,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC3G,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACzD,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,MAA+B,EAAE,IAAI,CAAC,CAAC;aACxF;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;KAAA;IAEa,sBAAsB,CAAC,KAAa,EAAE,MAA6B,EAAE,IAAS;;YACxF,MAAM,OAAO,GAAG,IAAI,0BAAkB,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnD,KAAK,EAAE,CAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;;oBAC3C,MAAM,OAAO,GAAG,MAAA,KAAK,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;oBAC5E,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;wBACpC,sBAAsB;wBACtB,IAAI,IAAI,GAAgC,MAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,0CACjF,KAAe,CAAC;wBACtB,IAAI,CAAC,IAAI,EAAE;4BACP,IAAI,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,0CAAE,KAAe,CAAC;yBACjF;wBACD,IAAI,CAAC,IAAI,EAAE;4BACP,IAAI,GAAG,wCAA4B,CAAC;yBACvC;wBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACvD;gBACL,CAAC,CAAA;aACJ,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;KAAA;CACJ"}
|