@zenstackhq/runtime 2.5.1 → 2.6.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 +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 +6 -3
- package/enhancements/edge/delegate.js +145 -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 +6 -3
- package/enhancements/node/delegate.js +145 -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":"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"}
|
|
@@ -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":";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;gBAC5C,QAAQ;gBACR,YAAY;gBACZ,qBAAqB;gBACrB,QAAQ;gBACR,YAAY;gBACZ,QAAQ;aACX,CAAC;YACF,IAAI,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,MAA+B,EAAE,IAAI,CAAC,CAAC;gBACrG,OAAO,OAAO,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;KAAA;IAEa,sBAAsB,CAAC,KAAa,EAAE,MAA6B,EAAE,IAAS;;YACxF,MAAM,OAAO,GAAG,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;YAE5B,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAE,IAAS,EAAE,EAAE;gBACtD,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACxD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5C,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;wBACzB,0CAA0C;wBAC1C,SAAS;oBACb,CAAC;oBAED,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;wBAClC,sDAAsD;wBACtD,SAAS;oBACb,CAAC;oBAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;oBACjE,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;wBACjC,0CAA0C;wBAC1C,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;oBACvE,CAAC;gBACL,CAAC;YACL,CAAC,CAAC;YAEF,sFAAsF;YACtF,MAAM,OAAO,GAAG,IAAI,0BAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC3D,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACpB,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACtC,CAAC;gBAED,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACpB,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7C,CAAC;gBAED,UAAU,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACxB,KAAK,MAAM,IAAI,IAAI,IAAA,iBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBACtC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBACtC,CAAC;gBACL,CAAC;aACJ,CAAC,CAAC;YAEH,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC;QACnB,CAAC;KAAA;IAEO,mBAAmB,CAAC,SAAoB,EAAE,KAAa,EAAE,IAAS,EAAE,gBAAyB;;QACjG,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC;YACvF,yFAAyF;YACzF,OAAO;QACX,CAAC;QAED,IAAI,SAAS,CAAC,YAAY,IAAI,CAAC,IAAA,sBAAc,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACjF,mFAAmF;YACnF,0EAA0E;YAC1E,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC;YAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CACX,WAAW,SAAS,CAAC,IAAI,wEAAwE,CACpG,CAAC;YACN,CAAC;YACD,MAAM,aAAa,GAAG,IAAA,oBAAY,EAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YAEhF,6CAA6C;YAC7C,IAAI,OAAO,GAAG,MAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0CAAE,OAAO,CAAC;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;YAC3C,CAAC;YAED,yDAAyD;YACzD,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAClF,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CACX,gDAAgD,SAAS,CAAC,IAAI,0BAA0B,YAAY,IAAI,CAC3G,CAAC;YACN,CAAC;YACD,OAAO,CAAC,mBAAmB,CAAC,GAAG,gBAAgB,CAAC;QACpD,CAAC;aAAM,CAAC;YACJ,6BAA6B;YAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;QAC5C,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,aAAwB,EAAE,SAAoB;QACzE,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;YACnC,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;QACpG,OAAO,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,CAAC;IACtB,CAAC;IAEO,uBAAuB,CAAC,SAAoB;;QAChD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,MAAM,IAAA,mCAA2B,EAC7B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,CAAC,YAAY,EACzB,uCAAuC,SAAS,CAAC,IAAI,4BAA4B,CACpF,CAAC;QACN,CAAC;QACD,OAAO,MAAA,SAAS,CAAC,oBAAoB,0DAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;CACJ"}
|
|
@@ -1,17 +1,19 @@
|
|
|
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;
|
|
@@ -19,6 +21,7 @@ export declare class DelegateProxyHandler extends DefaultPrismaProxyHandler {
|
|
|
19
21
|
private injectBaseIncludeRecursively;
|
|
20
22
|
private injectConcreteIncludeRecursively;
|
|
21
23
|
create(args: any): Promise<any>;
|
|
24
|
+
private sanitizeMutationPayload;
|
|
22
25
|
createMany(args: {
|
|
23
26
|
data: any;
|
|
24
27
|
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,86 @@ 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
196
|
buildSelectIncludeHierarchy(model, args) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (
|
|
179
|
-
|
|
197
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
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
|
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
if (!selectInclude.select) {
|
|
219
|
+
this.injectBaseIncludeRecursively(model, selectInclude);
|
|
220
|
+
yield this.injectConcreteIncludeRecursively(model, selectInclude);
|
|
221
|
+
}
|
|
222
|
+
return selectInclude;
|
|
223
|
+
});
|
|
198
224
|
}
|
|
199
225
|
injectBaseFieldSelect(model, field, value, selectInclude, context) {
|
|
200
226
|
const fieldInfo = (0, cross_1.resolveField)(this.options.modelMeta, model, field);
|
|
@@ -253,24 +279,32 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
253
279
|
this.injectBaseIncludeRecursively(base.name, selectInclude.include[baseRelationName]);
|
|
254
280
|
}
|
|
255
281
|
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;
|
|
282
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
283
|
+
const modelInfo = (0, cross_1.getModelInfo)(this.options.modelMeta, model);
|
|
284
|
+
if (!modelInfo) {
|
|
285
|
+
return;
|
|
268
286
|
}
|
|
269
|
-
|
|
270
|
-
|
|
287
|
+
// get sub models of this model
|
|
288
|
+
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); });
|
|
289
|
+
for (const subModel of subModels) {
|
|
290
|
+
// include sub model relation field
|
|
291
|
+
const subRelationName = this.makeAuxRelationName(subModel);
|
|
292
|
+
const includePayload = {};
|
|
293
|
+
if (this.options.processIncludeRelationPayload) {
|
|
294
|
+
// use the callback in options to process the include payload, so enhancements
|
|
295
|
+
// like 'policy' can do extra work (e.g., inject policy rules)
|
|
296
|
+
yield this.options.processIncludeRelationPayload(this.prisma, subModel.name, includePayload, this.options, this.context);
|
|
297
|
+
}
|
|
298
|
+
if (selectInclude.select) {
|
|
299
|
+
selectInclude.include = Object.assign({ [subRelationName]: includePayload }, selectInclude.select);
|
|
300
|
+
delete selectInclude.select;
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
selectInclude.include = Object.assign({ [subRelationName]: includePayload }, selectInclude.include);
|
|
304
|
+
}
|
|
305
|
+
yield this.injectConcreteIncludeRecursively(subModel.name, selectInclude.include[subRelationName]);
|
|
271
306
|
}
|
|
272
|
-
|
|
273
|
-
}
|
|
307
|
+
});
|
|
274
308
|
}
|
|
275
309
|
// #endregion
|
|
276
310
|
// #region create
|
|
@@ -285,6 +319,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
285
319
|
if (!args.data) {
|
|
286
320
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
287
321
|
}
|
|
322
|
+
this.sanitizeMutationPayload(args.data);
|
|
288
323
|
if ((0, cross_1.isDelegateModel)(this.options.modelMeta, this.model)) {
|
|
289
324
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, `Model "${this.model}" is a delegate and cannot be created directly`);
|
|
290
325
|
}
|
|
@@ -294,6 +329,19 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
294
329
|
return this.doCreate(this.prisma, this.model, args);
|
|
295
330
|
});
|
|
296
331
|
}
|
|
332
|
+
sanitizeMutationPayload(data) {
|
|
333
|
+
if (!data) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
const prisma = this.prisma;
|
|
337
|
+
const prismaModule = this.options.prismaModule;
|
|
338
|
+
(0, traverse_1.default)(data).forEach(function () {
|
|
339
|
+
var _a;
|
|
340
|
+
if ((_a = this.key) === null || _a === void 0 ? void 0 : _a.startsWith(constants_1.DELEGATE_AUX_RELATION_PREFIX)) {
|
|
341
|
+
throw (0, utils_1.prismaClientValidationError)(prisma, prismaModule, `Auxiliary relation field "${this.key}" cannot be set directly`);
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
}
|
|
297
345
|
createMany(args) {
|
|
298
346
|
if (!args) {
|
|
299
347
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'query argument is required');
|
|
@@ -301,6 +349,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
301
349
|
if (!args.data) {
|
|
302
350
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
303
351
|
}
|
|
352
|
+
this.sanitizeMutationPayload(args.data);
|
|
304
353
|
if (!this.involvesDelegateModel(this.model)) {
|
|
305
354
|
return super.createMany(args);
|
|
306
355
|
}
|
|
@@ -325,6 +374,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
325
374
|
if (!args.data) {
|
|
326
375
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
327
376
|
}
|
|
377
|
+
this.sanitizeMutationPayload(args.data);
|
|
328
378
|
if (!this.involvesDelegateModel(this.model)) {
|
|
329
379
|
return super.createManyAndReturn(args);
|
|
330
380
|
}
|
|
@@ -346,7 +396,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
346
396
|
return __awaiter(this, void 0, void 0, function* () {
|
|
347
397
|
args = (0, cross_1.clone)(args);
|
|
348
398
|
yield this.injectCreateHierarchy(model, args);
|
|
349
|
-
this.injectSelectIncludeHierarchy(model, args);
|
|
399
|
+
yield this.injectSelectIncludeHierarchy(model, args);
|
|
350
400
|
if (this.options.logPrismaQuery) {
|
|
351
401
|
this.logger.info(`[delegate] \`create\` ${this.getModelName(model)}: ${(0, utils_1.formatObject)(args)}`);
|
|
352
402
|
}
|
|
@@ -462,6 +512,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
462
512
|
if (!args.data) {
|
|
463
513
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
464
514
|
}
|
|
515
|
+
this.sanitizeMutationPayload(args.data);
|
|
465
516
|
if (!this.involvesDelegateModel(this.model)) {
|
|
466
517
|
return super.update(args);
|
|
467
518
|
}
|
|
@@ -478,6 +529,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
478
529
|
if (!args.data) {
|
|
479
530
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'data field is required in query argument');
|
|
480
531
|
}
|
|
532
|
+
this.sanitizeMutationPayload(args.data);
|
|
481
533
|
if (!this.involvesDelegateModel(this.model)) {
|
|
482
534
|
return _super.updateMany.call(this, args);
|
|
483
535
|
}
|
|
@@ -500,6 +552,8 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
500
552
|
if (!args.where) {
|
|
501
553
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, 'where field is required in query argument');
|
|
502
554
|
}
|
|
555
|
+
this.sanitizeMutationPayload(args.update);
|
|
556
|
+
this.sanitizeMutationPayload(args.create);
|
|
503
557
|
if ((0, cross_1.isDelegateModel)(this.options.modelMeta, this.model)) {
|
|
504
558
|
throw (0, utils_1.prismaClientValidationError)(this.prisma, this.options.prismaModule, `Model "${this.model}" is a delegate and doesn't support upsert`);
|
|
505
559
|
}
|
|
@@ -508,7 +562,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
508
562
|
}
|
|
509
563
|
args = (0, cross_1.clone)(args);
|
|
510
564
|
this.injectWhereHierarchy(this.model, args === null || args === void 0 ? void 0 : args.where);
|
|
511
|
-
this.injectSelectIncludeHierarchy(this.model, args);
|
|
565
|
+
yield this.injectSelectIncludeHierarchy(this.model, args);
|
|
512
566
|
if (args.create) {
|
|
513
567
|
this.doProcessCreatePayload(this.model, args.create);
|
|
514
568
|
}
|
|
@@ -526,7 +580,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
526
580
|
return __awaiter(this, void 0, void 0, function* () {
|
|
527
581
|
args = (0, cross_1.clone)(args);
|
|
528
582
|
yield this.injectUpdateHierarchy(db, model, args);
|
|
529
|
-
this.injectSelectIncludeHierarchy(model, args);
|
|
583
|
+
yield this.injectSelectIncludeHierarchy(model, args);
|
|
530
584
|
if (this.options.logPrismaQuery) {
|
|
531
585
|
this.logger.info(`[delegate] \`update\` ${this.getModelName(model)}: ${(0, utils_1.formatObject)(args)}`);
|
|
532
586
|
}
|
|
@@ -679,7 +733,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
679
733
|
return super.delete(args);
|
|
680
734
|
}
|
|
681
735
|
return this.queryUtils.transaction(this.prisma, (tx) => __awaiter(this, void 0, void 0, function* () {
|
|
682
|
-
const selectInclude = this.buildSelectIncludeHierarchy(this.model, args);
|
|
736
|
+
const selectInclude = yield this.buildSelectIncludeHierarchy(this.model, args);
|
|
683
737
|
// make sure id fields are selected
|
|
684
738
|
const idFields = this.getIdFields(this.model);
|
|
685
739
|
for (const idField of idFields) {
|
|
@@ -724,6 +778,7 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
724
778
|
doDelete(db, model, args) {
|
|
725
779
|
return __awaiter(this, void 0, void 0, function* () {
|
|
726
780
|
this.injectWhereHierarchy(model, args.where);
|
|
781
|
+
yield this.injectSelectIncludeHierarchy(model, args);
|
|
727
782
|
if (this.options.logPrismaQuery) {
|
|
728
783
|
this.logger.info(`[delegate] \`delete\` ${this.getModelName(model)}: ${(0, utils_1.formatObject)(args)}`);
|
|
729
784
|
}
|
|
@@ -921,11 +976,11 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
921
976
|
const result = {};
|
|
922
977
|
const base = this.getBaseModel(model);
|
|
923
978
|
if (base) {
|
|
924
|
-
// merge base fields
|
|
979
|
+
// fully merge base fields
|
|
925
980
|
const baseRelationName = this.makeAuxRelationName(base);
|
|
926
981
|
const baseData = entity[baseRelationName];
|
|
927
982
|
if (baseData && typeof baseData === 'object') {
|
|
928
|
-
const baseAssembled = this.
|
|
983
|
+
const baseAssembled = this.assembleHierarchy(base.name, baseData);
|
|
929
984
|
Object.assign(result, baseAssembled);
|
|
930
985
|
}
|
|
931
986
|
}
|
|
@@ -965,14 +1020,14 @@ class DelegateProxyHandler extends proxy_1.DefaultPrismaProxyHandler {
|
|
|
965
1020
|
const result = {};
|
|
966
1021
|
const modelInfo = (0, cross_1.getModelInfo)(this.options.modelMeta, model, true);
|
|
967
1022
|
if (modelInfo.discriminator) {
|
|
968
|
-
// model is a delegate, merge
|
|
1023
|
+
// model is a delegate, fully merge concrete model fields
|
|
969
1024
|
const subModelName = entity[modelInfo.discriminator];
|
|
970
1025
|
if (subModelName) {
|
|
971
1026
|
const subModel = (0, cross_1.getModelInfo)(this.options.modelMeta, subModelName, true);
|
|
972
1027
|
const subRelationName = this.makeAuxRelationName(subModel);
|
|
973
1028
|
const subData = entity[subRelationName];
|
|
974
1029
|
if (subData && typeof subData === 'object') {
|
|
975
|
-
const subAssembled = this.
|
|
1030
|
+
const subAssembled = this.assembleHierarchy(subModel.name, subData);
|
|
976
1031
|
Object.assign(result, subAssembled);
|
|
977
1032
|
}
|
|
978
1033
|
}
|