@payloadcms/db-mongodb 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ee5d8bd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/connect.d.ts.map +1 -1
- package/dist/connect.js +0 -1
- package/dist/connect.js.map +1 -1
- package/dist/count.d.ts.map +1 -1
- package/dist/count.js +4 -33
- package/dist/count.js.map +1 -1
- package/dist/countGlobalVersions.d.ts.map +1 -1
- package/dist/countGlobalVersions.js +0 -1
- package/dist/countGlobalVersions.js.map +1 -1
- package/dist/countVersions.d.ts.map +1 -1
- package/dist/countVersions.js +4 -36
- package/dist/countVersions.js.map +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +0 -22
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +3 -16
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteMany.d.ts.map +1 -1
- package/dist/deleteMany.js +0 -1
- package/dist/deleteMany.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +1 -20
- package/dist/deleteOne.js.map +1 -1
- package/dist/deleteVersions.d.ts.map +1 -1
- package/dist/deleteVersions.js +0 -1
- package/dist/deleteVersions.js.map +1 -1
- package/dist/exports/migration-utils.d.ts +0 -1
- package/dist/exports/migration-utils.d.ts.map +1 -1
- package/dist/exports/migration-utils.js +0 -1
- package/dist/exports/migration-utils.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +8 -44
- package/dist/find.js.map +1 -1
- package/dist/findDistinct.d.ts.map +1 -1
- package/dist/findDistinct.js +11 -70
- package/dist/findDistinct.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +5 -34
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.d.ts.map +1 -1
- package/dist/findGlobalVersions.js +2 -10
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +5 -43
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +5 -49
- package/dist/findVersions.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/models/buildGlobalModel.d.ts.map +1 -1
- package/dist/models/buildGlobalModel.js +1 -30
- package/dist/models/buildGlobalModel.js.map +1 -1
- package/dist/models/buildSchema.d.ts.map +1 -1
- package/dist/models/buildSchema.js +10 -30
- package/dist/models/buildSchema.js.map +1 -1
- package/dist/predefinedMigrations/migrateSizesToVariants.js.map +1 -1
- package/dist/queries/buildAndOrConditions.d.ts +2 -4
- package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
- package/dist/queries/buildAndOrConditions.js +1 -3
- package/dist/queries/buildAndOrConditions.js.map +1 -1
- package/dist/queries/buildQuery.d.ts +2 -4
- package/dist/queries/buildQuery.d.ts.map +1 -1
- package/dist/queries/buildQuery.js +1 -3
- package/dist/queries/buildQuery.js.map +1 -1
- package/dist/queries/buildSearchParams.d.ts +2 -4
- package/dist/queries/buildSearchParams.d.ts.map +1 -1
- package/dist/queries/buildSearchParams.js +44 -175
- package/dist/queries/buildSearchParams.js.map +1 -1
- package/dist/queries/getBuildQueryPlugin.d.ts +1 -3
- package/dist/queries/getBuildQueryPlugin.d.ts.map +1 -1
- package/dist/queries/getBuildQueryPlugin.js +1 -3
- package/dist/queries/getBuildQueryPlugin.js.map +1 -1
- package/dist/queries/parseParams.d.ts +2 -4
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +1 -5
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +7 -38
- package/dist/queryDrafts.js.map +1 -1
- package/dist/transactions/commitTransaction.d.ts.map +1 -1
- package/dist/transactions/commitTransaction.js +7 -55
- package/dist/transactions/commitTransaction.js.map +1 -1
- package/dist/transactions/rollbackTransaction.d.ts.map +1 -1
- package/dist/transactions/rollbackTransaction.js +9 -10
- package/dist/transactions/rollbackTransaction.js.map +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +7 -87
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +0 -1
- package/dist/updateGlobalVersion.js.map +1 -1
- package/dist/updateMany.d.ts.map +1 -1
- package/dist/updateMany.js +1 -3
- package/dist/updateMany.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +2 -28
- package/dist/updateOne.js.map +1 -1
- package/dist/updateVersion.d.ts.map +1 -1
- package/dist/updateVersion.js +0 -1
- package/dist/updateVersion.js.map +1 -1
- package/dist/utilities/aggregatePaginate.d.ts +1 -2
- package/dist/utilities/aggregatePaginate.d.ts.map +1 -1
- package/dist/utilities/aggregatePaginate.js +4 -18
- package/dist/utilities/aggregatePaginate.js.map +1 -1
- package/dist/utilities/buildJoinAggregation.d.ts +2 -4
- package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
- package/dist/utilities/buildJoinAggregation.js +23 -118
- package/dist/utilities/buildJoinAggregation.js.map +1 -1
- package/dist/utilities/resolveJoins.d.ts +2 -6
- package/dist/utilities/resolveJoins.d.ts.map +1 -1
- package/dist/utilities/resolveJoins.js +26 -114
- package/dist/utilities/resolveJoins.js.map +1 -1
- package/package.json +16 -19
- package/dist/deleteBranchGlobal.d.ts +0 -10
- package/dist/deleteBranchGlobal.d.ts.map +0 -1
- package/dist/deleteBranchGlobal.js +0 -22
- package/dist/deleteBranchGlobal.js.map +0 -1
- package/dist/predefinedMigrations/branching.d.ts +0 -4
- package/dist/predefinedMigrations/branching.d.ts.map +0 -1
- package/dist/predefinedMigrations/branching.js +0 -9
- package/dist/predefinedMigrations/branching.js.map +0 -1
- package/dist/predefinedMigrations/migrateBranching.d.ts +0 -15
- package/dist/predefinedMigrations/migrateBranching.d.ts.map +0 -1
- package/dist/predefinedMigrations/migrateBranching.js +0 -88
- package/dist/predefinedMigrations/migrateBranching.js.map +0 -1
- package/dist/queries/buildBranchVisibility.d.ts +0 -11
- package/dist/queries/buildBranchVisibility.d.ts.map +0 -1
- package/dist/queries/buildBranchVisibility.js +0 -204
- package/dist/queries/buildBranchVisibility.js.map +0 -1
- package/dist/upsertBranchGlobalChange.d.ts +0 -3
- package/dist/upsertBranchGlobalChange.d.ts.map +0 -1
- package/dist/upsertBranchGlobalChange.js +0 -28
- package/dist/upsertBranchGlobalChange.js.map +0 -1
|
@@ -1,74 +1,16 @@
|
|
|
1
1
|
import { Types } from 'mongoose';
|
|
2
|
-
import { APIError, escapeRegExp, getFieldByPath, getLocalizedPaths
|
|
2
|
+
import { APIError, escapeRegExp, getFieldByPath, getLocalizedPaths } from 'payload';
|
|
3
3
|
import { hasManyRelationshipOperatorSet, isNestedRelationshipQuery, validOperatorSet } from 'payload/shared';
|
|
4
4
|
import { getCollection } from '../utilities/getEntity.js';
|
|
5
5
|
import { isObjectID } from '../utilities/isObjectID.js';
|
|
6
|
-
import { buildBranchVisibilityStages } from './buildBranchVisibility.js';
|
|
7
6
|
import { operatorMap } from './operatorMap.js';
|
|
8
7
|
import { sanitizeQueryValue } from './sanitizeQueryValue.js';
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const branchReadState = resolveBranchReadState({
|
|
12
|
-
branch,
|
|
13
|
-
collectionSlug,
|
|
14
|
-
req
|
|
15
|
-
});
|
|
16
|
-
const resolvedWhere = branchReadState.useBranching ? rewriteBranchIDs(where) : await resolveBranchQuery({
|
|
17
|
-
branch,
|
|
18
|
-
collectionSlug,
|
|
19
|
-
req,
|
|
20
|
-
where
|
|
21
|
-
});
|
|
22
|
-
return {
|
|
23
|
-
branchVisibility: branchReadState.useBranching ? buildBranchVisibilityStages({
|
|
24
|
-
adapter,
|
|
25
|
-
branch: branchReadState.branch,
|
|
26
|
-
collectionSlug
|
|
27
|
-
}) : [],
|
|
28
|
-
where: resolvedWhere ?? {}
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
const findRelatedDocuments = async ({ branchVisibility, Model, projection, query })=>{
|
|
32
|
-
if (branchVisibility.length) {
|
|
33
|
-
return Model.aggregate([
|
|
34
|
-
{
|
|
35
|
-
$match: query
|
|
36
|
-
},
|
|
37
|
-
...branchVisibility,
|
|
38
|
-
{
|
|
39
|
-
$project: projection
|
|
40
|
-
}
|
|
41
|
-
]);
|
|
42
|
-
}
|
|
43
|
-
return Model.find(query).lean().select(projection);
|
|
44
|
-
};
|
|
45
|
-
const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query })=>{
|
|
46
|
-
if (!branchVisibility.length) {
|
|
47
|
-
return Model.distinct(path, query);
|
|
48
|
-
}
|
|
49
|
-
return Model.aggregate([
|
|
50
|
-
{
|
|
51
|
-
$match: query
|
|
52
|
-
},
|
|
53
|
-
...branchVisibility,
|
|
54
|
-
{
|
|
55
|
-
$project: {
|
|
56
|
-
value: `$${path}`
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
$unwind: '$value'
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
$group: {
|
|
64
|
-
_id: '$value'
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
]).then((results)=>results.map(({ _id })=>_id));
|
|
8
|
+
const subQueryOptions = {
|
|
9
|
+
lean: true
|
|
68
10
|
};
|
|
69
11
|
/**
|
|
70
12
|
* Convert the Payload key / value / operator into a MongoDB query
|
|
71
|
-
*/ export async function buildSearchParam({
|
|
13
|
+
*/ export async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPath, locale, operator, parentIsLocalized, payload, val }) {
|
|
72
14
|
// Replace GraphQL nested field double underscore formatting
|
|
73
15
|
let sanitizedPath = incomingPath.replace(/__/g, '.');
|
|
74
16
|
if (sanitizedPath === 'id') {
|
|
@@ -110,24 +52,20 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
110
52
|
const [{ field, path }] = paths;
|
|
111
53
|
if (hasManyRelationshipOperatorSet.has(operator) && paths.length === 1 && (field.type === 'relationship' || field.type === 'upload') && field.hasMany && typeof field.relationTo === 'string' && isNestedRelationshipQuery(val)) {
|
|
112
54
|
return buildHasManyRelationshipSearchParam({
|
|
113
|
-
branch,
|
|
114
55
|
field,
|
|
115
56
|
locale,
|
|
116
57
|
nestedWhere: val,
|
|
117
58
|
operator: operator,
|
|
118
59
|
path,
|
|
119
|
-
payload
|
|
120
|
-
req
|
|
60
|
+
payload
|
|
121
61
|
});
|
|
122
62
|
}
|
|
123
63
|
if (operator === 'contains' && paths.length === 1 && field.type === 'join' && typeof field.collection === 'string' && isNestedRelationshipQuery(val)) {
|
|
124
64
|
return buildJoinContainsSearchParam({
|
|
125
|
-
branch,
|
|
126
65
|
field,
|
|
127
66
|
locale,
|
|
128
67
|
nestedWhere: val,
|
|
129
|
-
payload
|
|
130
|
-
req
|
|
68
|
+
payload
|
|
131
69
|
});
|
|
132
70
|
}
|
|
133
71
|
if ((operator === 'contains' || operator === 'like' || operator === 'not_like') && (isNestedRelationshipQuery(val) || Array.isArray(val) && val.some((entry)=>isNestedRelationshipQuery(entry)))) {
|
|
@@ -166,7 +104,6 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
166
104
|
let relationshipQuery = {
|
|
167
105
|
value: {}
|
|
168
106
|
};
|
|
169
|
-
let relationshipWhere;
|
|
170
107
|
for (const [i, { collectionSlug, path: subPath }] of pathsToQuery.entries()){
|
|
171
108
|
// The arrays are reversed together, so both entries describe the same relationship hop.
|
|
172
109
|
const parentField = parentPaths[i]?.field;
|
|
@@ -181,27 +118,17 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
181
118
|
collectionSlug
|
|
182
119
|
});
|
|
183
120
|
if (i === 0) {
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
collectionSlug,
|
|
121
|
+
const subQuery = await SubModel.buildQuery({
|
|
122
|
+
locale,
|
|
187
123
|
payload,
|
|
188
|
-
req,
|
|
189
124
|
where: {
|
|
190
125
|
[subPath]: {
|
|
191
126
|
[formattedOperator]: val
|
|
192
127
|
}
|
|
193
128
|
}
|
|
194
129
|
});
|
|
195
|
-
const subQuery = await SubModel.buildQuery({
|
|
196
|
-
branch,
|
|
197
|
-
locale,
|
|
198
|
-
payload,
|
|
199
|
-
req,
|
|
200
|
-
where: relatedWhere ?? {}
|
|
201
|
-
});
|
|
202
130
|
const select = {
|
|
203
|
-
_id: true
|
|
204
|
-
_branchDocID: true
|
|
131
|
+
_id: true
|
|
205
132
|
};
|
|
206
133
|
let joinPath = null;
|
|
207
134
|
if (parentField.type === 'join') {
|
|
@@ -222,12 +149,7 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
222
149
|
if (joinPath) {
|
|
223
150
|
select[joinPath] = true;
|
|
224
151
|
}
|
|
225
|
-
const result = await
|
|
226
|
-
branchVisibility,
|
|
227
|
-
Model: SubModel,
|
|
228
|
-
projection: select,
|
|
229
|
-
query: subQuery
|
|
230
|
-
});
|
|
152
|
+
const result = await SubModel.find(subQuery).lean().select(select);
|
|
231
153
|
const $in = [];
|
|
232
154
|
result.forEach((doc)=>{
|
|
233
155
|
if (joinPath) {
|
|
@@ -252,10 +174,9 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
252
174
|
$in.push(ref);
|
|
253
175
|
}
|
|
254
176
|
} else {
|
|
255
|
-
const
|
|
256
|
-
const stringID = documentID.toString();
|
|
177
|
+
const stringID = doc._id.toString();
|
|
257
178
|
if (Types.ObjectId.isValid(stringID)) {
|
|
258
|
-
$in.push(
|
|
179
|
+
$in.push(doc._id);
|
|
259
180
|
} else {
|
|
260
181
|
$in.push(stringID);
|
|
261
182
|
}
|
|
@@ -271,35 +192,21 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
271
192
|
}
|
|
272
193
|
const nextSubPath = pathsToQuery[i + 1]?.path;
|
|
273
194
|
if (nextSubPath) {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
195
|
+
relationshipQuery = {
|
|
196
|
+
value: joinPath ? {
|
|
197
|
+
_id: {
|
|
198
|
+
$in
|
|
199
|
+
}
|
|
200
|
+
} : {
|
|
201
|
+
[nextSubPath]: {
|
|
202
|
+
$in
|
|
203
|
+
}
|
|
281
204
|
}
|
|
282
205
|
};
|
|
283
206
|
}
|
|
284
207
|
continue;
|
|
285
208
|
}
|
|
286
|
-
|
|
287
|
-
return undefined;
|
|
288
|
-
}
|
|
289
|
-
const { branchVisibility, where: relatedWhere } = await resolveRelatedBranchQuery({
|
|
290
|
-
branch,
|
|
291
|
-
collectionSlug,
|
|
292
|
-
payload,
|
|
293
|
-
req,
|
|
294
|
-
where: relationshipWhere
|
|
295
|
-
});
|
|
296
|
-
const subQuery = await SubModel.buildQuery({
|
|
297
|
-
branch,
|
|
298
|
-
locale,
|
|
299
|
-
payload,
|
|
300
|
-
req,
|
|
301
|
-
where: relatedWhere ?? {}
|
|
302
|
-
});
|
|
209
|
+
const subQuery = relationshipQuery.value;
|
|
303
210
|
/**
|
|
304
211
|
* Follow this join back to its parent IDs.
|
|
305
212
|
* For example, matching songs yield album IDs, then artist IDs.
|
|
@@ -315,12 +222,7 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
315
222
|
if (relationshipField.pathHasLocalized && payload.config.localization) {
|
|
316
223
|
joinPath = joinPath.replace('<locale>', locale || payload.config.localization.defaultLocale);
|
|
317
224
|
}
|
|
318
|
-
const $in = await
|
|
319
|
-
branchVisibility,
|
|
320
|
-
Model: SubModel,
|
|
321
|
-
path: joinPath,
|
|
322
|
-
query: subQuery
|
|
323
|
-
});
|
|
225
|
+
const $in = await SubModel.distinct(joinPath, subQuery);
|
|
324
226
|
if (i + 1 === pathsToQuery.length) {
|
|
325
227
|
return {
|
|
326
228
|
path: '_id',
|
|
@@ -329,23 +231,17 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
329
231
|
}
|
|
330
232
|
};
|
|
331
233
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
234
|
+
relationshipQuery = {
|
|
235
|
+
value: {
|
|
236
|
+
_id: {
|
|
237
|
+
$in
|
|
238
|
+
}
|
|
335
239
|
}
|
|
336
240
|
};
|
|
337
241
|
continue;
|
|
338
242
|
}
|
|
339
|
-
const result = await
|
|
340
|
-
|
|
341
|
-
Model: SubModel,
|
|
342
|
-
projection: {
|
|
343
|
-
_id: true,
|
|
344
|
-
_branchDocID: true
|
|
345
|
-
},
|
|
346
|
-
query: subQuery
|
|
347
|
-
});
|
|
348
|
-
const $in = result.map((doc)=>doc._branchDocID ?? doc._id);
|
|
243
|
+
const result = await SubModel.find(subQuery, subQueryOptions);
|
|
244
|
+
const $in = result.map((doc)=>doc._id);
|
|
349
245
|
// If it is the last recursion
|
|
350
246
|
// then pass through the search param
|
|
351
247
|
if (i + 1 === pathsToQuery.length) {
|
|
@@ -358,9 +254,11 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
358
254
|
} else {
|
|
359
255
|
const nextSubPath = pathsToQuery[i + 1]?.path;
|
|
360
256
|
if (nextSubPath) {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
257
|
+
relationshipQuery = {
|
|
258
|
+
value: {
|
|
259
|
+
[nextSubPath]: {
|
|
260
|
+
$in
|
|
261
|
+
}
|
|
364
262
|
}
|
|
365
263
|
};
|
|
366
264
|
}
|
|
@@ -480,7 +378,7 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
480
378
|
* // Simplified MongoDB result, after finding the matching ingredient IDs
|
|
481
379
|
* { ingredients: { $nin: [unhealthyIngredientID] } }
|
|
482
380
|
* ```
|
|
483
|
-
*/ async function buildHasManyRelationshipSearchParam({
|
|
381
|
+
*/ async function buildHasManyRelationshipSearchParam({ field, locale, nestedWhere, operator, path, payload }) {
|
|
484
382
|
if (field.type !== 'relationship' && field.type !== 'upload' || !field.hasMany || typeof field.relationTo !== 'string' || !isNestedRelationshipQuery(nestedWhere)) {
|
|
485
383
|
return undefined;
|
|
486
384
|
}
|
|
@@ -489,29 +387,14 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
489
387
|
collectionSlug: field.relationTo
|
|
490
388
|
});
|
|
491
389
|
const pathLocale = payload.config.localization ? payload.config.localization.localeCodes.find((localeCode)=>path.split('.').at(-1) === localeCode) : undefined;
|
|
492
|
-
const { branchVisibility, where: relatedWhere } = await resolveRelatedBranchQuery({
|
|
493
|
-
branch,
|
|
494
|
-
collectionSlug: field.relationTo,
|
|
495
|
-
payload,
|
|
496
|
-
req,
|
|
497
|
-
where: nestedWhere
|
|
498
|
-
});
|
|
499
390
|
const matchingRelatedDocumentsQuery = await RelatedModel.buildQuery({
|
|
500
|
-
branch,
|
|
501
391
|
locale: pathLocale ?? locale,
|
|
502
392
|
payload,
|
|
503
|
-
|
|
504
|
-
where: relatedWhere ?? {}
|
|
393
|
+
where: nestedWhere
|
|
505
394
|
});
|
|
506
|
-
const findRelatedDocumentIDs = async (query)=>(await
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
projection: {
|
|
510
|
-
_id: true,
|
|
511
|
-
_branchDocID: true
|
|
512
|
-
},
|
|
513
|
-
query
|
|
514
|
-
})).map((document)=>document._branchDocID ?? document._id);
|
|
395
|
+
const findRelatedDocumentIDs = async (query)=>(await RelatedModel.find(query).lean().select({
|
|
396
|
+
_id: true
|
|
397
|
+
})).map((document)=>document._id);
|
|
515
398
|
switch(operator){
|
|
516
399
|
case 'contains':
|
|
517
400
|
{
|
|
@@ -526,7 +409,7 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
526
409
|
case 'equals':
|
|
527
410
|
{
|
|
528
411
|
// Every related document satisfies an empty nested query.
|
|
529
|
-
if (!Object.keys(
|
|
412
|
+
if (!Object.keys(matchingRelatedDocumentsQuery).length) {
|
|
530
413
|
return {
|
|
531
414
|
path,
|
|
532
415
|
value: {
|
|
@@ -567,7 +450,7 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
567
450
|
* `on` relationship to collect the parent IDs those documents point back to. Because the nested
|
|
568
451
|
* query resolves against a single joined document, the user's filter and any injected access
|
|
569
452
|
* constraint must be satisfied by the same document.
|
|
570
|
-
*/ async function buildJoinContainsSearchParam({
|
|
453
|
+
*/ async function buildJoinContainsSearchParam({ field, locale, nestedWhere, payload }) {
|
|
571
454
|
if (field.type !== 'join' || typeof field.collection !== 'string' || !isNestedRelationshipQuery(nestedWhere)) {
|
|
572
455
|
return undefined;
|
|
573
456
|
}
|
|
@@ -586,26 +469,12 @@ const findRelatedDistinctValues = async ({ branchVisibility, Model, path, query
|
|
|
586
469
|
if (relationshipField.pathHasLocalized && payload.config.localization) {
|
|
587
470
|
joinPath = joinPath.replace('<locale>', locale || payload.config.localization.defaultLocale);
|
|
588
471
|
}
|
|
589
|
-
const { branchVisibility, where: relatedWhere } = await resolveRelatedBranchQuery({
|
|
590
|
-
branch,
|
|
591
|
-
collectionSlug: field.collection,
|
|
592
|
-
payload,
|
|
593
|
-
req,
|
|
594
|
-
where: nestedWhere
|
|
595
|
-
});
|
|
596
472
|
const subQuery = await JoinedModel.buildQuery({
|
|
597
|
-
branch,
|
|
598
473
|
locale,
|
|
599
474
|
payload,
|
|
600
|
-
|
|
601
|
-
where: relatedWhere ?? {}
|
|
602
|
-
});
|
|
603
|
-
const parentIDs = await findRelatedDistinctValues({
|
|
604
|
-
branchVisibility,
|
|
605
|
-
Model: JoinedModel,
|
|
606
|
-
path: joinPath,
|
|
607
|
-
query: subQuery
|
|
475
|
+
where: nestedWhere
|
|
608
476
|
});
|
|
477
|
+
const parentIDs = await JoinedModel.distinct(joinPath, subQuery);
|
|
609
478
|
return {
|
|
610
479
|
path: '_id',
|
|
611
480
|
value: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/queries/buildSearchParams.ts"],"sourcesContent":["import type { PipelineStage, QueryFilter } from 'mongoose'\nimport type {\n FlattenedField,\n HasManyRelationshipOperator,\n Operator,\n PathToQuery,\n Payload,\n PayloadRequest,\n Where,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport {\n APIError,\n escapeRegExp,\n getFieldByPath,\n getLocalizedPaths,\n resolveBranchQuery,\n resolveBranchReadState,\n rewriteBranchIDs,\n} from 'payload'\nimport {\n hasManyRelationshipOperatorSet,\n isNestedRelationshipQuery,\n validOperatorSet,\n} from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\nimport type { CollectionModel } from '../types.js'\nimport type { OperatorMapKey } from './operatorMap.js'\n\nimport { getCollection } from '../utilities/getEntity.js'\nimport { isObjectID } from '../utilities/isObjectID.js'\nimport { buildBranchVisibilityStages } from './buildBranchVisibility.js'\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype SearchParam = {\n path?: string\n rawQuery?: unknown\n value?: unknown\n}\n\nconst resolveRelatedBranchQuery = async ({\n branch,\n collectionSlug,\n payload,\n req,\n where,\n}: {\n branch?: false | string\n collectionSlug: string\n payload: Payload\n req?: Partial<PayloadRequest>\n where: Where\n}) => {\n const adapter = payload.db as MongooseAdapter\n const branchReadState = resolveBranchReadState({ branch, collectionSlug, req })\n const resolvedWhere = branchReadState.useBranching\n ? rewriteBranchIDs(where)\n : await resolveBranchQuery({ branch, collectionSlug, req, where })\n\n return {\n branchVisibility: branchReadState.useBranching\n ? buildBranchVisibilityStages({\n adapter,\n branch: branchReadState.branch,\n collectionSlug,\n })\n : [],\n where: resolvedWhere ?? {},\n }\n}\n\nconst findRelatedDocuments = async ({\n branchVisibility,\n Model,\n projection,\n query,\n}: {\n branchVisibility: PipelineStage[]\n Model: CollectionModel\n projection: Record<string, boolean>\n query: Record<string, unknown>\n}) => {\n if (branchVisibility.length) {\n return Model.aggregate([{ $match: query }, ...branchVisibility, { $project: projection }])\n }\n\n return Model.find(query).lean().select(projection)\n}\n\nconst findRelatedDistinctValues = async ({\n branchVisibility,\n Model,\n path,\n query,\n}: {\n branchVisibility: PipelineStage[]\n Model: CollectionModel\n path: string\n query: Record<string, unknown>\n}) => {\n if (!branchVisibility.length) {\n return Model.distinct(path, query)\n }\n\n return Model.aggregate([\n { $match: query },\n ...branchVisibility,\n { $project: { value: `$${path}` } },\n { $unwind: '$value' },\n { $group: { _id: '$value' } },\n ]).then((results) => results.map(({ _id }) => _id))\n}\n\n/**\n * Convert the Payload key / value / operator into a MongoDB query\n */\nexport async function buildSearchParam({\n branch,\n collectionSlug,\n fields,\n globalSlug,\n incomingPath,\n locale,\n operator,\n parentIsLocalized,\n payload,\n req,\n val,\n}: {\n branch?: false | string\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n incomingPath: string\n locale?: string\n operator: Operator\n parentIsLocalized: boolean\n payload: Payload\n req?: Partial<PayloadRequest>\n val: unknown\n}): Promise<SearchParam | undefined> {\n // Replace GraphQL nested field double underscore formatting\n let sanitizedPath = incomingPath.replace(/__/g, '.')\n if (sanitizedPath === 'id') {\n sanitizedPath = '_id'\n }\n\n let paths: PathToQuery[] = []\n\n let hasCustomID = false\n\n if (sanitizedPath === '_id') {\n const customIDFieldType = collectionSlug\n ? payload.collections[collectionSlug]?.customIDType\n : undefined\n\n let idFieldType: 'number' | 'text' = 'text'\n\n if (customIDFieldType) {\n idFieldType = customIDFieldType\n hasCustomID = true\n }\n\n paths.push({\n collectionSlug,\n complete: true,\n field: {\n name: 'id',\n type: idFieldType,\n } as FlattenedField,\n parentIsLocalized: parentIsLocalized ?? false,\n path: '_id',\n })\n } else {\n paths = getLocalizedPaths({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath: sanitizedPath,\n locale,\n parentIsLocalized,\n payload,\n })\n }\n\n if (!paths[0]) {\n return undefined\n }\n\n const [{ field, path }] = paths\n\n if (\n hasManyRelationshipOperatorSet.has(operator as HasManyRelationshipOperator) &&\n paths.length === 1 &&\n (field.type === 'relationship' || field.type === 'upload') &&\n field.hasMany &&\n typeof field.relationTo === 'string' &&\n isNestedRelationshipQuery(val)\n ) {\n return buildHasManyRelationshipSearchParam({\n branch,\n field,\n locale,\n nestedWhere: val,\n operator: operator as HasManyRelationshipOperator,\n path,\n payload,\n req,\n })\n }\n\n if (\n operator === 'contains' &&\n paths.length === 1 &&\n field.type === 'join' &&\n typeof field.collection === 'string' &&\n isNestedRelationshipQuery(val)\n ) {\n return buildJoinContainsSearchParam({\n branch,\n field,\n locale,\n nestedWhere: val,\n payload,\n req,\n })\n }\n\n if (\n (operator === 'contains' || operator === 'like' || operator === 'not_like') &&\n (isNestedRelationshipQuery(val) ||\n (Array.isArray(val) && val.some((entry) => isNestedRelationshipQuery(entry))))\n ) {\n throw new APIError(`Invalid value for \"${operator}\" on path \"${path}\": expected a string.`, 400)\n }\n\n if (path) {\n const sanitizedQueryValue = sanitizeQueryValue({\n field,\n hasCustomID,\n locale,\n operator,\n parentIsLocalized,\n path,\n payload,\n val,\n })\n\n if (!sanitizedQueryValue) {\n return undefined\n }\n\n const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizedQueryValue\n\n if (rawQuery && paths.length === 1) {\n return { value: rawQuery }\n }\n\n if (!formattedOperator) {\n return undefined\n }\n\n // If there are multiple collections to search through,\n // Recursively build up a list of query constraints\n if (paths.length > 1) {\n // Remove top collection and reverse array\n // to work backwards from top\n const pathsToQuery = paths.slice(1).reverse()\n const parentPaths = paths.slice(0, -1).reverse()\n\n let relationshipQuery: SearchParam = { value: {} }\n let relationshipWhere: undefined | Where\n\n for (const [i, { collectionSlug, path: subPath }] of pathsToQuery.entries()) {\n // The arrays are reversed together, so both entries describe the same relationship hop.\n const parentField = parentPaths[i]?.field\n\n if (!parentField) {\n return undefined\n }\n\n if (!collectionSlug) {\n throw new APIError(`Collection with the slug ${collectionSlug} was not found.`)\n }\n\n const { collectionConfig, Model: SubModel } = getCollection({\n adapter: payload.db as MongooseAdapter,\n collectionSlug,\n })\n\n if (i === 0) {\n const { branchVisibility, where: relatedWhere } = await resolveRelatedBranchQuery({\n branch,\n collectionSlug,\n payload,\n req,\n where: {\n [subPath]: {\n [formattedOperator]: val,\n },\n },\n })\n const subQuery = await SubModel.buildQuery({\n branch,\n locale,\n payload,\n req,\n where: relatedWhere ?? {},\n })\n\n const select: Record<string, boolean> = {\n _id: true,\n _branchDocID: true,\n }\n\n let joinPath: null | string = null\n\n if (parentField.type === 'join') {\n const relationshipField = getFieldByPath({\n fields: collectionConfig.flattenedFields,\n path: parentField.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship field was not found')\n }\n\n let path = relationshipField.localizedPath\n if (relationshipField.pathHasLocalized && payload.config.localization) {\n path = path.replace('<locale>', locale || payload.config.localization.defaultLocale)\n }\n select[path] = true\n\n joinPath = path\n }\n\n if (joinPath) {\n select[joinPath] = true\n }\n\n const result = await findRelatedDocuments({\n branchVisibility,\n Model: SubModel,\n projection: select,\n query: subQuery,\n })\n\n const $in: unknown[] = []\n\n result.forEach((doc: any) => {\n if (joinPath) {\n let ref = doc\n\n for (const segment of joinPath.split('.')) {\n if (Array.isArray(ref)) {\n ref = ref\n .map((item) => (typeof item === 'object' && item ? item[segment] : undefined))\n .flat()\n .filter((item) => item != null)\n } else if (typeof ref === 'object' && ref) {\n ref = ref[segment]\n } else {\n ref = undefined\n break\n }\n }\n\n if (Array.isArray(ref)) {\n for (const item of ref) {\n if (isObjectID(item)) {\n $in.push(item)\n }\n }\n } else if (isObjectID(ref)) {\n $in.push(ref)\n }\n } else {\n const documentID = doc._branchDocID ?? doc._id\n const stringID = documentID.toString()\n if (Types.ObjectId.isValid(stringID)) {\n $in.push(documentID)\n } else {\n $in.push(stringID)\n }\n }\n })\n\n if (pathsToQuery.length === 1) {\n return {\n path: joinPath ? '_id' : path,\n value: { $in },\n }\n }\n\n const nextSubPath = pathsToQuery[i + 1]?.path\n\n if (nextSubPath) {\n relationshipWhere = joinPath ? { id: { in: $in } } : { [nextSubPath]: { in: $in } }\n }\n\n continue\n }\n\n if (!relationshipWhere) {\n return undefined\n }\n\n const { branchVisibility, where: relatedWhere } = await resolveRelatedBranchQuery({\n branch,\n collectionSlug,\n payload,\n req,\n where: relationshipWhere,\n })\n const subQuery = (await SubModel.buildQuery({\n branch,\n locale,\n payload,\n req,\n where: relatedWhere ?? {},\n })) as QueryFilter<any>\n\n /**\n * Follow this join back to its parent IDs.\n * For example, matching songs yield album IDs, then artist IDs.\n */\n if (parentField.type === 'join') {\n const relationshipField = getFieldByPath({\n fields: collectionConfig.flattenedFields,\n path: parentField.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship field was not found')\n }\n\n let joinPath = relationshipField.localizedPath\n if (relationshipField.pathHasLocalized && payload.config.localization) {\n joinPath = joinPath.replace(\n '<locale>',\n locale || payload.config.localization.defaultLocale,\n )\n }\n\n const $in = await findRelatedDistinctValues({\n branchVisibility,\n Model: SubModel,\n path: joinPath,\n query: subQuery,\n })\n if (i + 1 === pathsToQuery.length) {\n return { path: '_id', value: { $in } }\n }\n\n relationshipWhere = { id: { in: $in } }\n continue\n }\n\n const result = await findRelatedDocuments({\n branchVisibility,\n Model: SubModel,\n projection: { _id: true, _branchDocID: true },\n query: subQuery,\n })\n\n const $in = result.map((doc) => doc._branchDocID ?? doc._id)\n\n // If it is the last recursion\n // then pass through the search param\n if (i + 1 === pathsToQuery.length) {\n relationshipQuery = {\n path,\n value: { $in },\n }\n } else {\n const nextSubPath = pathsToQuery[i + 1]?.path\n if (nextSubPath) {\n relationshipWhere = { [nextSubPath]: { in: $in } }\n }\n }\n }\n\n return relationshipQuery\n }\n\n if (formattedOperator && validOperatorSet.has(formattedOperator as Operator)) {\n const operatorKey = operatorMap[formattedOperator as OperatorMapKey]\n\n if (field.type === 'relationship' || field.type === 'upload') {\n let hasNumberIDRelation\n let multiIDCondition = '$or'\n if (operatorKey === '$ne') {\n multiIDCondition = '$and'\n }\n\n const result = {\n value: {\n [multiIDCondition]: [{ [path]: { [operatorKey]: formattedValue } }],\n },\n }\n\n if (typeof formattedValue === 'string') {\n if (Types.ObjectId.isValid(formattedValue)) {\n result.value[multiIDCondition]?.push({\n [path]: { [operatorKey]: new Types.ObjectId(formattedValue) },\n })\n } else {\n ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach(\n (relationTo) => {\n const isRelatedToCustomNumberID =\n payload.collections[relationTo]?.customIDType === 'number'\n\n if (isRelatedToCustomNumberID) {\n hasNumberIDRelation = true\n }\n },\n )\n\n if (hasNumberIDRelation) {\n result.value[multiIDCondition]?.push({\n [path]: { [operatorKey]: parseFloat(formattedValue) },\n })\n }\n }\n }\n\n const length = result.value[multiIDCondition]?.length\n\n if (typeof length === 'number' && length > 1) {\n return result\n }\n }\n\n if (formattedOperator === 'like' && typeof formattedValue === 'string') {\n const words = formattedValue.split(' ')\n\n const result = {\n value: {\n $and: words.map((word) => ({\n [path]: {\n $options: 'i',\n $regex: escapeRegExp(word),\n },\n })),\n },\n }\n\n return result\n }\n\n if (formattedOperator === 'not_like' && typeof formattedValue === 'string') {\n const words = formattedValue.split(' ')\n\n const result = {\n value: {\n $and: words.map((word) => ({\n [path]: {\n $not: {\n $options: 'i',\n $regex: escapeRegExp(word),\n },\n },\n })),\n },\n }\n\n return result\n }\n\n // Some operators like 'near' need to define a full query\n // so if there is no operator key, just return the value\n if (!operatorKey) {\n return {\n path,\n value: formattedValue,\n }\n }\n\n return {\n path,\n value: { [operatorKey]: formattedValue },\n }\n }\n }\n return undefined\n}\n\n/**\n * Builds a MongoDB condition for an operator containing a nested has-many relationship query.\n *\n * First, it finds IDs from the related collection that match the nested query. The parent\n * collection can then use `$in` or `$nin` against its stored relationship IDs.\n *\n * @example\n * ```ts\n * // Input\n * { ingredients: { not_equals: { isHealthy: { equals: false } } } }\n *\n * // Simplified MongoDB result, after finding the matching ingredient IDs\n * { ingredients: { $nin: [unhealthyIngredientID] } }\n * ```\n */\nasync function buildHasManyRelationshipSearchParam({\n branch,\n field,\n locale,\n nestedWhere,\n operator,\n path,\n payload,\n req,\n}: {\n branch?: false | string\n field: FlattenedField\n locale?: string\n nestedWhere: unknown\n operator: HasManyRelationshipOperator\n path: string\n payload: Payload\n req?: Partial<PayloadRequest>\n}): Promise<SearchParam | undefined> {\n if (\n (field.type !== 'relationship' && field.type !== 'upload') ||\n !field.hasMany ||\n typeof field.relationTo !== 'string' ||\n !isNestedRelationshipQuery(nestedWhere)\n ) {\n return undefined\n }\n\n const { Model: RelatedModel } = getCollection({\n adapter: payload.db as MongooseAdapter,\n collectionSlug: field.relationTo,\n })\n const pathLocale = payload.config.localization\n ? payload.config.localization.localeCodes.find(\n (localeCode) => path.split('.').at(-1) === localeCode,\n )\n : undefined\n const { branchVisibility, where: relatedWhere } = await resolveRelatedBranchQuery({\n branch,\n collectionSlug: field.relationTo,\n payload,\n req,\n where: nestedWhere,\n })\n const matchingRelatedDocumentsQuery = await RelatedModel.buildQuery({\n branch,\n locale: pathLocale ?? locale,\n payload,\n req,\n where: relatedWhere ?? {},\n })\n\n const findRelatedDocumentIDs = async (query: Record<string, unknown>) =>\n (\n await findRelatedDocuments({\n branchVisibility,\n Model: RelatedModel,\n projection: { _id: true, _branchDocID: true },\n query,\n })\n ).map((document) => document._branchDocID ?? document._id)\n\n switch (operator) {\n case 'contains': {\n const matchingRelatedDocumentIDs = await findRelatedDocumentIDs(matchingRelatedDocumentsQuery)\n\n return {\n path,\n value: { $in: matchingRelatedDocumentIDs },\n }\n }\n\n case 'equals': {\n // Every related document satisfies an empty nested query.\n if (!Object.keys(nestedWhere).length) {\n return {\n path,\n value: { $nin: [] },\n }\n }\n\n // MongoDB rejects `$near` and `$text` when they are inverted with `$nor`. Check the parent\n // instead: none of its IDs may fall outside the matching IDs.\n const matchingRelatedDocumentIDs = await findRelatedDocumentIDs(matchingRelatedDocumentsQuery)\n\n return {\n path,\n value: { $not: { $elemMatch: { $nin: matchingRelatedDocumentIDs } } },\n }\n }\n\n case 'not_equals': {\n const matchingRelatedDocumentIDs = await findRelatedDocumentIDs(matchingRelatedDocumentsQuery)\n\n return {\n path,\n value: { $nin: matchingRelatedDocumentIDs },\n }\n }\n }\n}\n\n/**\n * Builds a MongoDB condition for a `contains` query nested on a join field.\n *\n * Finds documents in the joined collection that match the nested query, then follows the join's\n * `on` relationship to collect the parent IDs those documents point back to. Because the nested\n * query resolves against a single joined document, the user's filter and any injected access\n * constraint must be satisfied by the same document.\n */\nasync function buildJoinContainsSearchParam({\n branch,\n field,\n locale,\n nestedWhere,\n payload,\n req,\n}: {\n branch?: false | string\n field: FlattenedField\n locale?: string\n nestedWhere: unknown\n payload: Payload\n req?: Partial<PayloadRequest>\n}): Promise<SearchParam | undefined> {\n if (\n field.type !== 'join' ||\n typeof field.collection !== 'string' ||\n !isNestedRelationshipQuery(nestedWhere)\n ) {\n return undefined\n }\n\n const { collectionConfig, Model: JoinedModel } = getCollection({\n adapter: payload.db as MongooseAdapter,\n collectionSlug: field.collection,\n })\n\n const relationshipField = getFieldByPath({\n fields: collectionConfig.flattenedFields,\n path: field.on,\n })\n\n if (!relationshipField) {\n throw new APIError('Relationship field was not found')\n }\n\n let joinPath = relationshipField.localizedPath\n if (relationshipField.pathHasLocalized && payload.config.localization) {\n joinPath = joinPath.replace('<locale>', locale || payload.config.localization.defaultLocale)\n }\n\n const { branchVisibility, where: relatedWhere } = await resolveRelatedBranchQuery({\n branch,\n collectionSlug: field.collection,\n payload,\n req,\n where: nestedWhere,\n })\n const subQuery = await JoinedModel.buildQuery({\n branch,\n locale,\n payload,\n req,\n where: relatedWhere ?? {},\n })\n\n const parentIDs = await findRelatedDistinctValues({\n branchVisibility,\n Model: JoinedModel,\n path: joinPath,\n query: subQuery,\n })\n\n return {\n path: '_id',\n value: { $in: parentIDs },\n }\n}\n"],"names":["Types","APIError","escapeRegExp","getFieldByPath","getLocalizedPaths","resolveBranchQuery","resolveBranchReadState","rewriteBranchIDs","hasManyRelationshipOperatorSet","isNestedRelationshipQuery","validOperatorSet","getCollection","isObjectID","buildBranchVisibilityStages","operatorMap","sanitizeQueryValue","resolveRelatedBranchQuery","branch","collectionSlug","payload","req","where","adapter","db","branchReadState","resolvedWhere","useBranching","branchVisibility","findRelatedDocuments","Model","projection","query","length","aggregate","$match","$project","find","lean","select","findRelatedDistinctValues","path","distinct","value","$unwind","$group","_id","then","results","map","buildSearchParam","fields","globalSlug","incomingPath","locale","operator","parentIsLocalized","val","sanitizedPath","replace","paths","hasCustomID","customIDFieldType","collections","customIDType","undefined","idFieldType","push","complete","field","name","type","has","hasMany","relationTo","buildHasManyRelationshipSearchParam","nestedWhere","collection","buildJoinContainsSearchParam","Array","isArray","some","entry","sanitizedQueryValue","formattedOperator","rawQuery","formattedValue","pathsToQuery","slice","reverse","parentPaths","relationshipQuery","relationshipWhere","i","subPath","entries","parentField","collectionConfig","SubModel","relatedWhere","subQuery","buildQuery","_branchDocID","joinPath","relationshipField","flattenedFields","on","localizedPath","pathHasLocalized","config","localization","defaultLocale","result","$in","forEach","doc","ref","segment","split","item","flat","filter","documentID","stringID","toString","ObjectId","isValid","nextSubPath","id","in","operatorKey","hasNumberIDRelation","multiIDCondition","isRelatedToCustomNumberID","parseFloat","words","$and","word","$options","$regex","$not","RelatedModel","pathLocale","localeCodes","localeCode","at","matchingRelatedDocumentsQuery","findRelatedDocumentIDs","document","matchingRelatedDocumentIDs","Object","keys","$nin","$elemMatch","JoinedModel","parentIDs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/queries/buildSearchParams.ts"],"sourcesContent":["import type { QueryFilter } from 'mongoose'\nimport type {\n FlattenedField,\n HasManyRelationshipOperator,\n Operator,\n PathToQuery,\n Payload,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport { APIError, escapeRegExp, getFieldByPath, getLocalizedPaths } from 'payload'\nimport {\n hasManyRelationshipOperatorSet,\n isNestedRelationshipQuery,\n validOperatorSet,\n} from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\nimport type { OperatorMapKey } from './operatorMap.js'\n\nimport { getCollection } from '../utilities/getEntity.js'\nimport { isObjectID } from '../utilities/isObjectID.js'\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype SearchParam = {\n path?: string\n rawQuery?: unknown\n value?: unknown\n}\n\nconst subQueryOptions = {\n lean: true,\n}\n\n/**\n * Convert the Payload key / value / operator into a MongoDB query\n */\nexport async function buildSearchParam({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath,\n locale,\n operator,\n parentIsLocalized,\n payload,\n val,\n}: {\n collectionSlug?: string\n fields: FlattenedField[]\n globalSlug?: string\n incomingPath: string\n locale?: string\n operator: Operator\n parentIsLocalized: boolean\n payload: Payload\n val: unknown\n}): Promise<SearchParam | undefined> {\n // Replace GraphQL nested field double underscore formatting\n let sanitizedPath = incomingPath.replace(/__/g, '.')\n if (sanitizedPath === 'id') {\n sanitizedPath = '_id'\n }\n\n let paths: PathToQuery[] = []\n\n let hasCustomID = false\n\n if (sanitizedPath === '_id') {\n const customIDFieldType = collectionSlug\n ? payload.collections[collectionSlug]?.customIDType\n : undefined\n\n let idFieldType: 'number' | 'text' = 'text'\n\n if (customIDFieldType) {\n idFieldType = customIDFieldType\n hasCustomID = true\n }\n\n paths.push({\n collectionSlug,\n complete: true,\n field: {\n name: 'id',\n type: idFieldType,\n } as FlattenedField,\n parentIsLocalized: parentIsLocalized ?? false,\n path: '_id',\n })\n } else {\n paths = getLocalizedPaths({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath: sanitizedPath,\n locale,\n parentIsLocalized,\n payload,\n })\n }\n\n if (!paths[0]) {\n return undefined\n }\n\n const [{ field, path }] = paths\n\n if (\n hasManyRelationshipOperatorSet.has(operator as HasManyRelationshipOperator) &&\n paths.length === 1 &&\n (field.type === 'relationship' || field.type === 'upload') &&\n field.hasMany &&\n typeof field.relationTo === 'string' &&\n isNestedRelationshipQuery(val)\n ) {\n return buildHasManyRelationshipSearchParam({\n field,\n locale,\n nestedWhere: val,\n operator: operator as HasManyRelationshipOperator,\n path,\n payload,\n })\n }\n\n if (\n operator === 'contains' &&\n paths.length === 1 &&\n field.type === 'join' &&\n typeof field.collection === 'string' &&\n isNestedRelationshipQuery(val)\n ) {\n return buildJoinContainsSearchParam({\n field,\n locale,\n nestedWhere: val,\n payload,\n })\n }\n\n if (\n (operator === 'contains' || operator === 'like' || operator === 'not_like') &&\n (isNestedRelationshipQuery(val) ||\n (Array.isArray(val) && val.some((entry) => isNestedRelationshipQuery(entry))))\n ) {\n throw new APIError(`Invalid value for \"${operator}\" on path \"${path}\": expected a string.`, 400)\n }\n\n if (path) {\n const sanitizedQueryValue = sanitizeQueryValue({\n field,\n hasCustomID,\n locale,\n operator,\n parentIsLocalized,\n path,\n payload,\n val,\n })\n\n if (!sanitizedQueryValue) {\n return undefined\n }\n\n const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizedQueryValue\n\n if (rawQuery && paths.length === 1) {\n return { value: rawQuery }\n }\n\n if (!formattedOperator) {\n return undefined\n }\n\n // If there are multiple collections to search through,\n // Recursively build up a list of query constraints\n if (paths.length > 1) {\n // Remove top collection and reverse array\n // to work backwards from top\n const pathsToQuery = paths.slice(1).reverse()\n const parentPaths = paths.slice(0, -1).reverse()\n\n let relationshipQuery: SearchParam = {\n value: {},\n }\n\n for (const [i, { collectionSlug, path: subPath }] of pathsToQuery.entries()) {\n // The arrays are reversed together, so both entries describe the same relationship hop.\n const parentField = parentPaths[i]?.field\n\n if (!parentField) {\n return undefined\n }\n\n if (!collectionSlug) {\n throw new APIError(`Collection with the slug ${collectionSlug} was not found.`)\n }\n\n const { collectionConfig, Model: SubModel } = getCollection({\n adapter: payload.db as MongooseAdapter,\n collectionSlug,\n })\n\n if (i === 0) {\n const subQuery = await SubModel.buildQuery({\n locale,\n payload,\n where: {\n [subPath]: {\n [formattedOperator]: val,\n },\n },\n })\n\n const select: Record<string, boolean> = {\n _id: true,\n }\n\n let joinPath: null | string = null\n\n if (parentField.type === 'join') {\n const relationshipField = getFieldByPath({\n fields: collectionConfig.flattenedFields,\n path: parentField.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship field was not found')\n }\n\n let path = relationshipField.localizedPath\n if (relationshipField.pathHasLocalized && payload.config.localization) {\n path = path.replace('<locale>', locale || payload.config.localization.defaultLocale)\n }\n select[path] = true\n\n joinPath = path\n }\n\n if (joinPath) {\n select[joinPath] = true\n }\n\n const result = await SubModel.find(subQuery).lean().select(select)\n\n const $in: unknown[] = []\n\n result.forEach((doc: any) => {\n if (joinPath) {\n let ref = doc\n\n for (const segment of joinPath.split('.')) {\n if (Array.isArray(ref)) {\n ref = ref\n .map((item) => (typeof item === 'object' && item ? item[segment] : undefined))\n .flat()\n .filter((item) => item != null)\n } else if (typeof ref === 'object' && ref) {\n ref = ref[segment]\n } else {\n ref = undefined\n break\n }\n }\n\n if (Array.isArray(ref)) {\n for (const item of ref) {\n if (isObjectID(item)) {\n $in.push(item)\n }\n }\n } else if (isObjectID(ref)) {\n $in.push(ref)\n }\n } else {\n const stringID = doc._id.toString()\n if (Types.ObjectId.isValid(stringID)) {\n $in.push(doc._id)\n } else {\n $in.push(stringID)\n }\n }\n })\n\n if (pathsToQuery.length === 1) {\n return {\n path: joinPath ? '_id' : path,\n value: { $in },\n }\n }\n\n const nextSubPath = pathsToQuery[i + 1]?.path\n\n if (nextSubPath) {\n relationshipQuery = {\n value: joinPath ? { _id: { $in } } : { [nextSubPath]: { $in } },\n }\n }\n\n continue\n }\n\n const subQuery = relationshipQuery.value as QueryFilter<any>\n\n /**\n * Follow this join back to its parent IDs.\n * For example, matching songs yield album IDs, then artist IDs.\n */\n if (parentField.type === 'join') {\n const relationshipField = getFieldByPath({\n fields: collectionConfig.flattenedFields,\n path: parentField.on,\n })\n if (!relationshipField) {\n throw new APIError('Relationship field was not found')\n }\n\n let joinPath = relationshipField.localizedPath\n if (relationshipField.pathHasLocalized && payload.config.localization) {\n joinPath = joinPath.replace(\n '<locale>',\n locale || payload.config.localization.defaultLocale,\n )\n }\n\n const $in = await SubModel.distinct(joinPath, subQuery)\n if (i + 1 === pathsToQuery.length) {\n return { path: '_id', value: { $in } }\n }\n\n relationshipQuery = { value: { _id: { $in } } }\n continue\n }\n\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in = result.map((doc) => doc._id)\n\n // If it is the last recursion\n // then pass through the search param\n if (i + 1 === pathsToQuery.length) {\n relationshipQuery = {\n path,\n value: { $in },\n }\n } else {\n const nextSubPath = pathsToQuery[i + 1]?.path\n if (nextSubPath) {\n relationshipQuery = {\n value: {\n [nextSubPath]: { $in },\n },\n }\n }\n }\n }\n\n return relationshipQuery\n }\n\n if (formattedOperator && validOperatorSet.has(formattedOperator as Operator)) {\n const operatorKey = operatorMap[formattedOperator as OperatorMapKey]\n\n if (field.type === 'relationship' || field.type === 'upload') {\n let hasNumberIDRelation\n let multiIDCondition = '$or'\n if (operatorKey === '$ne') {\n multiIDCondition = '$and'\n }\n\n const result = {\n value: {\n [multiIDCondition]: [{ [path]: { [operatorKey]: formattedValue } }],\n },\n }\n\n if (typeof formattedValue === 'string') {\n if (Types.ObjectId.isValid(formattedValue)) {\n result.value[multiIDCondition]?.push({\n [path]: { [operatorKey]: new Types.ObjectId(formattedValue) },\n })\n } else {\n ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach(\n (relationTo) => {\n const isRelatedToCustomNumberID =\n payload.collections[relationTo]?.customIDType === 'number'\n\n if (isRelatedToCustomNumberID) {\n hasNumberIDRelation = true\n }\n },\n )\n\n if (hasNumberIDRelation) {\n result.value[multiIDCondition]?.push({\n [path]: { [operatorKey]: parseFloat(formattedValue) },\n })\n }\n }\n }\n\n const length = result.value[multiIDCondition]?.length\n\n if (typeof length === 'number' && length > 1) {\n return result\n }\n }\n\n if (formattedOperator === 'like' && typeof formattedValue === 'string') {\n const words = formattedValue.split(' ')\n\n const result = {\n value: {\n $and: words.map((word) => ({\n [path]: {\n $options: 'i',\n $regex: escapeRegExp(word),\n },\n })),\n },\n }\n\n return result\n }\n\n if (formattedOperator === 'not_like' && typeof formattedValue === 'string') {\n const words = formattedValue.split(' ')\n\n const result = {\n value: {\n $and: words.map((word) => ({\n [path]: {\n $not: {\n $options: 'i',\n $regex: escapeRegExp(word),\n },\n },\n })),\n },\n }\n\n return result\n }\n\n // Some operators like 'near' need to define a full query\n // so if there is no operator key, just return the value\n if (!operatorKey) {\n return {\n path,\n value: formattedValue,\n }\n }\n\n return {\n path,\n value: { [operatorKey]: formattedValue },\n }\n }\n }\n return undefined\n}\n\n/**\n * Builds a MongoDB condition for an operator containing a nested has-many relationship query.\n *\n * First, it finds IDs from the related collection that match the nested query. The parent\n * collection can then use `$in` or `$nin` against its stored relationship IDs.\n *\n * @example\n * ```ts\n * // Input\n * { ingredients: { not_equals: { isHealthy: { equals: false } } } }\n *\n * // Simplified MongoDB result, after finding the matching ingredient IDs\n * { ingredients: { $nin: [unhealthyIngredientID] } }\n * ```\n */\nasync function buildHasManyRelationshipSearchParam({\n field,\n locale,\n nestedWhere,\n operator,\n path,\n payload,\n}: {\n field: FlattenedField\n locale?: string\n nestedWhere: unknown\n operator: HasManyRelationshipOperator\n path: string\n payload: Payload\n}): Promise<SearchParam | undefined> {\n if (\n (field.type !== 'relationship' && field.type !== 'upload') ||\n !field.hasMany ||\n typeof field.relationTo !== 'string' ||\n !isNestedRelationshipQuery(nestedWhere)\n ) {\n return undefined\n }\n\n const { Model: RelatedModel } = getCollection({\n adapter: payload.db as MongooseAdapter,\n collectionSlug: field.relationTo,\n })\n const pathLocale = payload.config.localization\n ? payload.config.localization.localeCodes.find(\n (localeCode) => path.split('.').at(-1) === localeCode,\n )\n : undefined\n const matchingRelatedDocumentsQuery = await RelatedModel.buildQuery({\n locale: pathLocale ?? locale,\n payload,\n where: nestedWhere,\n })\n\n const findRelatedDocumentIDs = async (query: Record<string, unknown>) =>\n (await RelatedModel.find(query).lean().select({ _id: true })).map((document) => document._id)\n\n switch (operator) {\n case 'contains': {\n const matchingRelatedDocumentIDs = await findRelatedDocumentIDs(matchingRelatedDocumentsQuery)\n\n return {\n path,\n value: { $in: matchingRelatedDocumentIDs },\n }\n }\n\n case 'equals': {\n // Every related document satisfies an empty nested query.\n if (!Object.keys(matchingRelatedDocumentsQuery).length) {\n return {\n path,\n value: { $nin: [] },\n }\n }\n\n // MongoDB rejects `$near` and `$text` when they are inverted with `$nor`. Check the parent\n // instead: none of its IDs may fall outside the matching IDs.\n const matchingRelatedDocumentIDs = await findRelatedDocumentIDs(matchingRelatedDocumentsQuery)\n\n return {\n path,\n value: { $not: { $elemMatch: { $nin: matchingRelatedDocumentIDs } } },\n }\n }\n\n case 'not_equals': {\n const matchingRelatedDocumentIDs = await findRelatedDocumentIDs(matchingRelatedDocumentsQuery)\n\n return {\n path,\n value: { $nin: matchingRelatedDocumentIDs },\n }\n }\n }\n}\n\n/**\n * Builds a MongoDB condition for a `contains` query nested on a join field.\n *\n * Finds documents in the joined collection that match the nested query, then follows the join's\n * `on` relationship to collect the parent IDs those documents point back to. Because the nested\n * query resolves against a single joined document, the user's filter and any injected access\n * constraint must be satisfied by the same document.\n */\nasync function buildJoinContainsSearchParam({\n field,\n locale,\n nestedWhere,\n payload,\n}: {\n field: FlattenedField\n locale?: string\n nestedWhere: unknown\n payload: Payload\n}): Promise<SearchParam | undefined> {\n if (\n field.type !== 'join' ||\n typeof field.collection !== 'string' ||\n !isNestedRelationshipQuery(nestedWhere)\n ) {\n return undefined\n }\n\n const { collectionConfig, Model: JoinedModel } = getCollection({\n adapter: payload.db as MongooseAdapter,\n collectionSlug: field.collection,\n })\n\n const relationshipField = getFieldByPath({\n fields: collectionConfig.flattenedFields,\n path: field.on,\n })\n\n if (!relationshipField) {\n throw new APIError('Relationship field was not found')\n }\n\n let joinPath = relationshipField.localizedPath\n if (relationshipField.pathHasLocalized && payload.config.localization) {\n joinPath = joinPath.replace('<locale>', locale || payload.config.localization.defaultLocale)\n }\n\n const subQuery = await JoinedModel.buildQuery({\n locale,\n payload,\n where: nestedWhere,\n })\n\n const parentIDs = await JoinedModel.distinct(joinPath, subQuery)\n\n return {\n path: '_id',\n value: { $in: parentIDs },\n }\n}\n"],"names":["Types","APIError","escapeRegExp","getFieldByPath","getLocalizedPaths","hasManyRelationshipOperatorSet","isNestedRelationshipQuery","validOperatorSet","getCollection","isObjectID","operatorMap","sanitizeQueryValue","subQueryOptions","lean","buildSearchParam","collectionSlug","fields","globalSlug","incomingPath","locale","operator","parentIsLocalized","payload","val","sanitizedPath","replace","paths","hasCustomID","customIDFieldType","collections","customIDType","undefined","idFieldType","push","complete","field","name","type","path","has","length","hasMany","relationTo","buildHasManyRelationshipSearchParam","nestedWhere","collection","buildJoinContainsSearchParam","Array","isArray","some","entry","sanitizedQueryValue","formattedOperator","rawQuery","formattedValue","value","pathsToQuery","slice","reverse","parentPaths","relationshipQuery","i","subPath","entries","parentField","collectionConfig","Model","SubModel","adapter","db","subQuery","buildQuery","where","select","_id","joinPath","relationshipField","flattenedFields","on","localizedPath","pathHasLocalized","config","localization","defaultLocale","result","find","$in","forEach","doc","ref","segment","split","map","item","flat","filter","stringID","toString","ObjectId","isValid","nextSubPath","distinct","operatorKey","hasNumberIDRelation","multiIDCondition","isRelatedToCustomNumberID","parseFloat","words","$and","word","$options","$regex","$not","RelatedModel","pathLocale","localeCodes","localeCode","at","matchingRelatedDocumentsQuery","findRelatedDocumentIDs","query","document","matchingRelatedDocumentIDs","Object","keys","$nin","$elemMatch","JoinedModel","parentIDs"],"mappings":"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"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import type { FlattenedField, Payload,
|
|
1
|
+
import type { FlattenedField, Payload, Where } from 'payload';
|
|
2
2
|
type GetBuildQueryPluginArgs = {
|
|
3
3
|
collectionSlug?: string;
|
|
4
4
|
versionsFields?: FlattenedField[];
|
|
5
5
|
};
|
|
6
6
|
export type BuildQueryArgs = {
|
|
7
|
-
branch?: false | string;
|
|
8
7
|
globalSlug?: string;
|
|
9
8
|
locale?: string;
|
|
10
9
|
payload: Payload;
|
|
11
|
-
req?: Partial<PayloadRequest>;
|
|
12
10
|
where: Where;
|
|
13
11
|
};
|
|
14
12
|
export declare const getBuildQueryPlugin: ({ collectionSlug, versionsFields, }?: GetBuildQueryPluginArgs) => (schema: any) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBuildQueryPlugin.d.ts","sourceRoot":"","sources":["../../src/queries/getBuildQueryPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"getBuildQueryPlugin.d.ts","sourceRoot":"","sources":["../../src/queries/getBuildQueryPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAM7D,KAAK,uBAAuB,GAAG;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,cAAc,EAAE,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAKD,eAAO,MAAM,mBAAmB,yCAG7B,uBAAuB,cACiB,GAAG,SAmD7C,CAAA"}
|
|
@@ -6,7 +6,7 @@ import { parseParams } from './parseParams.js';
|
|
|
6
6
|
export const getBuildQueryPlugin = ({ collectionSlug, versionsFields } = {})=>{
|
|
7
7
|
return function buildQueryPlugin(schema) {
|
|
8
8
|
const modifiedSchema = schema;
|
|
9
|
-
async function schemaBuildQuery({
|
|
9
|
+
async function schemaBuildQuery({ globalSlug, locale, payload, where }) {
|
|
10
10
|
let fields = null;
|
|
11
11
|
if (versionsFields) {
|
|
12
12
|
fields = versionsFields;
|
|
@@ -30,14 +30,12 @@ export const getBuildQueryPlugin = ({ collectionSlug, versionsFields } = {})=>{
|
|
|
30
30
|
throw new APIError('Fields are not initialized.');
|
|
31
31
|
}
|
|
32
32
|
const result = await parseParams({
|
|
33
|
-
branch,
|
|
34
33
|
collectionSlug,
|
|
35
34
|
fields,
|
|
36
35
|
globalSlug,
|
|
37
36
|
locale,
|
|
38
37
|
parentIsLocalized: false,
|
|
39
38
|
payload,
|
|
40
|
-
req,
|
|
41
39
|
where
|
|
42
40
|
});
|
|
43
41
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/queries/getBuildQueryPlugin.ts"],"sourcesContent":["import type { FlattenedField, Payload,
|
|
1
|
+
{"version":3,"sources":["../../src/queries/getBuildQueryPlugin.ts"],"sourcesContent":["import type { FlattenedField, Payload, Where } from 'payload'\n\nimport { APIError } from 'payload'\n\nimport { parseParams } from './parseParams.js'\n\ntype GetBuildQueryPluginArgs = {\n collectionSlug?: string\n versionsFields?: FlattenedField[]\n}\n\nexport type BuildQueryArgs = {\n globalSlug?: string\n locale?: string\n payload: Payload\n where: Where\n}\n\n// This plugin asynchronously builds a list of Mongoose query constraints\n// which can then be used in subsequent Mongoose queries.\n// Deprecated in favor of using simpler buildQuery directly\nexport const getBuildQueryPlugin = ({\n collectionSlug,\n versionsFields,\n}: GetBuildQueryPluginArgs = {}) => {\n return function buildQueryPlugin(schema: any) {\n const modifiedSchema = schema\n async function schemaBuildQuery({\n globalSlug,\n locale,\n payload,\n where,\n }: BuildQueryArgs): Promise<Record<string, unknown>> {\n let fields: FlattenedField[] | null = null\n\n if (versionsFields) {\n fields = versionsFields\n } else {\n if (globalSlug) {\n const globalConfig = payload.globals.config.find(({ slug }) => slug === globalSlug)\n\n if (!globalConfig) {\n throw new APIError(`Global with the slug ${globalSlug} was not found`)\n }\n\n fields = globalConfig.flattenedFields\n }\n if (collectionSlug) {\n const collectionConfig = payload.collections[collectionSlug]?.config\n\n if (!collectionConfig) {\n throw new APIError(`Collection with the slug ${globalSlug} was not found`)\n }\n\n fields = collectionConfig.flattenedFields\n }\n }\n\n if (fields === null) {\n throw new APIError('Fields are not initialized.')\n }\n\n const result = await parseParams({\n collectionSlug,\n fields,\n globalSlug,\n locale,\n parentIsLocalized: false,\n payload,\n where,\n })\n\n return result\n }\n modifiedSchema.statics.buildQuery = schemaBuildQuery\n }\n}\n"],"names":["APIError","parseParams","getBuildQueryPlugin","collectionSlug","versionsFields","buildQueryPlugin","schema","modifiedSchema","schemaBuildQuery","globalSlug","locale","payload","where","fields","globalConfig","globals","config","find","slug","flattenedFields","collectionConfig","collections","result","parentIsLocalized","statics","buildQuery"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,UAAS;AAElC,SAASC,WAAW,QAAQ,mBAAkB;AAc9C,yEAAyE;AACzE,yDAAyD;AACzD,2DAA2D;AAC3D,OAAO,MAAMC,sBAAsB,CAAC,EAClCC,cAAc,EACdC,cAAc,EACU,GAAG,CAAC,CAAC;IAC7B,OAAO,SAASC,iBAAiBC,MAAW;QAC1C,MAAMC,iBAAiBD;QACvB,eAAeE,iBAAiB,EAC9BC,UAAU,EACVC,MAAM,EACNC,OAAO,EACPC,KAAK,EACU;YACf,IAAIC,SAAkC;YAEtC,IAAIT,gBAAgB;gBAClBS,SAAST;YACX,OAAO;gBACL,IAAIK,YAAY;oBACd,MAAMK,eAAeH,QAAQI,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAAST;oBAExE,IAAI,CAACK,cAAc;wBACjB,MAAM,IAAId,SAAS,CAAC,qBAAqB,EAAES,WAAW,cAAc,CAAC;oBACvE;oBAEAI,SAASC,aAAaK,eAAe;gBACvC;gBACA,IAAIhB,gBAAgB;oBAClB,MAAMiB,mBAAmBT,QAAQU,WAAW,CAAClB,eAAe,EAAEa;oBAE9D,IAAI,CAACI,kBAAkB;wBACrB,MAAM,IAAIpB,SAAS,CAAC,yBAAyB,EAAES,WAAW,cAAc,CAAC;oBAC3E;oBAEAI,SAASO,iBAAiBD,eAAe;gBAC3C;YACF;YAEA,IAAIN,WAAW,MAAM;gBACnB,MAAM,IAAIb,SAAS;YACrB;YAEA,MAAMsB,SAAS,MAAMrB,YAAY;gBAC/BE;gBACAU;gBACAJ;gBACAC;gBACAa,mBAAmB;gBACnBZ;gBACAC;YACF;YAEA,OAAOU;QACT;QACAf,eAAeiB,OAAO,CAACC,UAAU,GAAGjB;IACtC;AACF,EAAC"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import type { FlattenedField, Payload,
|
|
2
|
-
export declare function parseParams({
|
|
3
|
-
branch?: false | string;
|
|
1
|
+
import type { FlattenedField, Payload, Where } from 'payload';
|
|
2
|
+
export declare function parseParams({ collectionSlug, fields, globalSlug, locale, parentIsLocalized, payload, where, }: {
|
|
4
3
|
collectionSlug?: string;
|
|
5
4
|
fields: FlattenedField[];
|
|
6
5
|
globalSlug?: string;
|
|
7
6
|
locale?: string;
|
|
8
7
|
parentIsLocalized: boolean;
|
|
9
8
|
payload: Payload;
|
|
10
|
-
req?: Partial<PayloadRequest>;
|
|
11
9
|
where: Where;
|
|
12
10
|
}): Promise<Record<string, unknown>>;
|
|
13
11
|
//# sourceMappingURL=parseParams.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseParams.d.ts","sourceRoot":"","sources":["../../src/queries/parseParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAY,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"parseParams.d.ts","sourceRoot":"","sources":["../../src/queries/parseParams.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAY,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAQvE,wBAAsB,WAAW,CAAC,EAChC,cAAc,EACd,MAAM,EACN,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,OAAO,EACP,KAAK,GACN,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqFnC"}
|