@zenstackhq/runtime 2.5.1 → 2.6.1
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 +1 -1
- package/cross/index.d.ts +1 -1
- package/cross/index.js +2 -0
- package/cross/index.js.map +1 -1
- package/cross/index.mjs +2 -0
- package/cross/index.mjs.map +1 -1
- package/enhancements/edge/create-enhancement.d.ts +6 -1
- package/enhancements/edge/create-enhancement.js +7 -1
- package/enhancements/edge/create-enhancement.js.map +1 -1
- package/enhancements/edge/default-auth.js +8 -1
- package/enhancements/edge/default-auth.js.map +1 -1
- package/enhancements/edge/delegate.d.ts +7 -3
- package/enhancements/edge/delegate.js +158 -90
- package/enhancements/edge/delegate.js.map +1 -1
- package/enhancements/edge/omit.js +4 -1
- package/enhancements/edge/omit.js.map +1 -1
- package/enhancements/edge/policy/handler.d.ts +6 -0
- package/enhancements/edge/policy/handler.js +45 -14
- package/enhancements/edge/policy/handler.js.map +1 -1
- package/enhancements/edge/policy/index.d.ts +7 -1
- package/enhancements/edge/policy/index.js +23 -0
- package/enhancements/edge/policy/index.js.map +1 -1
- package/enhancements/edge/policy/policy-utils.js +15 -7
- package/enhancements/edge/policy/policy-utils.js.map +1 -1
- package/enhancements/edge/proxy.d.ts +2 -2
- package/enhancements/edge/proxy.js.map +1 -1
- package/enhancements/edge/query-utils.d.ts +1 -0
- package/enhancements/edge/query-utils.js +15 -0
- package/enhancements/edge/query-utils.js.map +1 -1
- package/enhancements/node/create-enhancement.d.ts +6 -1
- package/enhancements/node/create-enhancement.js +7 -1
- package/enhancements/node/create-enhancement.js.map +1 -1
- package/enhancements/node/default-auth.js +8 -1
- package/enhancements/node/default-auth.js.map +1 -1
- package/enhancements/node/delegate.d.ts +7 -3
- package/enhancements/node/delegate.js +158 -90
- package/enhancements/node/delegate.js.map +1 -1
- package/enhancements/node/omit.js +4 -1
- package/enhancements/node/omit.js.map +1 -1
- package/enhancements/node/policy/handler.d.ts +6 -0
- package/enhancements/node/policy/handler.js +45 -14
- package/enhancements/node/policy/handler.js.map +1 -1
- package/enhancements/node/policy/index.d.ts +7 -1
- package/enhancements/node/policy/index.js +23 -0
- package/enhancements/node/policy/index.js.map +1 -1
- package/enhancements/node/policy/policy-utils.js +15 -7
- package/enhancements/node/policy/policy-utils.js.map +1 -1
- package/enhancements/node/proxy.d.ts +2 -2
- package/enhancements/node/proxy.js.map +1 -1
- package/enhancements/node/query-utils.d.ts +1 -0
- package/enhancements/node/query-utils.js +15 -0
- package/enhancements/node/query-utils.js.map +1 -1
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-enhancement.js","sourceRoot":"","sources":["../../../src/enhancements/edge/create-enhancement.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"create-enhancement.js","sourceRoot":"","sources":["../../../src/enhancements/edge/create-enhancement.ts"],"names":[],"mappings":";;;;;AAyEA,8CAwEC;AAjJD,oDAA4B;AAC5B,+CAAyD;AACzD,uCAA8D;AAQ9D,iDAAiD;AACjD,yCAA0C;AAC1C,qCAAkC;AAClC,iCAAkC;AAClC,yCAA0C;AAC1C,qCAA2E;AAG3E;;GAEG;AACH,MAAM,gBAAgB,GAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AA0CrG;;;;;;;;;GASG;AACH,SAAgB,iBAAiB,CAC7B,MAAgB,EAChB,OAAmC,EACnC,OAA4B;;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,8DAA8D;IAC9D,MAAM,SAAS,GAAI,MAAc,CAAC,cAAc,CAAC;IACjD,IAAI,SAAS,IAAI,gBAAM,CAAC,EAAE,CAAC,SAAS,EAAE,kCAAsB,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,IAAI,CACR,qCAAqC,kCAAsB,qCAAqC,SAAS,IAAI,CAChH,CAAC;IACN,CAAC;IAED,uDAAuD;IACvD,oDAAoD;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAClH,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA,EAAA,CAAC,CAAC;IAC3G,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,UAAU,0CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA,EAAA,CAAC,CAAC;IACnG,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG,MAAA,OAAO,CAAC,KAAK,mCAAI,gBAAgB,CAAC;IAChD,IAAI,MAAM,GAAG,MAAM,CAAC;IAEpB,8FAA8F;IAC9F,kDAAkD;IAClD,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,uBAAe,EAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC1G,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CACP,8HAA8H,CACjI,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,IAAA,uBAAY,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;IAED,mGAAmG;IACnG,gDAAgD;IAChD,IAAI,WAAW,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5C,kBAAkB;QAClB,MAAM,GAAG,IAAA,uBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,0EAA0E;IAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,MAAM,GAAG,IAAA,mBAAU,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE9C,2EAA2E;QAC3E,8EAA8E;QAC9E,uBAAuB;QAEvB,iFAAiF;QACjF,oBAAoB;QAEpB,OAAO,CAAC,6BAA6B,GAAG,4CAAmC,CAAC;QAE5E,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC;YAC7C,yBAAyB;YACzB,MAAM,GAAG,IAAA,8BAAe,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,cAAc;QACd,MAAM,GAAG,IAAA,eAAQ,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -32,7 +32,14 @@ class DefaultAuthHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
32
32
|
// base override
|
|
33
33
|
preprocessArgs(action, args) {
|
|
34
34
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
const actionsOfInterest = [
|
|
35
|
+
const actionsOfInterest = [
|
|
36
|
+
'create',
|
|
37
|
+
'createMany',
|
|
38
|
+
'createManyAndReturn',
|
|
39
|
+
'update',
|
|
40
|
+
'updateMany',
|
|
41
|
+
'upsert',
|
|
42
|
+
];
|
|
36
43
|
if (actionsOfInterest.includes(action)) {
|
|
37
44
|
const newArgs = yield this.preprocessWritePayload(this.model, action, args);
|
|
38
45
|
return newArgs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-auth.js","sourceRoot":"","sources":["../../../src/enhancements/edge/default-auth.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,uDAAuD;;;;;;;;;;;AAqBvD,0CAWC;AA9BD,uCAQqB;AAGrB,mCAAmF;AACnF,mCAAsE;AAEtE;;;;GAIG;AACH,SAAgB,eAAe,CAC3B,MAAgB,EAChB,OAAmC,EACnC,UAA8B,EAAE;IAEhC,OAAO,IAAA,iBAAS,EACZ,MAAM,EACN,OAAO,CAAC,SAAS,EACjB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,kBAAkB,CAAC,OAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAChG,aAAa,CAChB,CAAC;AACN,CAAC;AAED,MAAM,kBAAmB,SAAQ,iCAAyB;IAGtD,YACI,MAAwB,EACxB,KAAa,EACb,OAAmC,EAClB,OAA2B;QAE5C,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAFb,YAAO,GAAP,OAAO,CAAoB;QAI5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,gBAAgB;IACA,cAAc,CAAC,MAA0B,EAAE,IAAS;;YAChE,MAAM,iBAAiB,GAAyB,
|
|
1
|
+
{"version":3,"file":"default-auth.js","sourceRoot":"","sources":["../../../src/enhancements/edge/default-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,28 @@
|
|
|
1
|
-
import type { DbClientContract } from '../../types';
|
|
1
|
+
import type { DbClientContract, EnhancementContext } from '../../types';
|
|
2
2
|
import type { InternalEnhancementOptions } from './create-enhancement';
|
|
3
3
|
import { DefaultPrismaProxyHandler } from './proxy';
|
|
4
|
-
export declare function withDelegate<DbClient extends object>(prisma: DbClient, options: InternalEnhancementOptions): DbClient;
|
|
4
|
+
export declare function withDelegate<DbClient extends object>(prisma: DbClient, options: InternalEnhancementOptions, context: EnhancementContext | undefined): DbClient;
|
|
5
5
|
export declare class DelegateProxyHandler extends DefaultPrismaProxyHandler {
|
|
6
|
+
private readonly context;
|
|
6
7
|
private readonly logger;
|
|
7
8
|
private readonly queryUtils;
|
|
8
|
-
constructor(prisma: DbClientContract, model: string, options: InternalEnhancementOptions);
|
|
9
|
+
constructor(prisma: DbClientContract, model: string, options: InternalEnhancementOptions, context: EnhancementContext | undefined);
|
|
9
10
|
findFirst(args: any): Promise<unknown>;
|
|
10
11
|
findFirstOrThrow(args: any): Promise<unknown>;
|
|
11
12
|
findUnique(args: any): Promise<unknown>;
|
|
12
13
|
findUniqueOrThrow(args: any): Promise<unknown>;
|
|
13
14
|
findMany(args: any): Promise<unknown[]>;
|
|
14
15
|
private doFind;
|
|
16
|
+
private ensureDiscriminatorSelection;
|
|
15
17
|
private injectWhereHierarchy;
|
|
16
18
|
private injectSelectIncludeHierarchy;
|
|
17
19
|
private buildSelectIncludeHierarchy;
|
|
18
20
|
private injectBaseFieldSelect;
|
|
19
21
|
private injectBaseIncludeRecursively;
|
|
20
22
|
private injectConcreteIncludeRecursively;
|
|
23
|
+
private createConcreteRelationIncludePayload;
|
|
21
24
|
create(args: any): Promise<any>;
|
|
25
|
+
private sanitizeMutationPayload;
|
|
22
26
|
createMany(args: {
|
|
23
27
|
data: any;
|
|
24
28
|
skipDuplicates?: boolean;
|
|
@@ -18,18 +18,20 @@ exports.withDelegate = withDelegate;
|
|
|
18
18
|
const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
19
19
|
const is_plain_object_1 = require("is-plain-object");
|
|
20
20
|
const lower_case_first_1 = require("lower-case-first");
|
|
21
|
+
const traverse_1 = __importDefault(require("traverse"));
|
|
21
22
|
const constants_1 = require("../../constants");
|
|
22
23
|
const cross_1 = require("../../cross");
|
|
23
24
|
const logger_1 = require("./logger");
|
|
24
25
|
const proxy_1 = require("./proxy");
|
|
25
26
|
const query_utils_1 = require("./query-utils");
|
|
26
27
|
const utils_1 = require("./utils");
|
|
27
|
-
function withDelegate(prisma, options) {
|
|
28
|
-
return (0, proxy_1.makeProxy)(prisma, options.modelMeta, (_prisma, model) => new DelegateProxyHandler(_prisma, model, options), 'delegate');
|
|
28
|
+
function withDelegate(prisma, options, context) {
|
|
29
|
+
return (0, proxy_1.makeProxy)(prisma, options.modelMeta, (_prisma, model) => new DelegateProxyHandler(_prisma, model, options, context), 'delegate');
|
|
29
30
|
}
|
|
30
31
|
class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
31
|
-
constructor(prisma, model, options) {
|
|
32
|
+
constructor(prisma, model, options, context) {
|
|
32
33
|
super(prisma, model, options);
|
|
34
|
+
this.context = context;
|
|
33
35
|
this.logger = new logger_1.Logger(prisma);
|
|
34
36
|
this.queryUtils = new query_utils_1.QueryUtils(prisma, this.options);
|
|
35
37
|
}
|
|
@@ -59,7 +61,10 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
59
61
|
}
|
|
60
62
|
args = args ? (0, cross_1.clone)(args) : {};
|
|
61
63
|
this.injectWhereHierarchy(model, args === null || args === void 0 ? void 0 : args.where);
|
|
62
|
-
this.injectSelectIncludeHierarchy(model, args);
|
|
64
|
+
yield this.injectSelectIncludeHierarchy(model, args);
|
|
65
|
+
// discriminator field is needed during post process to determine the
|
|
66
|
+
// actual concrete model type
|
|
67
|
+
this.ensureDiscriminatorSelection(model, args);
|
|
63
68
|
if (args.orderBy) {
|
|
64
69
|
// `orderBy` may contain fields from base types
|
|
65
70
|
this.injectWhereHierarchy(this.model, args.orderBy);
|
|
@@ -76,6 +81,20 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
76
81
|
}
|
|
77
82
|
});
|
|
78
83
|
}
|
|
84
|
+
ensureDiscriminatorSelection(model, args) {
|
|
85
|
+
const modelInfo = (0, cross_1.getModelInfo)(this.options.modelMeta, model);
|
|
86
|
+
if (!(modelInfo === null || modelInfo === void 0 ? void 0 : modelInfo.discriminator)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (args.select && typeof args.select === 'object') {
|
|
90
|
+
args.select[modelInfo.discriminator] = true;
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (args.omit && typeof args.omit === 'object') {
|
|
94
|
+
args.omit[modelInfo.discriminator] = false;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
79
98
|
injectWhereHierarchy(model, where) {
|
|
80
99
|
if (!where || !(0, is_plain_object_1.isPlainObject)(where)) {
|
|
81
100
|
return;
|
|
@@ -122,79 +141,88 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
122
141
|
});
|
|
123
142
|
}
|
|
124
143
|
injectSelectIncludeHierarchy(model, args) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (this.isDelegateOrDescendantOfDelegate(fieldInfo === null || fieldInfo === void 0 ? void 0 : fieldInfo.type) && value) {
|
|
136
|
-
// delegate model, recursively inject hierarchy
|
|
137
|
-
if (args[kind][field]) {
|
|
138
|
-
if (args[kind][field] === true) {
|
|
139
|
-
// make sure the payload is an object
|
|
140
|
-
args[kind][field] = {};
|
|
141
|
-
}
|
|
142
|
-
this.injectSelectIncludeHierarchy(fieldInfo.type, args[kind][field]);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
if (value !== undefined) {
|
|
146
|
-
if (value === null || value === void 0 ? void 0 : value.orderBy) {
|
|
147
|
-
// `orderBy` may contain fields from base types
|
|
148
|
-
this.injectWhereHierarchy(fieldInfo.type, value.orderBy);
|
|
144
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
145
|
+
if (!args || typeof args !== 'object') {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
for (const kind of ['select', 'include']) {
|
|
149
|
+
if (args[kind] && typeof args[kind] === 'object') {
|
|
150
|
+
for (const [field, value] of Object.entries(args[kind])) {
|
|
151
|
+
const fieldInfo = (0, cross_1.resolveField)(this.options.modelMeta, model, field);
|
|
152
|
+
if (!fieldInfo) {
|
|
153
|
+
continue;
|
|
149
154
|
}
|
|
150
|
-
if (this.
|
|
151
|
-
|
|
155
|
+
if (this.isDelegateOrDescendantOfDelegate(fieldInfo === null || fieldInfo === void 0 ? void 0 : fieldInfo.type) && value) {
|
|
156
|
+
// delegate model, recursively inject hierarchy
|
|
157
|
+
if (args[kind][field]) {
|
|
158
|
+
if (args[kind][field] === true) {
|
|
159
|
+
// make sure the payload is an object
|
|
160
|
+
args[kind][field] = {};
|
|
161
|
+
}
|
|
162
|
+
yield this.injectSelectIncludeHierarchy(fieldInfo.type, args[kind][field]);
|
|
163
|
+
}
|
|
152
164
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
165
|
+
// refetch the field select/include value because it may have been
|
|
166
|
+
// updated during injection
|
|
167
|
+
const fieldValue = args[kind][field];
|
|
168
|
+
if (fieldValue !== undefined) {
|
|
169
|
+
if (fieldValue.orderBy) {
|
|
170
|
+
// `orderBy` may contain fields from base types
|
|
171
|
+
this.injectWhereHierarchy(fieldInfo.type, fieldValue.orderBy);
|
|
172
|
+
}
|
|
173
|
+
if (this.injectBaseFieldSelect(model, field, fieldValue, args, kind)) {
|
|
174
|
+
delete args[kind][field];
|
|
175
|
+
}
|
|
176
|
+
else if (fieldInfo.isDataModel) {
|
|
177
|
+
let nextValue = fieldValue;
|
|
178
|
+
if (nextValue === true) {
|
|
179
|
+
// make sure the payload is an object
|
|
180
|
+
args[kind][field] = nextValue = {};
|
|
181
|
+
}
|
|
182
|
+
yield this.injectSelectIncludeHierarchy(fieldInfo.type, nextValue);
|
|
158
183
|
}
|
|
159
|
-
this.injectSelectIncludeHierarchy(fieldInfo.type, nextValue);
|
|
160
184
|
}
|
|
161
185
|
}
|
|
162
186
|
}
|
|
163
187
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
188
|
+
if (!args.select) {
|
|
189
|
+
// include base models upwards
|
|
190
|
+
this.injectBaseIncludeRecursively(model, args);
|
|
191
|
+
// include sub models downwards
|
|
192
|
+
yield this.injectConcreteIncludeRecursively(model, args);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
171
195
|
}
|
|
172
|
-
buildSelectIncludeHierarchy(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (
|
|
179
|
-
|
|
196
|
+
buildSelectIncludeHierarchy(model_1, args_1) {
|
|
197
|
+
return __awaiter(this, arguments, void 0, function* (model, args, includeConcreteFields = true) {
|
|
198
|
+
args = (0, cross_1.clone)(args);
|
|
199
|
+
const selectInclude = this.extractSelectInclude(args) || {};
|
|
200
|
+
if (selectInclude.select && typeof selectInclude.select === 'object') {
|
|
201
|
+
Object.entries(selectInclude.select).forEach(([field, value]) => {
|
|
202
|
+
if (value) {
|
|
203
|
+
if (this.injectBaseFieldSelect(model, field, value, selectInclude, 'select')) {
|
|
204
|
+
delete selectInclude.select[field];
|
|
205
|
+
}
|
|
180
206
|
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
else if (selectInclude.include && typeof selectInclude.include === 'object') {
|
|
210
|
+
Object.entries(selectInclude.include).forEach(([field, value]) => {
|
|
211
|
+
if (value) {
|
|
212
|
+
if (this.injectBaseFieldSelect(model, field, value, selectInclude, 'include')) {
|
|
213
|
+
delete selectInclude.include[field];
|
|
214
|
+
}
|
|
189
215
|
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
if (!selectInclude.select) {
|
|
219
|
+
this.injectBaseIncludeRecursively(model, selectInclude);
|
|
220
|
+
if (includeConcreteFields) {
|
|
221
|
+
yield this.injectConcreteIncludeRecursively(model, selectInclude);
|
|
190
222
|
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
this.injectBaseIncludeRecursively(model, selectInclude);
|
|
195
|
-
this.injectConcreteIncludeRecursively(model, selectInclude);
|
|
196
|
-
}
|
|
197
|
-
return selectInclude;
|
|
223
|
+
}
|
|
224
|
+
return selectInclude;
|
|
225
|
+
});
|
|
198
226
|
}
|
|
199
227
|
injectBaseFieldSelect(model, field, value, selectInclude, context) {
|
|
200
228
|
const fieldInfo = (0, cross_1.resolveField)(this.options.modelMeta, model, field);
|
|
@@ -253,24 +281,43 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
253
281
|
this.injectBaseIncludeRecursively(base.name, selectInclude.include[baseRelationName]);
|
|
254
282
|
}
|
|
255
283
|
injectConcreteIncludeRecursively(model, selectInclude) {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
// get sub models of this model
|
|
261
|
-
const subModels = Object.values(this.options.modelMeta.models).filter((m) => { var _a; return (_a = m.baseTypes) === null || _a === void 0 ? void 0 : _a.includes(modelInfo.name); });
|
|
262
|
-
for (const subModel of subModels) {
|
|
263
|
-
// include sub model relation field
|
|
264
|
-
const subRelationName = this.makeAuxRelationName(subModel);
|
|
265
|
-
if (selectInclude.select) {
|
|
266
|
-
selectInclude.include = Object.assign({ [subRelationName]: {} }, selectInclude.select);
|
|
267
|
-
delete selectInclude.select;
|
|
284
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
285
|
+
const modelInfo = (0, cross_1.getModelInfo)(this.options.modelMeta, model);
|
|
286
|
+
if (!modelInfo) {
|
|
287
|
+
return;
|
|
268
288
|
}
|
|
269
|
-
|
|
270
|
-
|
|
289
|
+
// get sub models of this model
|
|
290
|
+
const subModels = Object.values(this.options.modelMeta.models).filter((m) => { var _a; return (_a = m.baseTypes) === null || _a === void 0 ? void 0 : _a.includes(modelInfo.name); });
|
|
291
|
+
for (const subModel of subModels) {
|
|
292
|
+
// include sub model relation field
|
|
293
|
+
const subRelationName = this.makeAuxRelationName(subModel);
|
|
294
|
+
// create a payload to include the sub model relation
|
|
295
|
+
const includePayload = yield this.createConcreteRelationIncludePayload(subModel.name);
|
|
296
|
+
if (selectInclude.select) {
|
|
297
|
+
selectInclude.include = Object.assign({ [subRelationName]: includePayload }, selectInclude.select);
|
|
298
|
+
delete selectInclude.select;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
selectInclude.include = Object.assign({ [subRelationName]: includePayload }, selectInclude.include);
|
|
302
|
+
}
|
|
303
|
+
yield this.injectConcreteIncludeRecursively(subModel.name, selectInclude.include[subRelationName]);
|
|
271
304
|
}
|
|
272
|
-
|
|
273
|
-
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
createConcreteRelationIncludePayload(model) {
|
|
308
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
309
|
+
let result = {};
|
|
310
|
+
if (this.options.processIncludeRelationPayload) {
|
|
311
|
+
// use the callback in options to process the include payload, so enhancements
|
|
312
|
+
// like 'policy' can do extra work (e.g., inject policy rules)
|
|
313
|
+
yield this.options.processIncludeRelationPayload(this.prisma, model, result, this.options, this.context);
|
|
314
|
+
// the callback may directly reference fields from polymorphic bases, we need to fix it
|
|
315
|
+
// into a proper hierarchy by moving base field references to the base layer relations
|
|
316
|
+
const properHierarchy = yield this.buildSelectIncludeHierarchy(model, result, false);
|
|
317
|
+
result = Object.assign(Object.assign({}, result), properHierarchy);
|
|
318
|
+
}
|
|
319
|
+
return result;
|
|
320
|
+
});
|
|
274
321
|
}
|
|
275
322
|
// #endregion
|
|
276
323
|
// #region create
|
|
@@ -285,6 +332,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
285
332
|
if (!args.data) {
|
|
286
333
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
287
334
|
}
|
|
335
|
+
this.sanitizeMutationPayload(args.data);
|
|
288
336
|
if ((0, cross_1.isDelegateModel)(this.options.modelMeta, this.model)) {
|
|
289
337
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, `Model "${this.model}" is a delegate and cannot be created directly`);
|
|
290
338
|
}
|
|
@@ -294,6 +342,19 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
294
342
|
return this.doCreate(this.prisma, this.model, args);
|
|
295
343
|
});
|
|
296
344
|
}
|
|
345
|
+
sanitizeMutationPayload(data) {
|
|
346
|
+
if (!data) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
const prisma = this.prisma;
|
|
350
|
+
const prismaModule = this.options.prismaModule;
|
|
351
|
+
(0, traverse_1.default)(data).forEach(function () {
|
|
352
|
+
var _a;
|
|
353
|
+
if ((_a = this.key) === null || _a === void 0 ? void 0 : _a.startsWith(constants_1.DELEGATE_AUX_RELATION_PREFIX)) {
|
|
354
|
+
throw (0, utils_1.prismaClientValidationError)(prisma, prismaModule, `Auxiliary relation field "${this.key}" cannot be set directly`);
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
}
|
|
297
358
|
createMany(args) {
|
|
298
359
|
if (!args) {
|
|
299
360
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'query argument is required');
|
|
@@ -301,6 +362,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
301
362
|
if (!args.data) {
|
|
302
363
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
303
364
|
}
|
|
365
|
+
this.sanitizeMutationPayload(args.data);
|
|
304
366
|
if (!this.involvesDelegateModel(this.model)) {
|
|
305
367
|
return super.createMany(args);
|
|
306
368
|
}
|
|
@@ -325,6 +387,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
325
387
|
if (!args.data) {
|
|
326
388
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
327
389
|
}
|
|
390
|
+
this.sanitizeMutationPayload(args.data);
|
|
328
391
|
if (!this.involvesDelegateModel(this.model)) {
|
|
329
392
|
return super.createManyAndReturn(args);
|
|
330
393
|
}
|
|
@@ -346,7 +409,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
346
409
|
return __awaiter(this, void 0, void 0, function* () {
|
|
347
410
|
args = (0, cross_1.clone)(args);
|
|
348
411
|
yield this.injectCreateHierarchy(model, args);
|
|
349
|
-
this.injectSelectIncludeHierarchy(model, args);
|
|
412
|
+
yield this.injectSelectIncludeHierarchy(model, args);
|
|
350
413
|
if (this.options.logPrismaQuery) {
|
|
351
414
|
this.logger.info(`[delegate] \`create\` ${this.getModelName(model)}: ${(0, utils_1.formatObject)(args)}`);
|
|
352
415
|
}
|
|
@@ -462,6 +525,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
462
525
|
if (!args.data) {
|
|
463
526
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
464
527
|
}
|
|
528
|
+
this.sanitizeMutationPayload(args.data);
|
|
465
529
|
if (!this.involvesDelegateModel(this.model)) {
|
|
466
530
|
return super.update(args);
|
|
467
531
|
}
|
|
@@ -478,6 +542,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
478
542
|
if (!args.data) {
|
|
479
543
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
480
544
|
}
|
|
545
|
+
this.sanitizeMutationPayload(args.data);
|
|
481
546
|
if (!this.involvesDelegateModel(this.model)) {
|
|
482
547
|
return _super.updateMany.call(this, args);
|
|
483
548
|
}
|
|
@@ -500,6 +565,8 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
500
565
|
if (!args.where) {
|
|
501
566
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'where field is required in query argument');
|
|
502
567
|
}
|
|
568
|
+
this.sanitizeMutationPayload(args.update);
|
|
569
|
+
this.sanitizeMutationPayload(args.create);
|
|
503
570
|
if ((0, cross_1.isDelegateModel)(this.options.modelMeta, this.model)) {
|
|
504
571
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, `Model "${this.model}" is a delegate and doesn't support upsert`);
|
|
505
572
|
}
|
|
@@ -508,7 +575,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
508
575
|
}
|
|
509
576
|
args = (0, cross_1.clone)(args);
|
|
510
577
|
this.injectWhereHierarchy(this.model, args === null || args === void 0 ? void 0 : args.where);
|
|
511
|
-
this.injectSelectIncludeHierarchy(this.model, args);
|
|
578
|
+
yield this.injectSelectIncludeHierarchy(this.model, args);
|
|
512
579
|
if (args.create) {
|
|
513
580
|
this.doProcessCreatePayload(this.model, args.create);
|
|
514
581
|
}
|
|
@@ -526,7 +593,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
526
593
|
return __awaiter(this, void 0, void 0, function* () {
|
|
527
594
|
args = (0, cross_1.clone)(args);
|
|
528
595
|
yield this.injectUpdateHierarchy(db, model, args);
|
|
529
|
-
this.injectSelectIncludeHierarchy(model, args);
|
|
596
|
+
yield this.injectSelectIncludeHierarchy(model, args);
|
|
530
597
|
if (this.options.logPrismaQuery) {
|
|
531
598
|
this.logger.info(`[delegate] \`update\` ${this.getModelName(model)}: ${(0, utils_1.formatObject)(args)}`);
|
|
532
599
|
}
|
|
@@ -679,7 +746,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
679
746
|
return super.delete(args);
|
|
680
747
|
}
|
|
681
748
|
return this.queryUtils.transaction(this.prisma, (tx) => __awaiter(this, void 0, void 0, function* () {
|
|
682
|
-
const selectInclude = this.buildSelectIncludeHierarchy(this.model, args);
|
|
749
|
+
const selectInclude = yield this.buildSelectIncludeHierarchy(this.model, args);
|
|
683
750
|
// make sure id fields are selected
|
|
684
751
|
const idFields = this.getIdFields(this.model);
|
|
685
752
|
for (const idField of idFields) {
|
|
@@ -724,6 +791,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
724
791
|
doDelete(db, model, args) {
|
|
725
792
|
return __awaiter(this, void 0, void 0, function* () {
|
|
726
793
|
this.injectWhereHierarchy(model, args.where);
|
|
794
|
+
yield this.injectSelectIncludeHierarchy(model, args);
|
|
727
795
|
if (this.options.logPrismaQuery) {
|
|
728
796
|
this.logger.info(`[delegate] \`delete\` ${this.getModelName(model)}: ${(0, utils_1.formatObject)(args)}`);
|
|
729
797
|
}
|
|
@@ -921,11 +989,11 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
921
989
|
const result = {};
|
|
922
990
|
const base = this.getBaseModel(model);
|
|
923
991
|
if (base) {
|
|
924
|
-
// merge base fields
|
|
992
|
+
// fully merge base fields
|
|
925
993
|
const baseRelationName = this.makeAuxRelationName(base);
|
|
926
994
|
const baseData = entity[baseRelationName];
|
|
927
995
|
if (baseData && typeof baseData === 'object') {
|
|
928
|
-
const baseAssembled = this.
|
|
996
|
+
const baseAssembled = this.assembleHierarchy(base.name, baseData);
|
|
929
997
|
Object.assign(result, baseAssembled);
|
|
930
998
|
}
|
|
931
999
|
}
|
|
@@ -965,14 +1033,14 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
965
1033
|
const result = {};
|
|
966
1034
|
const modelInfo = (0, cross_1.getModelInfo)(this.options.modelMeta, model, true);
|
|
967
1035
|
if (modelInfo.discriminator) {
|
|
968
|
-
// model is a delegate, merge
|
|
1036
|
+
// model is a delegate, fully merge concrete model fields
|
|
969
1037
|
const subModelName = entity[modelInfo.discriminator];
|
|
970
1038
|
if (subModelName) {
|
|
971
1039
|
const subModel = (0, cross_1.getModelInfo)(this.options.modelMeta, subModelName, true);
|
|
972
1040
|
const subRelationName = this.makeAuxRelationName(subModel);
|
|
973
1041
|
const subData = entity[subRelationName];
|
|
974
1042
|
if (subData && typeof subData === 'object') {
|
|
975
|
-
const subAssembled = this.
|
|
1043
|
+
const subAssembled = this.assembleHierarchy(subModel.name, subData);
|
|
976
1044
|
Object.assign(result, subAssembled);
|
|
977
1045
|
}
|
|
978
1046
|
}
|