@payloadcms/db-mongodb 3.0.0-alpha.7 → 3.0.0-alpha.70
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/README.md +0 -2
- package/dist/connect.d.ts.map +1 -1
- package/dist/connect.js +20 -25
- package/dist/connect.js.map +1 -0
- package/dist/count.d.ts +3 -0
- package/dist/count.d.ts.map +1 -0
- package/dist/count.js +33 -0
- package/dist/count.js.map +1 -0
- package/dist/create.js +6 -21
- package/dist/create.js.map +1 -0
- package/dist/createGlobal.js +6 -21
- package/dist/createGlobal.js.map +1 -0
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +4 -14
- package/dist/createGlobalVersion.js.map +1 -0
- package/dist/createMigration.d.ts.map +1 -1
- package/dist/createMigration.js +15 -25
- package/dist/createMigration.js.map +1 -0
- package/dist/createVersion.js +4 -14
- package/dist/createVersion.js.map +1 -0
- package/dist/deleteMany.js +4 -14
- package/dist/deleteMany.js.map +1 -0
- package/dist/deleteOne.js +6 -21
- package/dist/deleteOne.js.map +1 -0
- package/dist/deleteVersions.js +4 -14
- package/dist/deleteVersions.js.map +1 -0
- package/dist/destroy.js +5 -21
- package/dist/destroy.js.map +1 -0
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +10 -25
- package/dist/find.js.map +1 -0
- package/dist/findGlobal.js +8 -23
- package/dist/findGlobal.js.map +1 -0
- package/dist/findGlobalVersions.js +12 -27
- package/dist/findGlobalVersions.js.map +1 -0
- package/dist/findOne.js +6 -21
- package/dist/findOne.js.map +1 -0
- package/dist/findVersions.js +10 -25
- package/dist/findVersions.js.map +1 -0
- package/dist/index.d.ts +36 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -80
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +34 -44
- package/dist/init.js.map +1 -0
- package/dist/migrateFresh.d.ts +1 -1
- package/dist/migrateFresh.d.ts.map +1 -1
- package/dist/migrateFresh.js +13 -26
- package/dist/migrateFresh.js.map +1 -0
- package/dist/models/buildCollectionSchema.d.ts +25 -0
- package/dist/models/buildCollectionSchema.d.ts.map +1 -1
- package/dist/models/buildCollectionSchema.js +8 -23
- package/dist/models/buildCollectionSchema.js.map +1 -0
- package/dist/models/buildGlobalModel.d.ts +1 -1
- package/dist/models/buildGlobalModel.d.ts.map +1 -1
- package/dist/models/buildGlobalModel.js +9 -24
- package/dist/models/buildGlobalModel.js.map +1 -0
- package/dist/models/buildSchema.d.ts +26 -2
- package/dist/models/buildSchema.d.ts.map +1 -1
- package/dist/models/buildSchema.js +23 -33
- package/dist/models/buildSchema.js.map +1 -0
- package/dist/queries/buildAndOrConditions.js +4 -14
- package/dist/queries/buildAndOrConditions.js.map +1 -0
- package/dist/queries/buildQuery.js +6 -16
- package/dist/queries/buildQuery.js.map +1 -0
- package/dist/queries/buildSearchParams.d.ts.map +1 -1
- package/dist/queries/buildSearchParams.js +23 -39
- package/dist/queries/buildSearchParams.js.map +1 -0
- package/dist/queries/buildSortParam.d.ts +25 -0
- package/dist/queries/buildSortParam.d.ts.map +1 -1
- package/dist/queries/buildSortParam.js +4 -14
- package/dist/queries/buildSortParam.js.map +1 -0
- package/dist/queries/getLocalizedSortProperty.js +8 -18
- package/dist/queries/getLocalizedSortProperty.js.map +1 -0
- package/dist/queries/getLocalizedSortProperty.spec.js +33 -32
- package/dist/queries/getLocalizedSortProperty.spec.js.map +1 -0
- package/dist/queries/mock.js +1 -2
- package/dist/queries/mock.js.map +1 -0
- package/dist/queries/operatorMap.js +2 -12
- package/dist/queries/operatorMap.js.map +1 -0
- package/dist/queries/parseParams.js +12 -27
- package/dist/queries/parseParams.js.map +1 -0
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/sanitizeQueryValue.js +10 -25
- package/dist/queries/sanitizeQueryValue.js.map +1 -0
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +11 -26
- package/dist/queryDrafts.js.map +1 -0
- package/dist/testCredentials.js +4 -25
- package/dist/testCredentials.js.map +1 -0
- package/dist/transactions/beginTransaction.js +6 -16
- package/dist/transactions/beginTransaction.js.map +1 -0
- package/dist/transactions/commitTransaction.d.ts.map +1 -1
- package/dist/transactions/commitTransaction.js +7 -13
- package/dist/transactions/commitTransaction.js.map +1 -0
- package/dist/transactions/rollbackTransaction.js +2 -12
- package/dist/transactions/rollbackTransaction.js.map +1 -0
- package/dist/types.d.ts +26 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -5
- package/dist/types.js.map +1 -0
- package/dist/updateGlobal.js +6 -21
- package/dist/updateGlobal.js.map +1 -0
- package/dist/updateGlobalVersion.d.ts +1 -1
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +4 -14
- package/dist/updateGlobalVersion.js.map +1 -0
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +8 -23
- package/dist/updateOne.js.map +1 -0
- package/dist/updateVersion.js +4 -14
- package/dist/updateVersion.js.map +1 -0
- package/dist/utilities/getDBName.d.ts +19 -0
- package/dist/utilities/getDBName.d.ts.map +1 -0
- package/dist/utilities/getDBName.js +19 -0
- package/dist/utilities/getDBName.js.map +1 -0
- package/dist/utilities/handleError.js +6 -21
- package/dist/utilities/handleError.js.map +1 -0
- package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
- package/dist/utilities/sanitizeInternalFields.js +2 -12
- package/dist/utilities/sanitizeInternalFields.js.map +1 -0
- package/dist/withSession.d.ts +26 -1
- package/dist/withSession.d.ts.map +1 -1
- package/dist/withSession.js +5 -12
- package/dist/withSession.js.map +1 -0
- package/package.json +25 -21
|
@@ -1,41 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return buildSearchParam;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _bsonobjectid = /*#__PURE__*/ _interop_require_default(require("bson-objectid"));
|
|
12
|
-
const _mongoose = /*#__PURE__*/ _interop_require_default(require("mongoose"));
|
|
13
|
-
const _database = require("payload/database");
|
|
14
|
-
const _types = require("payload/types");
|
|
15
|
-
const _operatorMap = require("./operatorMap");
|
|
16
|
-
const _sanitizeQueryValue = require("./sanitizeQueryValue");
|
|
17
|
-
function _interop_require_default(obj) {
|
|
18
|
-
return obj && obj.__esModule ? obj : {
|
|
19
|
-
default: obj
|
|
20
|
-
};
|
|
21
|
-
}
|
|
1
|
+
import ObjectIdImport from 'bson-objectid';
|
|
2
|
+
import mongoose from 'mongoose';
|
|
3
|
+
import { getLocalizedPaths } from 'payload/database';
|
|
4
|
+
import { validOperators } from 'payload/types';
|
|
5
|
+
import { operatorMap } from './operatorMap.js';
|
|
6
|
+
import { sanitizeQueryValue } from './sanitizeQueryValue.js';
|
|
7
|
+
const ObjectId = ObjectIdImport.default || ObjectIdImport;
|
|
22
8
|
const subQueryOptions = {
|
|
23
9
|
lean: true,
|
|
24
10
|
limit: 50
|
|
25
11
|
};
|
|
26
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Convert the Payload key / value / operator into a MongoDB query
|
|
14
|
+
*/ export async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPath, locale, operator, payload, val }) {
|
|
27
15
|
// Replace GraphQL nested field double underscore formatting
|
|
28
16
|
let sanitizedPath = incomingPath.replace(/__/g, '.');
|
|
29
17
|
if (sanitizedPath === 'id') sanitizedPath = '_id';
|
|
30
18
|
let paths = [];
|
|
31
19
|
let hasCustomID = false;
|
|
32
20
|
if (sanitizedPath === '_id') {
|
|
33
|
-
const
|
|
21
|
+
const customIDFieldType = payload.collections[collectionSlug]?.customIDType;
|
|
34
22
|
let idFieldType = 'text';
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
idFieldType = customIDfield.type;
|
|
38
|
-
}
|
|
23
|
+
if (customIDFieldType) {
|
|
24
|
+
idFieldType = customIDFieldType;
|
|
39
25
|
hasCustomID = true;
|
|
40
26
|
}
|
|
41
27
|
paths.push({
|
|
@@ -48,7 +34,7 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
48
34
|
path: '_id'
|
|
49
35
|
});
|
|
50
36
|
} else {
|
|
51
|
-
paths = await
|
|
37
|
+
paths = await getLocalizedPaths({
|
|
52
38
|
collectionSlug,
|
|
53
39
|
fields,
|
|
54
40
|
globalSlug,
|
|
@@ -59,7 +45,7 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
59
45
|
}
|
|
60
46
|
const [{ field, path }] = paths;
|
|
61
47
|
if (path) {
|
|
62
|
-
const { operator: formattedOperator, rawQuery, val: formattedValue } =
|
|
48
|
+
const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizeQueryValue({
|
|
63
49
|
field,
|
|
64
50
|
hasCustomID,
|
|
65
51
|
operator,
|
|
@@ -98,7 +84,7 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
98
84
|
result.forEach((doc)=>{
|
|
99
85
|
const stringID = doc._id.toString();
|
|
100
86
|
$in.push(stringID);
|
|
101
|
-
if (
|
|
87
|
+
if (mongoose.Types.ObjectId.isValid(stringID)) {
|
|
102
88
|
$in.push(doc._id);
|
|
103
89
|
}
|
|
104
90
|
});
|
|
@@ -142,8 +128,8 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
142
128
|
}, Promise.resolve(initialRelationshipQuery));
|
|
143
129
|
return relationshipQuery;
|
|
144
130
|
}
|
|
145
|
-
if (formattedOperator &&
|
|
146
|
-
const operatorKey =
|
|
131
|
+
if (formattedOperator && validOperators.includes(formattedOperator)) {
|
|
132
|
+
const operatorKey = operatorMap[formattedOperator];
|
|
147
133
|
if (field.type === 'relationship' || field.type === 'upload') {
|
|
148
134
|
let hasNumberIDRelation;
|
|
149
135
|
const result = {
|
|
@@ -158,21 +144,19 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
158
144
|
}
|
|
159
145
|
};
|
|
160
146
|
if (typeof formattedValue === 'string') {
|
|
161
|
-
if (
|
|
147
|
+
if (mongoose.Types.ObjectId.isValid(formattedValue)) {
|
|
162
148
|
result.value.$or.push({
|
|
163
149
|
[path]: {
|
|
164
|
-
[operatorKey]: new
|
|
150
|
+
[operatorKey]: new ObjectId(formattedValue)
|
|
165
151
|
}
|
|
166
152
|
});
|
|
167
153
|
} else {
|
|
168
154
|
(Array.isArray(field.relationTo) ? field.relationTo : [
|
|
169
155
|
field.relationTo
|
|
170
156
|
]).forEach((relationTo)=>{
|
|
171
|
-
const isRelatedToCustomNumberID = payload.collections[relationTo]?.
|
|
172
|
-
return (0, _types.fieldAffectsData)(relatedField) && relatedField.name === 'id' && relatedField.type === 'number';
|
|
173
|
-
});
|
|
157
|
+
const isRelatedToCustomNumberID = payload.collections[relationTo]?.customIDType === 'number';
|
|
174
158
|
if (isRelatedToCustomNumberID) {
|
|
175
|
-
|
|
159
|
+
hasNumberIDRelation = true;
|
|
176
160
|
}
|
|
177
161
|
});
|
|
178
162
|
if (hasNumberIDRelation) result.value.$or.push({
|
|
@@ -219,4 +203,4 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
219
203
|
return undefined;
|
|
220
204
|
}
|
|
221
205
|
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2J1aWxkU2VhcmNoUGFyYW1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF5bG9hZCB9IGZyb20gJ3BheWxvYWQnXG5pbXBvcnQgdHlwZSB7IFBhdGhUb1F1ZXJ5IH0gZnJvbSAncGF5bG9hZC9kYXRhYmFzZSdcbmltcG9ydCB0eXBlIHsgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBPcGVyYXRvciB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5cbmltcG9ydCBPYmplY3RJZCBmcm9tICdic29uLW9iamVjdGlkJ1xuaW1wb3J0IG1vbmdvb3NlIGZyb20gJ21vbmdvb3NlJ1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkUGF0aHMgfSBmcm9tICdwYXlsb2FkL2RhdGFiYXNlJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5pbXBvcnQgeyB2YWxpZE9wZXJhdG9ycyB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5cbmltcG9ydCB0eXBlIHsgTW9uZ29vc2VBZGFwdGVyIH0gZnJvbSAnLi4nXG5cbmltcG9ydCB7IG9wZXJhdG9yTWFwIH0gZnJvbSAnLi9vcGVyYXRvck1hcCdcbmltcG9ydCB7IHNhbml0aXplUXVlcnlWYWx1ZSB9IGZyb20gJy4vc2FuaXRpemVRdWVyeVZhbHVlJ1xuXG50eXBlIFNlYXJjaFBhcmFtID0ge1xuICBwYXRoPzogc3RyaW5nXG4gIHJhd1F1ZXJ5PzogdW5rbm93blxuICB2YWx1ZT86IHVua25vd25cbn1cblxuY29uc3Qgc3ViUXVlcnlPcHRpb25zID0ge1xuICBsZWFuOiB0cnVlLFxuICBsaW1pdDogNTAsXG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgUGF5bG9hZCBrZXkgLyB2YWx1ZSAvIG9wZXJhdG9yIGludG8gYSBNb25nb0RCIHF1ZXJ5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNlYXJjaFBhcmFtKHtcbiAgY29sbGVjdGlvblNsdWcsXG4gIGZpZWxkcyxcbiAgZ2xvYmFsU2x1ZyxcbiAgaW5jb21pbmdQYXRoLFxuICBsb2NhbGUsXG4gIG9wZXJhdG9yLFxuICBwYXlsb2FkLFxuICB2YWwsXG59OiB7XG4gIGNvbGxlY3Rpb25TbHVnPzogc3RyaW5nXG4gIGZpZWxkczogRmllbGRbXVxuICBnbG9iYWxTbHVnPzogc3RyaW5nXG4gIGluY29taW5nUGF0aDogc3RyaW5nXG4gIGxvY2FsZT86IHN0cmluZ1xuICBvcGVyYXRvcjogc3RyaW5nXG4gIHBheWxvYWQ6IFBheWxvYWRcbiAgdmFsOiB1bmtub3duXG59KTogUHJvbWlzZTxTZWFyY2hQYXJhbT4ge1xuICAvLyBSZXBsYWNlIEdyYXBoUUwgbmVzdGVkIGZpZWxkIGRvdWJsZSB1bmRlcnNjb3JlIGZvcm1hdHRpbmdcbiAgbGV0IHNhbml0aXplZFBhdGggPSBpbmNvbWluZ1BhdGgucmVwbGFjZSgvX18vZywgJy4nKVxuICBpZiAoc2FuaXRpemVkUGF0aCA9PT0gJ2lkJykgc2FuaXRpemVkUGF0aCA9ICdfaWQnXG5cbiAgbGV0IHBhdGhzOiBQYXRoVG9RdWVyeVtdID0gW11cblxuICBsZXQgaGFzQ3VzdG9tSUQgPSBmYWxzZVxuXG4gIGlmIChzYW5pdGl6ZWRQYXRoID09PSAnX2lkJykge1xuICAgIGNvbnN0IGN1c3RvbUlEZmllbGQgPSBwYXlsb2FkLmNvbGxlY3Rpb25zW2NvbGxlY3Rpb25TbHVnXT8uY29uZmlnLmZpZWxkcy5maW5kKFxuICAgICAgKGZpZWxkKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZC5uYW1lID09PSAnaWQnLFxuICAgIClcblxuICAgIGxldCBpZEZpZWxkVHlwZTogJ251bWJlcicgfCAndGV4dCcgPSAndGV4dCdcblxuICAgIGlmIChjdXN0b21JRGZpZWxkKSB7XG4gICAgICBpZiAoY3VzdG9tSURmaWVsZD8udHlwZSA9PT0gJ3RleHQnIHx8IGN1c3RvbUlEZmllbGQ/LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlkRmllbGRUeXBlID0gY3VzdG9tSURmaWVsZC50eXBlXG4gICAgICB9XG5cbiAgICAgIGhhc0N1c3RvbUlEID0gdHJ1ZVxuICAgIH1cblxuICAgIHBhdGhzLnB1c2goe1xuICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICBjb21wbGV0ZTogdHJ1ZSxcbiAgICAgIGZpZWxkOiB7XG4gICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgIHR5cGU6IGlkRmllbGRUeXBlLFxuICAgICAgfSBhcyBGaWVsZCxcbiAgICAgIHBhdGg6ICdfaWQnLFxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgcGF0aHMgPSBhd2FpdCBnZXRMb2NhbGl6ZWRQYXRocyh7XG4gICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGdsb2JhbFNsdWcsXG4gICAgICBpbmNvbWluZ1BhdGg6IHNhbml0aXplZFBhdGgsXG4gICAgICBsb2NhbGUsXG4gICAgICBwYXlsb2FkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBbeyBmaWVsZCwgcGF0aCB9XSA9IHBhdGhzXG5cbiAgaWYgKHBhdGgpIHtcbiAgICBjb25zdCB7XG4gICAgICBvcGVyYXRvcjogZm9ybWF0dGVkT3BlcmF0b3IsXG4gICAgICByYXdRdWVyeSxcbiAgICAgIHZhbDogZm9ybWF0dGVkVmFsdWUsXG4gICAgfSA9IHNhbml0aXplUXVlcnlWYWx1ZSh7XG4gICAgICBmaWVsZCxcbiAgICAgIGhhc0N1c3RvbUlELFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBwYXRoLFxuICAgICAgdmFsLFxuICAgIH0pXG5cbiAgICBpZiAocmF3UXVlcnkpIHJldHVybiB7IHZhbHVlOiByYXdRdWVyeSB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29sbGVjdGlvbnMgdG8gc2VhcmNoIHRocm91Z2gsXG4gICAgLy8gUmVjdXJzaXZlbHkgYnVpbGQgdXAgYSBsaXN0IG9mIHF1ZXJ5IGNvbnN0cmFpbnRzXG4gICAgaWYgKHBhdGhzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIFJlbW92ZSB0b3AgY29sbGVjdGlvbiBhbmQgcmV2ZXJzZSBhcnJheVxuICAgICAgLy8gdG8gd29yayBiYWNrd2FyZHMgZnJvbSB0b3BcbiAgICAgIGNvbnN0IHBhdGhzVG9RdWVyeSA9IHBhdGhzLnNsaWNlKDEpLnJldmVyc2UoKVxuXG4gICAgICBjb25zdCBpbml0aWFsUmVsYXRpb25zaGlwUXVlcnkgPSB7XG4gICAgICAgIHZhbHVlOiB7fSxcbiAgICAgIH0gYXMgU2VhcmNoUGFyYW1cblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwUXVlcnkgPSBhd2FpdCBwYXRoc1RvUXVlcnkucmVkdWNlKFxuICAgICAgICBhc3luYyAocHJpb3JRdWVyeSwgeyBjb2xsZWN0aW9uU2x1Zzogc2x1ZywgcGF0aDogc3ViUGF0aCB9LCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJpb3JRdWVyeVJlc3VsdCA9IGF3YWl0IHByaW9yUXVlcnlcblxuICAgICAgICAgIGNvbnN0IFN1Yk1vZGVsID0gKHBheWxvYWQuZGIgYXMgTW9uZ29vc2VBZGFwdGVyKS5jb2xsZWN0aW9uc1tzbHVnXVxuXG4gICAgICAgICAgLy8gT24gdGhlIFwiZGVlcGVzdFwiIGNvbGxlY3Rpb24sXG4gICAgICAgICAgLy8gU2VhcmNoIG9uIHRoZSB2YWx1ZSBwYXNzZWQgdGhyb3VnaCB0aGUgcXVlcnlcbiAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3ViUXVlcnkgPSBhd2FpdCBTdWJNb2RlbC5idWlsZFF1ZXJ5KHtcbiAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgIFtzdWJQYXRoXToge1xuICAgICAgICAgICAgICAgICAgW2Zvcm1hdHRlZE9wZXJhdG9yXTogdmFsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBTdWJNb2RlbC5maW5kKHN1YlF1ZXJ5LCBzdWJRdWVyeU9wdGlvbnMpXG5cbiAgICAgICAgICAgIGNvbnN0ICRpbjogdW5rbm93bltdID0gW11cblxuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goKGRvYykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdHJpbmdJRCA9IGRvYy5faWQudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAkaW4ucHVzaChzdHJpbmdJRClcblxuICAgICAgICAgICAgICBpZiAobW9uZ29vc2UuVHlwZXMuT2JqZWN0SWQuaXNWYWxpZChzdHJpbmdJRCkpIHtcbiAgICAgICAgICAgICAgICAkaW4ucHVzaChkb2MuX2lkKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAocGF0aHNUb1F1ZXJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHsgJGluIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmV4dFN1YlBhdGggPSBwYXRoc1RvUXVlcnlbaSArIDFdLnBhdGhcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHsgW25leHRTdWJQYXRoXTogeyAkaW4gfSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN1YlF1ZXJ5ID0gcHJpb3JRdWVyeVJlc3VsdC52YWx1ZVxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFN1Yk1vZGVsLmZpbmQoc3ViUXVlcnksIHN1YlF1ZXJ5T3B0aW9ucylcblxuICAgICAgICAgIGNvbnN0ICRpbiA9IHJlc3VsdC5tYXAoKGRvYykgPT4gZG9jLl9pZC50b1N0cmluZygpKVxuXG4gICAgICAgICAgLy8gSWYgaXQgaXMgdGhlIGxhc3QgcmVjdXJzaW9uXG4gICAgICAgICAgLy8gdGhlbiBwYXNzIHRocm91Z2ggdGhlIHNlYXJjaCBwYXJhbVxuICAgICAgICAgIGlmIChpICsgMSA9PT0gcGF0aHNUb1F1ZXJ5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgdmFsdWU6IHsgJGluIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIF9pZDogeyAkaW4gfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBQcm9taXNlLnJlc29sdmUoaW5pdGlhbFJlbGF0aW9uc2hpcFF1ZXJ5KSxcbiAgICAgIClcblxuICAgICAgcmV0dXJuIHJlbGF0aW9uc2hpcFF1ZXJ5XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdHRlZE9wZXJhdG9yICYmIHZhbGlkT3BlcmF0b3JzLmluY2x1ZGVzKGZvcm1hdHRlZE9wZXJhdG9yIGFzIE9wZXJhdG9yKSkge1xuICAgICAgY29uc3Qgb3BlcmF0b3JLZXkgPSBvcGVyYXRvck1hcFtmb3JtYXR0ZWRPcGVyYXRvcl1cblxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdyZWxhdGlvbnNoaXAnIHx8IGZpZWxkLnR5cGUgPT09ICd1cGxvYWQnKSB7XG4gICAgICAgIGxldCBoYXNOdW1iZXJJRFJlbGF0aW9uXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAkb3I6IFt7IFtwYXRoXTogeyBbb3BlcmF0b3JLZXldOiBmb3JtYXR0ZWRWYWx1ZSB9IH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlZFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmIChtb25nb29zZS5UeXBlcy5PYmplY3RJZC5pc1ZhbGlkKGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICAgICAgcmVzdWx0LnZhbHVlLiRvci5wdXNoKHsgW3BhdGhdOiB7IFtvcGVyYXRvcktleV06IG5ldyBPYmplY3RJZChmb3JtYXR0ZWRWYWx1ZSkgfSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICA7KEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbykgPyBmaWVsZC5yZWxhdGlvblRvIDogW2ZpZWxkLnJlbGF0aW9uVG9dKS5mb3JFYWNoKFxuICAgICAgICAgICAgICAocmVsYXRpb25UbykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVsYXRlZFRvQ3VzdG9tTnVtYmVySUQgPSBwYXlsb2FkLmNvbGxlY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgcmVsYXRpb25Ub1xuICAgICAgICAgICAgICAgIF0/LmNvbmZpZz8uZmllbGRzLmZpbmQoKHJlbGF0ZWRGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgZmllbGRBZmZlY3RzRGF0YShyZWxhdGVkRmllbGQpICYmXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRGaWVsZC5uYW1lID09PSAnaWQnICYmXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRGaWVsZC50eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9DdXN0b21OdW1iZXJJRCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGlzUmVsYXRlZFRvQ3VzdG9tTnVtYmVySUQudHlwZSA9PT0gJ251bWJlcicpIGhhc051bWJlcklEUmVsYXRpb24gPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoaGFzTnVtYmVySURSZWxhdGlvbilcbiAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlLiRvci5wdXNoKHsgW3BhdGhdOiB7IFtvcGVyYXRvcktleV06IHBhcnNlRmxvYXQoZm9ybWF0dGVkVmFsdWUpIH0gfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0LnZhbHVlLiRvci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXR0ZWRPcGVyYXRvciA9PT0gJ2xpa2UnICYmIHR5cGVvZiBmb3JtYXR0ZWRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qgd29yZHMgPSBmb3JtYXR0ZWRWYWx1ZS5zcGxpdCgnICcpXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAkYW5kOiB3b3Jkcy5tYXAoKHdvcmQpID0+ICh7XG4gICAgICAgICAgICAgIFtwYXRoXToge1xuICAgICAgICAgICAgICAgICRvcHRpb25zOiAnaScsXG4gICAgICAgICAgICAgICAgJHJlZ2V4OiB3b3JkLnJlcGxhY2UoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cblxuICAgICAgLy8gU29tZSBvcGVyYXRvcnMgbGlrZSAnbmVhcicgbmVlZCB0byBkZWZpbmUgYSBmdWxsIHF1ZXJ5XG4gICAgICAvLyBzbyBpZiB0aGVyZSBpcyBubyBvcGVyYXRvciBrZXksIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZVxuICAgICAgaWYgKCFvcGVyYXRvcktleSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWU6IGZvcm1hdHRlZFZhbHVlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIHZhbHVlOiB7IFtvcGVyYXRvcktleV06IGZvcm1hdHRlZFZhbHVlIH0sXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbiJdLCJuYW1lcyI6WyJidWlsZFNlYXJjaFBhcmFtIiwic3ViUXVlcnlPcHRpb25zIiwibGVhbiIsImxpbWl0IiwiY29sbGVjdGlvblNsdWciLCJmaWVsZHMiLCJnbG9iYWxTbHVnIiwiaW5jb21pbmdQYXRoIiwibG9jYWxlIiwib3BlcmF0b3IiLCJwYXlsb2FkIiwidmFsIiwic2FuaXRpemVkUGF0aCIsInJlcGxhY2UiLCJwYXRocyIsImhhc0N1c3RvbUlEIiwiY3VzdG9tSURmaWVsZCIsImNvbGxlY3Rpb25zIiwiY29uZmlnIiwiZmluZCIsImZpZWxkIiwiZmllbGRBZmZlY3RzRGF0YSIsIm5hbWUiLCJpZEZpZWxkVHlwZSIsInR5cGUiLCJwdXNoIiwiY29tcGxldGUiLCJwYXRoIiwiZ2V0TG9jYWxpemVkUGF0aHMiLCJmb3JtYXR0ZWRPcGVyYXRvciIsInJhd1F1ZXJ5IiwiZm9ybWF0dGVkVmFsdWUiLCJzYW5pdGl6ZVF1ZXJ5VmFsdWUiLCJ2YWx1ZSIsImxlbmd0aCIsInBhdGhzVG9RdWVyeSIsInNsaWNlIiwicmV2ZXJzZSIsImluaXRpYWxSZWxhdGlvbnNoaXBRdWVyeSIsInJlbGF0aW9uc2hpcFF1ZXJ5IiwicmVkdWNlIiwicHJpb3JRdWVyeSIsInNsdWciLCJzdWJQYXRoIiwiaSIsInByaW9yUXVlcnlSZXN1bHQiLCJTdWJNb2RlbCIsImRiIiwic3ViUXVlcnkiLCJidWlsZFF1ZXJ5Iiwid2hlcmUiLCJyZXN1bHQiLCIkaW4iLCJmb3JFYWNoIiwiZG9jIiwic3RyaW5nSUQiLCJfaWQiLCJ0b1N0cmluZyIsIm1vbmdvb3NlIiwiVHlwZXMiLCJPYmplY3RJZCIsImlzVmFsaWQiLCJuZXh0U3ViUGF0aCIsIm1hcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWRPcGVyYXRvcnMiLCJpbmNsdWRlcyIsIm9wZXJhdG9yS2V5Iiwib3BlcmF0b3JNYXAiLCJoYXNOdW1iZXJJRFJlbGF0aW9uIiwiJG9yIiwiQXJyYXkiLCJpc0FycmF5IiwicmVsYXRpb25UbyIsImlzUmVsYXRlZFRvQ3VzdG9tTnVtYmVySUQiLCJyZWxhdGVkRmllbGQiLCJwYXJzZUZsb2F0Iiwid29yZHMiLCJzcGxpdCIsIiRhbmQiLCJ3b3JkIiwiJG9wdGlvbnMiLCIkcmVnZXgiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBOEJzQkE7OztlQUFBQTs7O3FFQXpCRDtpRUFDQTswQkFDYTt1QkFDRDs2QkFLTDtvQ0FDTzs7Ozs7O0FBUW5DLE1BQU1DLGtCQUFrQjtJQUN0QkMsTUFBTTtJQUNOQyxPQUFPO0FBQ1Q7QUFLTyxlQUFlSCxpQkFBaUIsRUFDckNJLGNBQWMsRUFDZEMsTUFBTSxFQUNOQyxVQUFVLEVBQ1ZDLFlBQVksRUFDWkMsTUFBTSxFQUNOQyxRQUFRLEVBQ1JDLE9BQU8sRUFDUEMsR0FBRyxFQVVKO0lBQ0MsNERBQTREO0lBQzVELElBQUlDLGdCQUFnQkwsYUFBYU0sT0FBTyxDQUFDLE9BQU87SUFDaEQsSUFBSUQsa0JBQWtCLE1BQU1BLGdCQUFnQjtJQUU1QyxJQUFJRSxRQUF1QixFQUFFO0lBRTdCLElBQUlDLGNBQWM7SUFFbEIsSUFBSUgsa0JBQWtCLE9BQU87UUFDM0IsTUFBTUksZ0JBQWdCTixRQUFRTyxXQUFXLENBQUNiLGVBQWUsRUFBRWMsT0FBT2IsT0FBT2MsS0FDdkUsQ0FBQ0MsUUFBVUMsSUFBQUEsdUJBQWdCLEVBQUNELFVBQVVBLE1BQU1FLElBQUksS0FBSztRQUd2RCxJQUFJQyxjQUFpQztRQUVyQyxJQUFJUCxlQUFlO1lBQ2pCLElBQUlBLGVBQWVRLFNBQVMsVUFBVVIsZUFBZVEsU0FBUyxVQUFVO2dCQUN0RUQsY0FBY1AsY0FBY1EsSUFBSTtZQUNsQztZQUVB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
|
|
206
|
+
//# sourceMappingURL=buildSearchParams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/queries/buildSearchParams.ts"],"sourcesContent":["import type { Payload } from 'payload'\nimport type { PathToQuery } from 'payload/database'\nimport type { Field } from 'payload/types'\nimport type { Operator } from 'payload/types'\n\nimport ObjectIdImport from 'bson-objectid'\nimport mongoose from 'mongoose'\nimport { getLocalizedPaths } from 'payload/database'\nimport { fieldAffectsData } from 'payload/types'\nimport { validOperators } from 'payload/types'\n\nimport type { MongooseAdapter } from '../index.js'\n\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\nconst ObjectId = (ObjectIdImport.default ||\n ObjectIdImport) as unknown as typeof ObjectIdImport.default\n\ntype SearchParam = {\n path?: string\n rawQuery?: unknown\n value?: unknown\n}\n\nconst subQueryOptions = {\n lean: true,\n limit: 50,\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 payload,\n val,\n}: {\n collectionSlug?: string\n fields: Field[]\n globalSlug?: string\n incomingPath: string\n locale?: string\n operator: string\n payload: Payload\n val: unknown\n}): Promise<SearchParam> {\n // Replace GraphQL nested field double underscore formatting\n let sanitizedPath = incomingPath.replace(/__/g, '.')\n if (sanitizedPath === 'id') sanitizedPath = '_id'\n\n let paths: PathToQuery[] = []\n\n let hasCustomID = false\n\n if (sanitizedPath === '_id') {\n const customIDFieldType = payload.collections[collectionSlug]?.customIDType\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 Field,\n path: '_id',\n })\n } else {\n paths = await getLocalizedPaths({\n collectionSlug,\n fields,\n globalSlug,\n incomingPath: sanitizedPath,\n locale,\n payload,\n })\n }\n\n const [{ field, path }] = paths\n\n if (path) {\n const {\n operator: formattedOperator,\n rawQuery,\n val: formattedValue,\n } = sanitizeQueryValue({\n field,\n hasCustomID,\n operator,\n path,\n val,\n })\n\n if (rawQuery) return { value: rawQuery }\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\n const initialRelationshipQuery = {\n value: {},\n } as SearchParam\n\n const relationshipQuery = await pathsToQuery.reduce(\n async (priorQuery, { collectionSlug: slug, path: subPath }, i) => {\n const priorQueryResult = await priorQuery\n\n const SubModel = (payload.db as MongooseAdapter).collections[slug]\n\n // On the \"deepest\" collection,\n // Search on the value passed through the query\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 result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in: unknown[] = []\n\n result.forEach((doc) => {\n const stringID = doc._id.toString()\n $in.push(stringID)\n\n if (mongoose.Types.ObjectId.isValid(stringID)) {\n $in.push(doc._id)\n }\n })\n\n if (pathsToQuery.length === 1) {\n return {\n path,\n value: { $in },\n }\n }\n\n const nextSubPath = pathsToQuery[i + 1].path\n\n return {\n value: { [nextSubPath]: { $in } },\n }\n }\n\n const subQuery = priorQueryResult.value\n const result = await SubModel.find(subQuery, subQueryOptions)\n\n const $in = result.map((doc) => doc._id.toString())\n\n // If it is the last recursion\n // then pass through the search param\n if (i + 1 === pathsToQuery.length) {\n return {\n path,\n value: { $in },\n }\n }\n\n return {\n value: {\n _id: { $in },\n },\n }\n },\n Promise.resolve(initialRelationshipQuery),\n )\n\n return relationshipQuery\n }\n\n if (formattedOperator && validOperators.includes(formattedOperator as Operator)) {\n const operatorKey = operatorMap[formattedOperator]\n\n if (field.type === 'relationship' || field.type === 'upload') {\n let hasNumberIDRelation\n\n const result = {\n value: {\n $or: [{ [path]: { [operatorKey]: formattedValue } }],\n },\n }\n\n if (typeof formattedValue === 'string') {\n if (mongoose.Types.ObjectId.isValid(formattedValue)) {\n result.value.$or.push({\n [path]: { [operatorKey]: new 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.$or.push({ [path]: { [operatorKey]: parseFloat(formattedValue) } })\n }\n }\n\n if (result.value.$or.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: word.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'),\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"],"names":["ObjectIdImport","mongoose","getLocalizedPaths","validOperators","operatorMap","sanitizeQueryValue","ObjectId","default","subQueryOptions","lean","limit","buildSearchParam","collectionSlug","fields","globalSlug","incomingPath","locale","operator","payload","val","sanitizedPath","replace","paths","hasCustomID","customIDFieldType","collections","customIDType","idFieldType","push","complete","field","name","type","path","formattedOperator","rawQuery","formattedValue","value","length","pathsToQuery","slice","reverse","initialRelationshipQuery","relationshipQuery","reduce","priorQuery","slug","subPath","i","priorQueryResult","SubModel","db","subQuery","buildQuery","where","result","find","$in","forEach","doc","stringID","_id","toString","Types","isValid","nextSubPath","map","Promise","resolve","includes","operatorKey","hasNumberIDRelation","$or","Array","isArray","relationTo","isRelatedToCustomNumberID","parseFloat","words","split","$and","word","$options","$regex","undefined"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
/// <reference types="mongoose/types/aggregate.js" />
|
|
2
|
+
/// <reference types="mongoose/types/callback.js" />
|
|
3
|
+
/// <reference types="mongoose/types/collection.js" />
|
|
4
|
+
/// <reference types="mongoose/types/connection.js" />
|
|
5
|
+
/// <reference types="mongoose/types/cursor.js" />
|
|
6
|
+
/// <reference types="mongoose/types/document.js" />
|
|
7
|
+
/// <reference types="mongoose/types/error.js" />
|
|
8
|
+
/// <reference types="mongoose/types/expressions.js" />
|
|
9
|
+
/// <reference types="mongoose/types/helpers.js" />
|
|
10
|
+
/// <reference types="mongoose/types/middlewares.js" />
|
|
11
|
+
/// <reference types="mongoose/types/indexes.js" />
|
|
12
|
+
/// <reference types="mongoose/types/models.js" />
|
|
13
|
+
/// <reference types="mongoose/types/mongooseoptions.js" />
|
|
14
|
+
/// <reference types="mongoose/types/pipelinestage.js" />
|
|
15
|
+
/// <reference types="mongoose/types/populate.js" />
|
|
16
|
+
/// <reference types="mongoose/types/query.js" />
|
|
17
|
+
/// <reference types="mongoose/types/schemaoptions.js" />
|
|
18
|
+
/// <reference types="mongoose/types/schematypes.js" />
|
|
19
|
+
/// <reference types="mongoose/types/session.js" />
|
|
20
|
+
/// <reference types="mongoose/types/types.js" />
|
|
21
|
+
/// <reference types="mongoose/types/utility.js" />
|
|
22
|
+
/// <reference types="mongoose/types/validation.js" />
|
|
23
|
+
/// <reference types="mongoose/types/virtuals.js" />
|
|
24
|
+
/// <reference types="mongoose/types/inferschematype.js" />
|
|
25
|
+
/// <reference types="mongoose-paginate-v2" />
|
|
1
26
|
import type { PaginateOptions } from 'mongoose';
|
|
2
27
|
import type { SanitizedConfig } from 'payload/config';
|
|
3
28
|
import type { Field } from 'payload/types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildSortParam.d.ts","sourceRoot":"","sources":["../../src/queries/buildSortParam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAI1C,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,aAAa,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;CACjB,EAAE,CAAA;AAEH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAA;AAE1C,eAAO,MAAM,cAAc,kDAMxB,IAAI,KAAG,eAAe,CAAC,MAAM,CA6B/B,CAAA"}
|
|
1
|
+
{"version":3,"file":"buildSortParam.d.ts","sourceRoot":"","sources":["../../src/queries/buildSortParam.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAI1C,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,aAAa,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;CACjB,EAAE,CAAA;AAEH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAA;AAE1C,eAAO,MAAM,cAAc,kDAMxB,IAAI,KAAG,eAAe,CAAC,MAAM,CA6B/B,CAAA"}
|
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "buildSortParam", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return buildSortParam;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _getLocalizedSortProperty = require("./getLocalizedSortProperty");
|
|
12
|
-
const buildSortParam = ({ config, fields, locale, sort, timestamps })=>{
|
|
1
|
+
import { getLocalizedSortProperty } from './getLocalizedSortProperty.js';
|
|
2
|
+
export const buildSortParam = ({ config, fields, locale, sort, timestamps })=>{
|
|
13
3
|
let sortProperty;
|
|
14
4
|
let sortDirection = 'desc';
|
|
15
5
|
if (!sort) {
|
|
@@ -27,7 +17,7 @@ const buildSortParam = ({ config, fields, locale, sort, timestamps })=>{
|
|
|
27
17
|
if (sortProperty === 'id') {
|
|
28
18
|
sortProperty = '_id';
|
|
29
19
|
} else {
|
|
30
|
-
sortProperty =
|
|
20
|
+
sortProperty = getLocalizedSortProperty({
|
|
31
21
|
config,
|
|
32
22
|
fields,
|
|
33
23
|
locale,
|
|
@@ -39,4 +29,4 @@ const buildSortParam = ({ config, fields, locale, sort, timestamps })=>{
|
|
|
39
29
|
};
|
|
40
30
|
};
|
|
41
31
|
|
|
42
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=buildSortParam.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/queries/buildSortParam.ts"],"sourcesContent":["import type { PaginateOptions } from 'mongoose'\nimport type { SanitizedConfig } from 'payload/config'\nimport type { Field } from 'payload/types'\n\nimport { getLocalizedSortProperty } from './getLocalizedSortProperty.js'\n\ntype Args = {\n config: SanitizedConfig\n fields: Field[]\n locale: string\n sort: string\n timestamps: boolean\n}\n\nexport type SortArgs = {\n direction: SortDirection\n property: string\n}[]\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport const buildSortParam = ({\n config,\n fields,\n locale,\n sort,\n timestamps,\n}: Args): PaginateOptions['sort'] => {\n let sortProperty: string\n let sortDirection: SortDirection = 'desc'\n\n if (!sort) {\n if (timestamps) {\n sortProperty = 'createdAt'\n } else {\n sortProperty = '_id'\n }\n } else if (sort.indexOf('-') === 0) {\n sortProperty = sort.substring(1)\n } else {\n sortProperty = sort\n sortDirection = 'asc'\n }\n\n if (sortProperty === 'id') {\n sortProperty = '_id'\n } else {\n sortProperty = getLocalizedSortProperty({\n config,\n fields,\n locale,\n segments: sortProperty.split('.'),\n })\n }\n\n return { [sortProperty]: sortDirection }\n}\n"],"names":["getLocalizedSortProperty","buildSortParam","config","fields","locale","sort","timestamps","sortProperty","sortDirection","indexOf","substring","segments","split"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAIA,SAASA,wBAAwB,QAAQ,gCAA+B;AAiBxE,OAAO,MAAMC,iBAAiB,CAAC,EAC7BC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,IAAI,EACJC,UAAU,EACL;IACL,IAAIC;IACJ,IAAIC,gBAA+B;IAEnC,IAAI,CAACH,MAAM;QACT,IAAIC,YAAY;YACdC,eAAe;QACjB,OAAO;YACLA,eAAe;QACjB;IACF,OAAO,IAAIF,KAAKI,OAAO,CAAC,SAAS,GAAG;QAClCF,eAAeF,KAAKK,SAAS,CAAC;IAChC,OAAO;QACLH,eAAeF;QACfG,gBAAgB;IAClB;IAEA,IAAID,iBAAiB,MAAM;QACzBA,eAAe;IACjB,OAAO;QACLA,eAAeP,yBAAyB;YACtCE;YACAC;YACAC;YACAO,UAAUJ,aAAaK,KAAK,CAAC;QAC/B;IACF;IAEA,OAAO;QAAE,CAACL,aAAa,EAAEC;IAAc;AACzC,EAAC"}
|
|
@@ -1,31 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "getLocalizedSortProperty", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return getLocalizedSortProperty;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _types = require("payload/types");
|
|
12
|
-
const _utilities = require("payload/utilities");
|
|
13
|
-
const getLocalizedSortProperty = ({ config, fields: incomingFields, locale, result: incomingResult, segments: incomingSegments })=>{
|
|
1
|
+
import { fieldAffectsData, fieldIsPresentationalOnly } from 'payload/types';
|
|
2
|
+
import { flattenTopLevelFields } from 'payload/utilities';
|
|
3
|
+
export const getLocalizedSortProperty = ({ config, fields: incomingFields, locale, result: incomingResult, segments: incomingSegments })=>{
|
|
14
4
|
// If localization is not enabled, accept exactly
|
|
15
5
|
// what is sent in
|
|
16
6
|
if (!config.localization) {
|
|
17
7
|
return incomingSegments.join('.');
|
|
18
8
|
}
|
|
19
9
|
// Flatten incoming fields (row, etc)
|
|
20
|
-
const fields =
|
|
10
|
+
const fields = flattenTopLevelFields(incomingFields);
|
|
21
11
|
const segments = [
|
|
22
12
|
...incomingSegments
|
|
23
13
|
];
|
|
24
14
|
// Retrieve first segment, and remove from segments
|
|
25
15
|
const firstSegment = segments.shift();
|
|
26
16
|
// Attempt to find a matched field
|
|
27
|
-
const matchedField = fields.find((field)=>
|
|
28
|
-
if (matchedField && !
|
|
17
|
+
const matchedField = fields.find((field)=>fieldAffectsData(field) && field.name === firstSegment);
|
|
18
|
+
if (matchedField && !fieldIsPresentationalOnly(matchedField)) {
|
|
29
19
|
let nextFields;
|
|
30
20
|
const remainingSegments = [
|
|
31
21
|
...segments
|
|
@@ -54,7 +44,7 @@ const getLocalizedSortProperty = ({ config, fields: incomingFields, locale, resu
|
|
|
54
44
|
nextFields = matchedField.blocks.reduce((flattenedBlockFields, block)=>{
|
|
55
45
|
return [
|
|
56
46
|
...flattenedBlockFields,
|
|
57
|
-
...block.fields.filter((blockField)=>
|
|
47
|
+
...block.fields.filter((blockField)=>fieldAffectsData(blockField) && blockField.name !== 'blockType' && blockField.name !== 'blockName' || !fieldAffectsData(blockField))
|
|
58
48
|
];
|
|
59
49
|
}, []);
|
|
60
50
|
}
|
|
@@ -73,4 +63,4 @@ const getLocalizedSortProperty = ({ config, fields: incomingFields, locale, resu
|
|
|
73
63
|
return incomingSegments.join('.');
|
|
74
64
|
};
|
|
75
65
|
|
|
76
|
-
//# sourceMappingURL=
|
|
66
|
+
//# sourceMappingURL=getLocalizedSortProperty.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/queries/getLocalizedSortProperty.ts"],"sourcesContent":["import type { SanitizedConfig } from 'payload/config'\nimport type { Field } from 'payload/types'\n\nimport { fieldAffectsData, fieldIsPresentationalOnly } from 'payload/types'\nimport { flattenTopLevelFields } from 'payload/utilities'\n\ntype Args = {\n config: SanitizedConfig\n fields: Field[]\n locale: string\n result?: string\n segments: string[]\n}\n\nexport const getLocalizedSortProperty = ({\n config,\n fields: incomingFields,\n locale,\n result: incomingResult,\n segments: incomingSegments,\n}: Args): string => {\n // If localization is not enabled, accept exactly\n // what is sent in\n if (!config.localization) {\n return incomingSegments.join('.')\n }\n\n // Flatten incoming fields (row, etc)\n const fields = flattenTopLevelFields(incomingFields)\n\n const segments = [...incomingSegments]\n\n // Retrieve first segment, and remove from segments\n const firstSegment = segments.shift()\n\n // Attempt to find a matched field\n const matchedField = fields.find(\n (field) => fieldAffectsData(field) && field.name === firstSegment,\n )\n\n if (matchedField && !fieldIsPresentationalOnly(matchedField)) {\n let nextFields: Field[]\n const remainingSegments = [...segments]\n let localizedSegment = matchedField.name\n\n if (matchedField.localized) {\n // Check to see if next segment is a locale\n if (segments.length > 0) {\n const nextSegmentIsLocale = config.localization.localeCodes.includes(remainingSegments[0])\n\n // If next segment is locale, remove it from remaining segments\n // and use it to localize the current segment\n if (nextSegmentIsLocale) {\n const nextSegment = remainingSegments.shift()\n localizedSegment = `${matchedField.name}.${nextSegment}`\n }\n } else {\n // If no more segments, but field is localized, use default locale\n localizedSegment = `${matchedField.name}.${locale}`\n }\n }\n\n // If there are subfields, pass them through\n if (\n matchedField.type === 'tab' ||\n matchedField.type === 'group' ||\n matchedField.type === 'array'\n ) {\n nextFields = matchedField.fields\n }\n\n if (matchedField.type === 'blocks') {\n nextFields = matchedField.blocks.reduce((flattenedBlockFields, block) => {\n return [\n ...flattenedBlockFields,\n ...block.fields.filter(\n (blockField) =>\n (fieldAffectsData(blockField) &&\n blockField.name !== 'blockType' &&\n blockField.name !== 'blockName') ||\n !fieldAffectsData(blockField),\n ),\n ]\n }, [])\n }\n\n const result = incomingResult ? `${incomingResult}.${localizedSegment}` : localizedSegment\n\n if (nextFields) {\n return getLocalizedSortProperty({\n config,\n fields: nextFields,\n locale,\n result,\n segments: remainingSegments,\n })\n }\n\n return result\n }\n\n return incomingSegments.join('.')\n}\n"],"names":["fieldAffectsData","fieldIsPresentationalOnly","flattenTopLevelFields","getLocalizedSortProperty","config","fields","incomingFields","locale","result","incomingResult","segments","incomingSegments","localization","join","firstSegment","shift","matchedField","find","field","name","nextFields","remainingSegments","localizedSegment","localized","length","nextSegmentIsLocale","localeCodes","includes","nextSegment","type","blocks","reduce","flattenedBlockFields","block","filter","blockField"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAGA,SAASA,gBAAgB,EAAEC,yBAAyB,QAAQ,gBAAe;AAC3E,SAASC,qBAAqB,QAAQ,oBAAmB;AAUzD,OAAO,MAAMC,2BAA2B,CAAC,EACvCC,MAAM,EACNC,QAAQC,cAAc,EACtBC,MAAM,EACNC,QAAQC,cAAc,EACtBC,UAAUC,gBAAgB,EACrB;IACL,iDAAiD;IACjD,kBAAkB;IAClB,IAAI,CAACP,OAAOQ,YAAY,EAAE;QACxB,OAAOD,iBAAiBE,IAAI,CAAC;IAC/B;IAEA,qCAAqC;IACrC,MAAMR,SAASH,sBAAsBI;IAErC,MAAMI,WAAW;WAAIC;KAAiB;IAEtC,mDAAmD;IACnD,MAAMG,eAAeJ,SAASK,KAAK;IAEnC,kCAAkC;IAClC,MAAMC,eAAeX,OAAOY,IAAI,CAC9B,CAACC,QAAUlB,iBAAiBkB,UAAUA,MAAMC,IAAI,KAAKL;IAGvD,IAAIE,gBAAgB,CAACf,0BAA0Be,eAAe;QAC5D,IAAII;QACJ,MAAMC,oBAAoB;eAAIX;SAAS;QACvC,IAAIY,mBAAmBN,aAAaG,IAAI;QAExC,IAAIH,aAAaO,SAAS,EAAE;YAC1B,2CAA2C;YAC3C,IAAIb,SAASc,MAAM,GAAG,GAAG;gBACvB,MAAMC,sBAAsBrB,OAAOQ,YAAY,CAACc,WAAW,CAACC,QAAQ,CAACN,iBAAiB,CAAC,EAAE;gBAEzF,+DAA+D;gBAC/D,6CAA6C;gBAC7C,IAAII,qBAAqB;oBACvB,MAAMG,cAAcP,kBAAkBN,KAAK;oBAC3CO,mBAAmB,CAAC,EAAEN,aAAaG,IAAI,CAAC,CAAC,EAAES,YAAY,CAAC;gBAC1D;YACF,OAAO;gBACL,kEAAkE;gBAClEN,mBAAmB,CAAC,EAAEN,aAAaG,IAAI,CAAC,CAAC,EAAEZ,OAAO,CAAC;YACrD;QACF;QAEA,4CAA4C;QAC5C,IACES,aAAaa,IAAI,KAAK,SACtBb,aAAaa,IAAI,KAAK,WACtBb,aAAaa,IAAI,KAAK,SACtB;YACAT,aAAaJ,aAAaX,MAAM;QAClC;QAEA,IAAIW,aAAaa,IAAI,KAAK,UAAU;YAClCT,aAAaJ,aAAac,MAAM,CAACC,MAAM,CAAC,CAACC,sBAAsBC;gBAC7D,OAAO;uBACFD;uBACAC,MAAM5B,MAAM,CAAC6B,MAAM,CACpB,CAACC,aACC,AAACnC,iBAAiBmC,eAChBA,WAAWhB,IAAI,KAAK,eACpBgB,WAAWhB,IAAI,KAAK,eACtB,CAACnB,iBAAiBmC;iBAEvB;YACH,GAAG,EAAE;QACP;QAEA,MAAM3B,SAASC,iBAAiB,CAAC,EAAEA,eAAe,CAAC,EAAEa,iBAAiB,CAAC,GAAGA;QAE1E,IAAIF,YAAY;YACd,OAAOjB,yBAAyB;gBAC9BC;gBACAC,QAAQe;gBACRb;gBACAC;gBACAE,UAAUW;YACZ;QACF;QAEA,OAAOb;IACT;IAEA,OAAOG,iBAAiBE,IAAI,CAAC;AAC/B,EAAC"}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
});
|
|
5
|
-
const _config = require("payload/config");
|
|
6
|
-
const _getLocalizedSortProperty = require("./getLocalizedSortProperty");
|
|
7
|
-
const config = {
|
|
8
|
-
localization: {
|
|
9
|
-
locales: [
|
|
10
|
-
'en',
|
|
11
|
-
'es'
|
|
12
|
-
]
|
|
13
|
-
}
|
|
14
|
-
};
|
|
1
|
+
import { sanitizeConfig } from 'payload/config';
|
|
2
|
+
import { getLocalizedSortProperty } from './getLocalizedSortProperty.js';
|
|
3
|
+
let config;
|
|
15
4
|
describe('get localized sort property', ()=>{
|
|
16
|
-
|
|
17
|
-
|
|
5
|
+
beforeAll(async ()=>{
|
|
6
|
+
config = await sanitizeConfig({
|
|
7
|
+
localization: {
|
|
8
|
+
locales: [
|
|
9
|
+
'en',
|
|
10
|
+
'es'
|
|
11
|
+
],
|
|
12
|
+
defaultLocale: 'en',
|
|
13
|
+
fallback: true
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
it('passes through a non-localized sort property', async ()=>{
|
|
18
|
+
const result = getLocalizedSortProperty({
|
|
18
19
|
segments: [
|
|
19
20
|
'title'
|
|
20
21
|
],
|
|
21
|
-
config
|
|
22
|
+
config,
|
|
22
23
|
fields: [
|
|
23
24
|
{
|
|
24
25
|
name: 'title',
|
|
@@ -30,11 +31,11 @@ describe('get localized sort property', ()=>{
|
|
|
30
31
|
expect(result).toStrictEqual('title');
|
|
31
32
|
});
|
|
32
33
|
it('properly localizes an un-localized sort property', ()=>{
|
|
33
|
-
const result =
|
|
34
|
+
const result = getLocalizedSortProperty({
|
|
34
35
|
segments: [
|
|
35
36
|
'title'
|
|
36
37
|
],
|
|
37
|
-
config
|
|
38
|
+
config,
|
|
38
39
|
fields: [
|
|
39
40
|
{
|
|
40
41
|
name: 'title',
|
|
@@ -47,12 +48,12 @@ describe('get localized sort property', ()=>{
|
|
|
47
48
|
expect(result).toStrictEqual('title.en');
|
|
48
49
|
});
|
|
49
50
|
it('keeps specifically asked-for localized sort properties', ()=>{
|
|
50
|
-
const result =
|
|
51
|
+
const result = getLocalizedSortProperty({
|
|
51
52
|
segments: [
|
|
52
53
|
'title',
|
|
53
54
|
'es'
|
|
54
55
|
],
|
|
55
|
-
config
|
|
56
|
+
config,
|
|
56
57
|
fields: [
|
|
57
58
|
{
|
|
58
59
|
name: 'title',
|
|
@@ -65,12 +66,12 @@ describe('get localized sort property', ()=>{
|
|
|
65
66
|
expect(result).toStrictEqual('title.es');
|
|
66
67
|
});
|
|
67
68
|
it('properly localizes nested sort properties', ()=>{
|
|
68
|
-
const result =
|
|
69
|
+
const result = getLocalizedSortProperty({
|
|
69
70
|
segments: [
|
|
70
71
|
'group',
|
|
71
72
|
'title'
|
|
72
73
|
],
|
|
73
|
-
config
|
|
74
|
+
config,
|
|
74
75
|
fields: [
|
|
75
76
|
{
|
|
76
77
|
name: 'group',
|
|
@@ -89,13 +90,13 @@ describe('get localized sort property', ()=>{
|
|
|
89
90
|
expect(result).toStrictEqual('group.title.en');
|
|
90
91
|
});
|
|
91
92
|
it('keeps requested locale with nested sort properties', ()=>{
|
|
92
|
-
const result =
|
|
93
|
+
const result = getLocalizedSortProperty({
|
|
93
94
|
segments: [
|
|
94
95
|
'group',
|
|
95
96
|
'title',
|
|
96
97
|
'es'
|
|
97
98
|
],
|
|
98
|
-
config
|
|
99
|
+
config,
|
|
99
100
|
fields: [
|
|
100
101
|
{
|
|
101
102
|
name: 'group',
|
|
@@ -114,11 +115,11 @@ describe('get localized sort property', ()=>{
|
|
|
114
115
|
expect(result).toStrictEqual('group.title.es');
|
|
115
116
|
});
|
|
116
117
|
it('properly localizes field within row', ()=>{
|
|
117
|
-
const result =
|
|
118
|
+
const result = getLocalizedSortProperty({
|
|
118
119
|
segments: [
|
|
119
120
|
'title'
|
|
120
121
|
],
|
|
121
|
-
config
|
|
122
|
+
config,
|
|
122
123
|
fields: [
|
|
123
124
|
{
|
|
124
125
|
type: 'row',
|
|
@@ -136,12 +137,12 @@ describe('get localized sort property', ()=>{
|
|
|
136
137
|
expect(result).toStrictEqual('title.en');
|
|
137
138
|
});
|
|
138
139
|
it('properly localizes field within named tab', ()=>{
|
|
139
|
-
const result =
|
|
140
|
+
const result = getLocalizedSortProperty({
|
|
140
141
|
segments: [
|
|
141
142
|
'tab',
|
|
142
143
|
'title'
|
|
143
144
|
],
|
|
144
|
-
config
|
|
145
|
+
config,
|
|
145
146
|
fields: [
|
|
146
147
|
{
|
|
147
148
|
type: 'tabs',
|
|
@@ -164,11 +165,11 @@ describe('get localized sort property', ()=>{
|
|
|
164
165
|
expect(result).toStrictEqual('tab.title.en');
|
|
165
166
|
});
|
|
166
167
|
it('properly localizes field within unnamed tab', ()=>{
|
|
167
|
-
const result =
|
|
168
|
+
const result = getLocalizedSortProperty({
|
|
168
169
|
segments: [
|
|
169
170
|
'title'
|
|
170
171
|
],
|
|
171
|
-
config
|
|
172
|
+
config,
|
|
172
173
|
fields: [
|
|
173
174
|
{
|
|
174
175
|
type: 'tabs',
|
|
@@ -192,4 +193,4 @@ describe('get localized sort property', ()=>{
|
|
|
192
193
|
});
|
|
193
194
|
});
|
|
194
195
|
|
|
195
|
-
//# sourceMappingURL=
|
|
196
|
+
//# sourceMappingURL=getLocalizedSortProperty.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/queries/getLocalizedSortProperty.spec.ts"],"sourcesContent":["import { SanitizedConfig, sanitizeConfig } from 'payload/config'\nimport { Config } from 'payload/config'\nimport { getLocalizedSortProperty } from './getLocalizedSortProperty.js'\n\nlet config: SanitizedConfig\n\ndescribe('get localized sort property', () => {\n beforeAll(async () => {\n config = (await sanitizeConfig({\n localization: {\n locales: ['en', 'es'],\n defaultLocale: 'en',\n fallback: true,\n },\n } as Config)) as SanitizedConfig\n })\n it('passes through a non-localized sort property', async () => {\n const result = getLocalizedSortProperty({\n segments: ['title'],\n config,\n fields: [\n {\n name: 'title',\n type: 'text',\n },\n ],\n locale: 'en',\n })\n\n expect(result).toStrictEqual('title')\n })\n\n it('properly localizes an un-localized sort property', () => {\n const result = getLocalizedSortProperty({\n segments: ['title'],\n config,\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n locale: 'en',\n })\n\n expect(result).toStrictEqual('title.en')\n })\n\n it('keeps specifically asked-for localized sort properties', () => {\n const result = getLocalizedSortProperty({\n segments: ['title', 'es'],\n config,\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n locale: 'en',\n })\n\n expect(result).toStrictEqual('title.es')\n })\n\n it('properly localizes nested sort properties', () => {\n const result = getLocalizedSortProperty({\n segments: ['group', 'title'],\n config,\n fields: [\n {\n name: 'group',\n type: 'group',\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n },\n ],\n locale: 'en',\n })\n\n expect(result).toStrictEqual('group.title.en')\n })\n\n it('keeps requested locale with nested sort properties', () => {\n const result = getLocalizedSortProperty({\n segments: ['group', 'title', 'es'],\n config,\n fields: [\n {\n name: 'group',\n type: 'group',\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n },\n ],\n locale: 'en',\n })\n\n expect(result).toStrictEqual('group.title.es')\n })\n\n it('properly localizes field within row', () => {\n const result = getLocalizedSortProperty({\n segments: ['title'],\n config,\n fields: [\n {\n type: 'row',\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n },\n ],\n locale: 'en',\n })\n\n expect(result).toStrictEqual('title.en')\n })\n\n it('properly localizes field within named tab', () => {\n const result = getLocalizedSortProperty({\n segments: ['tab', 'title'],\n config,\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n name: 'tab',\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n },\n ],\n },\n ],\n locale: 'en',\n })\n\n expect(result).toStrictEqual('tab.title.en')\n })\n\n it('properly localizes field within unnamed tab', () => {\n const result = getLocalizedSortProperty({\n segments: ['title'],\n config,\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n label: 'Tab',\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n },\n ],\n },\n ],\n },\n ],\n locale: 'en',\n })\n\n expect(result).toStrictEqual('title.en')\n })\n})\n"],"names":["sanitizeConfig","getLocalizedSortProperty","config","describe","beforeAll","localization","locales","defaultLocale","fallback","it","result","segments","fields","name","type","locale","expect","toStrictEqual","localized","tabs","label"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAA0BA,cAAc,QAAQ,iBAAgB;AAEhE,SAASC,wBAAwB,QAAQ,gCAA+B;AAExE,IAAIC;AAEJC,SAAS,+BAA+B;IACtCC,UAAU;QACRF,SAAU,MAAMF,eAAe;YAC7BK,cAAc;gBACZC,SAAS;oBAAC;oBAAM;iBAAK;gBACrBC,eAAe;gBACfC,UAAU;YACZ;QACF;IACF;IACAC,GAAG,gDAAgD;QACjD,MAAMC,SAAST,yBAAyB;YACtCU,UAAU;gBAAC;aAAQ;YACnBT;YACAU,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;gBACR;aACD;YACDC,QAAQ;QACV;QAEAC,OAAON,QAAQO,aAAa,CAAC;IAC/B;IAEAR,GAAG,oDAAoD;QACrD,MAAMC,SAAST,yBAAyB;YACtCU,UAAU;gBAAC;aAAQ;YACnBT;YACAU,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;oBACNI,WAAW;gBACb;aACD;YACDH,QAAQ;QACV;QAEAC,OAAON,QAAQO,aAAa,CAAC;IAC/B;IAEAR,GAAG,0DAA0D;QAC3D,MAAMC,SAAST,yBAAyB;YACtCU,UAAU;gBAAC;gBAAS;aAAK;YACzBT;YACAU,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;oBACNI,WAAW;gBACb;aACD;YACDH,QAAQ;QACV;QAEAC,OAAON,QAAQO,aAAa,CAAC;IAC/B;IAEAR,GAAG,6CAA6C;QAC9C,MAAMC,SAAST,yBAAyB;YACtCU,UAAU;gBAAC;gBAAS;aAAQ;YAC5BT;YACAU,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;oBACNF,QAAQ;wBACN;4BACEC,MAAM;4BACNC,MAAM;4BACNI,WAAW;wBACb;qBACD;gBACH;aACD;YACDH,QAAQ;QACV;QAEAC,OAAON,QAAQO,aAAa,CAAC;IAC/B;IAEAR,GAAG,sDAAsD;QACvD,MAAMC,SAAST,yBAAyB;YACtCU,UAAU;gBAAC;gBAAS;gBAAS;aAAK;YAClCT;YACAU,QAAQ;gBACN;oBACEC,MAAM;oBACNC,MAAM;oBACNF,QAAQ;wBACN;4BACEC,MAAM;4BACNC,MAAM;4BACNI,WAAW;wBACb;qBACD;gBACH;aACD;YACDH,QAAQ;QACV;QAEAC,OAAON,QAAQO,aAAa,CAAC;IAC/B;IAEAR,GAAG,uCAAuC;QACxC,MAAMC,SAAST,yBAAyB;YACtCU,UAAU;gBAAC;aAAQ;YACnBT;YACAU,QAAQ;gBACN;oBACEE,MAAM;oBACNF,QAAQ;wBACN;4BACEC,MAAM;4BACNC,MAAM;4BACNI,WAAW;wBACb;qBACD;gBACH;aACD;YACDH,QAAQ;QACV;QAEAC,OAAON,QAAQO,aAAa,CAAC;IAC/B;IAEAR,GAAG,6CAA6C;QAC9C,MAAMC,SAAST,yBAAyB;YACtCU,UAAU;gBAAC;gBAAO;aAAQ;YAC1BT;YACAU,QAAQ;gBACN;oBACEE,MAAM;oBACNK,MAAM;wBACJ;4BACEN,MAAM;4BACND,QAAQ;gCACN;oCACEC,MAAM;oCACNC,MAAM;oCACNI,WAAW;gCACb;6BACD;wBACH;qBACD;gBACH;aACD;YACDH,QAAQ;QACV;QAEAC,OAAON,QAAQO,aAAa,CAAC;IAC/B;IAEAR,GAAG,+CAA+C;QAChD,MAAMC,SAAST,yBAAyB;YACtCU,UAAU;gBAAC;aAAQ;YACnBT;YACAU,QAAQ;gBACN;oBACEE,MAAM;oBACNK,MAAM;wBACJ;4BACEC,OAAO;4BACPR,QAAQ;gCACN;oCACEC,MAAM;oCACNC,MAAM;oCACNI,WAAW;gCACb;6BACD;wBACH;qBACD;gBACH;aACD;YACDH,QAAQ;QACV;QAEAC,OAAON,QAAQO,aAAa,CAAC;IAC/B;AACF"}
|
package/dist/queries/mock.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/queries/mock.js"],"names":[],"rangeMappings":"","mappings":""}
|
|
@@ -1,14 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "operatorMap", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return operatorMap;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const operatorMap = {
|
|
1
|
+
export const operatorMap = {
|
|
12
2
|
all: '$all',
|
|
13
3
|
equals: '$eq',
|
|
14
4
|
exists: '$exists',
|
|
@@ -24,4 +14,4 @@ const operatorMap = {
|
|
|
24
14
|
within: '$geoWithin'
|
|
25
15
|
};
|
|
26
16
|
|
|
27
|
-
//# sourceMappingURL=
|
|
17
|
+
//# sourceMappingURL=operatorMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/queries/operatorMap.ts"],"sourcesContent":["export const operatorMap = {\n all: '$all',\n equals: '$eq',\n exists: '$exists',\n greater_than: '$gt',\n greater_than_equal: '$gte',\n in: '$in',\n intersects: '$geoIntersects',\n less_than: '$lt',\n less_than_equal: '$lte',\n near: '$near',\n not_equals: '$ne',\n not_in: '$nin',\n within: '$geoWithin',\n}\n"],"names":["operatorMap","all","equals","exists","greater_than","greater_than_equal","in","intersects","less_than","less_than_equal","near","not_equals","not_in","within"],"rangeMappings":";;;;;;;;;;;;;;","mappings":"AAAA,OAAO,MAAMA,cAAc;IACzBC,KAAK;IACLC,QAAQ;IACRC,QAAQ;IACRC,cAAc;IACdC,oBAAoB;IACpBC,IAAI;IACJC,YAAY;IACZC,WAAW;IACXC,iBAAiB;IACjBC,MAAM;IACNC,YAAY;IACZC,QAAQ;IACRC,QAAQ;AACV,EAAC"}
|