@payloadcms/db-mongodb 3.0.0-alpha.9 → 3.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/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.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.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 +65 -80
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +33 -39
- 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 +21 -32
- 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 +24 -26
- 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 +9 -24
- package/dist/queries/sanitizeQueryValue.js.map +1 -0
- 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.js +2 -12
- 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 +18 -10
- package/src/index.ts +198 -0
|
@@ -1,36 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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 { fieldAffectsData } from 'payload/types';
|
|
5
|
+
import { validOperators } from 'payload/types';
|
|
6
|
+
import { operatorMap } from './operatorMap.js';
|
|
7
|
+
import { sanitizeQueryValue } from './sanitizeQueryValue.js';
|
|
8
|
+
const ObjectId = ObjectIdImport.default || ObjectIdImport;
|
|
22
9
|
const subQueryOptions = {
|
|
23
10
|
lean: true,
|
|
24
11
|
limit: 50
|
|
25
12
|
};
|
|
26
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Convert the Payload key / value / operator into a MongoDB query
|
|
15
|
+
*/ export async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPath, locale, operator, payload, val }) {
|
|
27
16
|
// Replace GraphQL nested field double underscore formatting
|
|
28
17
|
let sanitizedPath = incomingPath.replace(/__/g, '.');
|
|
29
18
|
if (sanitizedPath === 'id') sanitizedPath = '_id';
|
|
30
19
|
let paths = [];
|
|
31
20
|
let hasCustomID = false;
|
|
32
21
|
if (sanitizedPath === '_id') {
|
|
33
|
-
const customIDfield = payload.collections[collectionSlug]?.config.fields.find((field)=>
|
|
22
|
+
const customIDfield = payload.collections[collectionSlug]?.config.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
|
|
34
23
|
let idFieldType = 'text';
|
|
35
24
|
if (customIDfield) {
|
|
36
25
|
if (customIDfield?.type === 'text' || customIDfield?.type === 'number') {
|
|
@@ -48,7 +37,7 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
48
37
|
path: '_id'
|
|
49
38
|
});
|
|
50
39
|
} else {
|
|
51
|
-
paths = await
|
|
40
|
+
paths = await getLocalizedPaths({
|
|
52
41
|
collectionSlug,
|
|
53
42
|
fields,
|
|
54
43
|
globalSlug,
|
|
@@ -59,7 +48,7 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
59
48
|
}
|
|
60
49
|
const [{ field, path }] = paths;
|
|
61
50
|
if (path) {
|
|
62
|
-
const { operator: formattedOperator, rawQuery, val: formattedValue } =
|
|
51
|
+
const { operator: formattedOperator, rawQuery, val: formattedValue } = sanitizeQueryValue({
|
|
63
52
|
field,
|
|
64
53
|
hasCustomID,
|
|
65
54
|
operator,
|
|
@@ -98,7 +87,7 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
98
87
|
result.forEach((doc)=>{
|
|
99
88
|
const stringID = doc._id.toString();
|
|
100
89
|
$in.push(stringID);
|
|
101
|
-
if (
|
|
90
|
+
if (mongoose.Types.ObjectId.isValid(stringID)) {
|
|
102
91
|
$in.push(doc._id);
|
|
103
92
|
}
|
|
104
93
|
});
|
|
@@ -142,8 +131,8 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
142
131
|
}, Promise.resolve(initialRelationshipQuery));
|
|
143
132
|
return relationshipQuery;
|
|
144
133
|
}
|
|
145
|
-
if (formattedOperator &&
|
|
146
|
-
const operatorKey =
|
|
134
|
+
if (formattedOperator && validOperators.includes(formattedOperator)) {
|
|
135
|
+
const operatorKey = operatorMap[formattedOperator];
|
|
147
136
|
if (field.type === 'relationship' || field.type === 'upload') {
|
|
148
137
|
let hasNumberIDRelation;
|
|
149
138
|
const result = {
|
|
@@ -158,10 +147,10 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
158
147
|
}
|
|
159
148
|
};
|
|
160
149
|
if (typeof formattedValue === 'string') {
|
|
161
|
-
if (
|
|
150
|
+
if (mongoose.Types.ObjectId.isValid(formattedValue)) {
|
|
162
151
|
result.value.$or.push({
|
|
163
152
|
[path]: {
|
|
164
|
-
[operatorKey]: new
|
|
153
|
+
[operatorKey]: new ObjectId(formattedValue)
|
|
165
154
|
}
|
|
166
155
|
});
|
|
167
156
|
} else {
|
|
@@ -169,7 +158,7 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
169
158
|
field.relationTo
|
|
170
159
|
]).forEach((relationTo)=>{
|
|
171
160
|
const isRelatedToCustomNumberID = payload.collections[relationTo]?.config?.fields.find((relatedField)=>{
|
|
172
|
-
return
|
|
161
|
+
return fieldAffectsData(relatedField) && relatedField.name === 'id' && relatedField.type === 'number';
|
|
173
162
|
});
|
|
174
163
|
if (isRelatedToCustomNumberID) {
|
|
175
164
|
if (isRelatedToCustomNumberID.type === 'number') hasNumberIDRelation = true;
|
|
@@ -219,4 +208,4 @@ async function buildSearchParam({ collectionSlug, fields, globalSlug, incomingPa
|
|
|
219
208
|
return undefined;
|
|
220
209
|
}
|
|
221
210
|
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2J1aWxkU2VhcmNoUGFyYW1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF5bG9hZCB9IGZyb20gJ3BheWxvYWQnXG5pbXBvcnQgdHlwZSB7IFBhdGhUb1F1ZXJ5IH0gZnJvbSAncGF5bG9hZC9kYXRhYmFzZSdcbmltcG9ydCB0eXBlIHsgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBPcGVyYXRvciB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5cbmltcG9ydCBPYmplY3RJZCBmcm9tICdic29uLW9iamVjdGlkJ1xuaW1wb3J0IG1vbmdvb3NlIGZyb20gJ21vbmdvb3NlJ1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkUGF0aHMgfSBmcm9tICdwYXlsb2FkL2RhdGFiYXNlJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5pbXBvcnQgeyB2YWxpZE9wZXJhdG9ycyB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5cbmltcG9ydCB0eXBlIHsgTW9uZ29vc2VBZGFwdGVyIH0gZnJvbSAnLi4nXG5cbmltcG9ydCB7IG9wZXJhdG9yTWFwIH0gZnJvbSAnLi9vcGVyYXRvck1hcCdcbmltcG9ydCB7IHNhbml0aXplUXVlcnlWYWx1ZSB9IGZyb20gJy4vc2FuaXRpemVRdWVyeVZhbHVlJ1xuXG50eXBlIFNlYXJjaFBhcmFtID0ge1xuICBwYXRoPzogc3RyaW5nXG4gIHJhd1F1ZXJ5PzogdW5rbm93blxuICB2YWx1ZT86IHVua25vd25cbn1cblxuY29uc3Qgc3ViUXVlcnlPcHRpb25zID0ge1xuICBsZWFuOiB0cnVlLFxuICBsaW1pdDogNTAsXG59XG5cbi8qKlxuICogQ29udmVydCB0aGUgUGF5bG9hZCBrZXkgLyB2YWx1ZSAvIG9wZXJhdG9yIGludG8gYSBNb25nb0RCIHF1ZXJ5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNlYXJjaFBhcmFtKHtcbiAgY29sbGVjdGlvblNsdWcsXG4gIGZpZWxkcyxcbiAgZ2xvYmFsU2x1ZyxcbiAgaW5jb21pbmdQYXRoLFxuICBsb2NhbGUsXG4gIG9wZXJhdG9yLFxuICBwYXlsb2FkLFxuICB2YWwsXG59OiB7XG4gIGNvbGxlY3Rpb25TbHVnPzogc3RyaW5nXG4gIGZpZWxkczogRmllbGRbXVxuICBnbG9iYWxTbHVnPzogc3RyaW5nXG4gIGluY29taW5nUGF0aDogc3RyaW5nXG4gIGxvY2FsZT86IHN0cmluZ1xuICBvcGVyYXRvcjogc3RyaW5nXG4gIHBheWxvYWQ6IFBheWxvYWRcbiAgdmFsOiB1bmtub3duXG59KTogUHJvbWlzZTxTZWFyY2hQYXJhbT4ge1xuICAvLyBSZXBsYWNlIEdyYXBoUUwgbmVzdGVkIGZpZWxkIGRvdWJsZSB1bmRlcnNjb3JlIGZvcm1hdHRpbmdcbiAgbGV0IHNhbml0aXplZFBhdGggPSBpbmNvbWluZ1BhdGgucmVwbGFjZSgvX18vZywgJy4nKVxuICBpZiAoc2FuaXRpemVkUGF0aCA9PT0gJ2lkJykgc2FuaXRpemVkUGF0aCA9ICdfaWQnXG5cbiAgbGV0IHBhdGhzOiBQYXRoVG9RdWVyeVtdID0gW11cblxuICBsZXQgaGFzQ3VzdG9tSUQgPSBmYWxzZVxuXG4gIGlmIChzYW5pdGl6ZWRQYXRoID09PSAnX2lkJykge1xuICAgIGNvbnN0IGN1c3RvbUlEZmllbGQgPSBwYXlsb2FkLmNvbGxlY3Rpb25zW2NvbGxlY3Rpb25TbHVnXT8uY29uZmlnLmZpZWxkcy5maW5kKFxuICAgICAgKGZpZWxkKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZC5uYW1lID09PSAnaWQnLFxuICAgIClcblxuICAgIGxldCBpZEZpZWxkVHlwZTogJ251bWJlcicgfCAndGV4dCcgPSAndGV4dCdcblxuICAgIGlmIChjdXN0b21JRGZpZWxkKSB7XG4gICAgICBpZiAoY3VzdG9tSURmaWVsZD8udHlwZSA9PT0gJ3RleHQnIHx8IGN1c3RvbUlEZmllbGQ/LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlkRmllbGRUeXBlID0gY3VzdG9tSURmaWVsZC50eXBlXG4gICAgICB9XG5cbiAgICAgIGhhc0N1c3RvbUlEID0gdHJ1ZVxuICAgIH1cblxuICAgIHBhdGhzLnB1c2goe1xuICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICBjb21wbGV0ZTogdHJ1ZSxcbiAgICAgIGZpZWxkOiB7XG4gICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgIHR5cGU6IGlkRmllbGRUeXBlLFxuICAgICAgfSBhcyBGaWVsZCxcbiAgICAgIHBhdGg6ICdfaWQnLFxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgcGF0aHMgPSBhd2FpdCBnZXRMb2NhbGl6ZWRQYXRocyh7XG4gICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGdsb2JhbFNsdWcsXG4gICAgICBpbmNvbWluZ1BhdGg6IHNhbml0aXplZFBhdGgsXG4gICAgICBsb2NhbGUsXG4gICAgICBwYXlsb2FkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBbeyBmaWVsZCwgcGF0aCB9XSA9IHBhdGhzXG5cbiAgaWYgKHBhdGgpIHtcbiAgICBjb25zdCB7XG4gICAgICBvcGVyYXRvcjogZm9ybWF0dGVkT3BlcmF0b3IsXG4gICAgICByYXdRdWVyeSxcbiAgICAgIHZhbDogZm9ybWF0dGVkVmFsdWUsXG4gICAgfSA9IHNhbml0aXplUXVlcnlWYWx1ZSh7XG4gICAgICBmaWVsZCxcbiAgICAgIGhhc0N1c3RvbUlELFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBwYXRoLFxuICAgICAgdmFsLFxuICAgIH0pXG5cbiAgICBpZiAocmF3UXVlcnkpIHJldHVybiB7IHZhbHVlOiByYXdRdWVyeSB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29sbGVjdGlvbnMgdG8gc2VhcmNoIHRocm91Z2gsXG4gICAgLy8gUmVjdXJzaXZlbHkgYnVpbGQgdXAgYSBsaXN0IG9mIHF1ZXJ5IGNvbnN0cmFpbnRzXG4gICAgaWYgKHBhdGhzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIFJlbW92ZSB0b3AgY29sbGVjdGlvbiBhbmQgcmV2ZXJzZSBhcnJheVxuICAgICAgLy8gdG8gd29yayBiYWNrd2FyZHMgZnJvbSB0b3BcbiAgICAgIGNvbnN0IHBhdGhzVG9RdWVyeSA9IHBhdGhzLnNsaWNlKDEpLnJldmVyc2UoKVxuXG4gICAgICBjb25zdCBpbml0aWFsUmVsYXRpb25zaGlwUXVlcnkgPSB7XG4gICAgICAgIHZhbHVlOiB7fSxcbiAgICAgIH0gYXMgU2VhcmNoUGFyYW1cblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwUXVlcnkgPSBhd2FpdCBwYXRoc1RvUXVlcnkucmVkdWNlKFxuICAgICAgICBhc3luYyAocHJpb3JRdWVyeSwgeyBjb2xsZWN0aW9uU2x1Zzogc2x1ZywgcGF0aDogc3ViUGF0aCB9LCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJpb3JRdWVyeVJlc3VsdCA9IGF3YWl0IHByaW9yUXVlcnlcblxuICAgICAgICAgIGNvbnN0IFN1Yk1vZGVsID0gKHBheWxvYWQuZGIgYXMgTW9uZ29vc2VBZGFwdGVyKS5jb2xsZWN0aW9uc1tzbHVnXVxuXG4gICAgICAgICAgLy8gT24gdGhlIFwiZGVlcGVzdFwiIGNvbGxlY3Rpb24sXG4gICAgICAgICAgLy8gU2VhcmNoIG9uIHRoZSB2YWx1ZSBwYXNzZWQgdGhyb3VnaCB0aGUgcXVlcnlcbiAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3ViUXVlcnkgPSBhd2FpdCBTdWJNb2RlbC5idWlsZFF1ZXJ5KHtcbiAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgIFtzdWJQYXRoXToge1xuICAgICAgICAgICAgICAgICAgW2Zvcm1hdHRlZE9wZXJhdG9yXTogdmFsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBTdWJNb2RlbC5maW5kKHN1YlF1ZXJ5LCBzdWJRdWVyeU9wdGlvbnMpXG5cbiAgICAgICAgICAgIGNvbnN0ICRpbjogdW5rbm93bltdID0gW11cblxuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goKGRvYykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdHJpbmdJRCA9IGRvYy5faWQudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAkaW4ucHVzaChzdHJpbmdJRClcblxuICAgICAgICAgICAgICBpZiAobW9uZ29vc2UuVHlwZXMuT2JqZWN0SWQuaXNWYWxpZChzdHJpbmdJRCkpIHtcbiAgICAgICAgICAgICAgICAkaW4ucHVzaChkb2MuX2lkKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAocGF0aHNUb1F1ZXJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHsgJGluIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmV4dFN1YlBhdGggPSBwYXRoc1RvUXVlcnlbaSArIDFdLnBhdGhcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHsgW25leHRTdWJQYXRoXTogeyAkaW4gfSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN1YlF1ZXJ5ID0gcHJpb3JRdWVyeVJlc3VsdC52YWx1ZVxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFN1Yk1vZGVsLmZpbmQoc3ViUXVlcnksIHN1YlF1ZXJ5T3B0aW9ucylcblxuICAgICAgICAgIGNvbnN0ICRpbiA9IHJlc3VsdC5tYXAoKGRvYykgPT4gZG9jLl9pZC50b1N0cmluZygpKVxuXG4gICAgICAgICAgLy8gSWYgaXQgaXMgdGhlIGxhc3QgcmVjdXJzaW9uXG4gICAgICAgICAgLy8gdGhlbiBwYXNzIHRocm91Z2ggdGhlIHNlYXJjaCBwYXJhbVxuICAgICAgICAgIGlmIChpICsgMSA9PT0gcGF0aHNUb1F1ZXJ5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgdmFsdWU6IHsgJGluIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIF9pZDogeyAkaW4gfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBQcm9taXNlLnJlc29sdmUoaW5pdGlhbFJlbGF0aW9uc2hpcFF1ZXJ5KSxcbiAgICAgIClcblxuICAgICAgcmV0dXJuIHJlbGF0aW9uc2hpcFF1ZXJ5XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdHRlZE9wZXJhdG9yICYmIHZhbGlkT3BlcmF0b3JzLmluY2x1ZGVzKGZvcm1hdHRlZE9wZXJhdG9yIGFzIE9wZXJhdG9yKSkge1xuICAgICAgY29uc3Qgb3BlcmF0b3JLZXkgPSBvcGVyYXRvck1hcFtmb3JtYXR0ZWRPcGVyYXRvcl1cblxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdyZWxhdGlvbnNoaXAnIHx8IGZpZWxkLnR5cGUgPT09ICd1cGxvYWQnKSB7XG4gICAgICAgIGxldCBoYXNOdW1iZXJJRFJlbGF0aW9uXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAkb3I6IFt7IFtwYXRoXTogeyBbb3BlcmF0b3JLZXldOiBmb3JtYXR0ZWRWYWx1ZSB9IH1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlZFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmIChtb25nb29zZS5UeXBlcy5PYmplY3RJZC5pc1ZhbGlkKGZvcm1hdHRlZFZhbHVlKSkge1xuICAgICAgICAgICAgcmVzdWx0LnZhbHVlLiRvci5wdXNoKHsgW3BhdGhdOiB7IFtvcGVyYXRvcktleV06IG5ldyBPYmplY3RJZChmb3JtYXR0ZWRWYWx1ZSkgfSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICA7KEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbykgPyBmaWVsZC5yZWxhdGlvblRvIDogW2ZpZWxkLnJlbGF0aW9uVG9dKS5mb3JFYWNoKFxuICAgICAgICAgICAgICAocmVsYXRpb25UbykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVsYXRlZFRvQ3VzdG9tTnVtYmVySUQgPSBwYXlsb2FkLmNvbGxlY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgcmVsYXRpb25Ub1xuICAgICAgICAgICAgICAgIF0/LmNvbmZpZz8uZmllbGRzLmZpbmQoKHJlbGF0ZWRGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgZmllbGRBZmZlY3RzRGF0YShyZWxhdGVkRmllbGQpICYmXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRGaWVsZC5uYW1lID09PSAnaWQnICYmXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRGaWVsZC50eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9DdXN0b21OdW1iZXJJRCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGlzUmVsYXRlZFRvQ3VzdG9tTnVtYmVySUQudHlwZSA9PT0gJ251bWJlcicpIGhhc051bWJlcklEUmVsYXRpb24gPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoaGFzTnVtYmVySURSZWxhdGlvbilcbiAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlLiRvci5wdXNoKHsgW3BhdGhdOiB7IFtvcGVyYXRvcktleV06IHBhcnNlRmxvYXQoZm9ybWF0dGVkVmFsdWUpIH0gfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0LnZhbHVlLiRvci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXR0ZWRPcGVyYXRvciA9PT0gJ2xpa2UnICYmIHR5cGVvZiBmb3JtYXR0ZWRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qgd29yZHMgPSBmb3JtYXR0ZWRWYWx1ZS5zcGxpdCgnICcpXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAkYW5kOiB3b3Jkcy5tYXAoKHdvcmQpID0+ICh7XG4gICAgICAgICAgICAgIFtwYXRoXToge1xuICAgICAgICAgICAgICAgICRvcHRpb25zOiAnaScsXG4gICAgICAgICAgICAgICAgJHJlZ2V4OiB3b3JkLnJlcGxhY2UoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cblxuICAgICAgLy8gU29tZSBvcGVyYXRvcnMgbGlrZSAnbmVhcicgbmVlZCB0byBkZWZpbmUgYSBmdWxsIHF1ZXJ5XG4gICAgICAvLyBzbyBpZiB0aGVyZSBpcyBubyBvcGVyYXRvciBrZXksIGp1c3QgcmV0dXJuIHRoZSB2YWx1ZVxuICAgICAgaWYgKCFvcGVyYXRvcktleSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWU6IGZvcm1hdHRlZFZhbHVlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIHZhbHVlOiB7IFtvcGVyYXRvcktleV06IGZvcm1hdHRlZFZhbHVlIH0sXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbiJdLCJuYW1lcyI6WyJidWlsZFNlYXJjaFBhcmFtIiwic3ViUXVlcnlPcHRpb25zIiwibGVhbiIsImxpbWl0IiwiY29sbGVjdGlvblNsdWciLCJmaWVsZHMiLCJnbG9iYWxTbHVnIiwiaW5jb21pbmdQYXRoIiwibG9jYWxlIiwib3BlcmF0b3IiLCJwYXlsb2FkIiwidmFsIiwic2FuaXRpemVkUGF0aCIsInJlcGxhY2UiLCJwYXRocyIsImhhc0N1c3RvbUlEIiwiY3VzdG9tSURmaWVsZCIsImNvbGxlY3Rpb25zIiwiY29uZmlnIiwiZmluZCIsImZpZWxkIiwiZmllbGRBZmZlY3RzRGF0YSIsIm5hbWUiLCJpZEZpZWxkVHlwZSIsInR5cGUiLCJwdXNoIiwiY29tcGxldGUiLCJwYXRoIiwiZ2V0TG9jYWxpemVkUGF0aHMiLCJmb3JtYXR0ZWRPcGVyYXRvciIsInJhd1F1ZXJ5IiwiZm9ybWF0dGVkVmFsdWUiLCJzYW5pdGl6ZVF1ZXJ5VmFsdWUiLCJ2YWx1ZSIsImxlbmd0aCIsInBhdGhzVG9RdWVyeSIsInNsaWNlIiwicmV2ZXJzZSIsImluaXRpYWxSZWxhdGlvbnNoaXBRdWVyeSIsInJlbGF0aW9uc2hpcFF1ZXJ5IiwicmVkdWNlIiwicHJpb3JRdWVyeSIsInNsdWciLCJzdWJQYXRoIiwiaSIsInByaW9yUXVlcnlSZXN1bHQiLCJTdWJNb2RlbCIsImRiIiwic3ViUXVlcnkiLCJidWlsZFF1ZXJ5Iiwid2hlcmUiLCJyZXN1bHQiLCIkaW4iLCJmb3JFYWNoIiwiZG9jIiwic3RyaW5nSUQiLCJfaWQiLCJ0b1N0cmluZyIsIm1vbmdvb3NlIiwiVHlwZXMiLCJPYmplY3RJZCIsImlzVmFsaWQiLCJuZXh0U3ViUGF0aCIsIm1hcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWRPcGVyYXRvcnMiLCJpbmNsdWRlcyIsIm9wZXJhdG9yS2V5Iiwib3BlcmF0b3JNYXAiLCJoYXNOdW1iZXJJRFJlbGF0aW9uIiwiJG9yIiwiQXJyYXkiLCJpc0FycmF5IiwicmVsYXRpb25UbyIsImlzUmVsYXRlZFRvQ3VzdG9tTnVtYmVySUQiLCJyZWxhdGVkRmllbGQiLCJwYXJzZUZsb2F0Iiwid29yZHMiLCJzcGxpdCIsIiRhbmQiLCJ3b3JkIiwiJG9wdGlvbnMiLCIkcmVnZXgiLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBOEJzQkE7OztlQUFBQTs7O3FFQXpCRDtpRUFDQTswQkFDYTt1QkFDRDs2QkFLTDtvQ0FDTzs7Ozs7O0FBUW5DLE1BQU1DLGtCQUFrQjtJQUN0QkMsTUFBTTtJQUNOQyxPQUFPO0FBQ1Q7QUFLTyxlQUFlSCxpQkFBaUIsRUFDckNJLGNBQWMsRUFDZEMsTUFBTSxFQUNOQyxVQUFVLEVBQ1ZDLFlBQVksRUFDWkMsTUFBTSxFQUNOQyxRQUFRLEVBQ1JDLE9BQU8sRUFDUEMsR0FBRyxFQVVKO0lBQ0MsNERBQTREO0lBQzVELElBQUlDLGdCQUFnQkwsYUFBYU0sT0FBTyxDQUFDLE9BQU87SUFDaEQsSUFBSUQsa0JBQWtCLE1BQU1BLGdCQUFnQjtJQUU1QyxJQUFJRSxRQUF1QixFQUFFO0lBRTdCLElBQUlDLGNBQWM7SUFFbEIsSUFBSUgsa0JBQWtCLE9BQU87UUFDM0IsTUFBTUksZ0JBQWdCTixRQUFRTyxXQUFXLENBQUNiLGVBQWUsRUFBRWMsT0FBT2IsT0FBT2MsS0FDdkUsQ0FBQ0MsUUFBVUMsSUFBQUEsdUJBQWdCLEVBQUNELFVBQVVBLE1BQU1FLElBQUksS0FBSztRQUd2RCxJQUFJQyxjQUFpQztRQUVyQyxJQUFJUCxlQUFlO1lBQ2pCLElBQUlBLGVBQWVRLFNBQVMsVUFBVVIsZUFBZVEsU0FBUyxVQUFVO2dCQUN0RUQsY0FBY1AsY0FBY1EsSUFBSTtZQUNsQztZQUVB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
|
|
211
|
+
//# 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 customIDfield = payload.collections[collectionSlug]?.config.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n\n let idFieldType: 'number' | 'text' = 'text'\n\n if (customIDfield) {\n if (customIDfield?.type === 'text' || customIDfield?.type === 'number') {\n idFieldType = customIDfield.type\n }\n\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 = payload.collections[\n relationTo\n ]?.config?.fields.find((relatedField) => {\n return (\n fieldAffectsData(relatedField) &&\n relatedField.name === 'id' &&\n relatedField.type === 'number'\n )\n })\n\n if (isRelatedToCustomNumberID) {\n if (isRelatedToCustomNumberID.type === 'number') 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","fieldAffectsData","validOperators","operatorMap","sanitizeQueryValue","ObjectId","default","subQueryOptions","lean","limit","buildSearchParam","collectionSlug","fields","globalSlug","incomingPath","locale","operator","payload","val","sanitizedPath","replace","paths","hasCustomID","customIDfield","collections","config","find","field","name","idFieldType","type","push","complete","path","formattedOperator","rawQuery","formattedValue","value","length","pathsToQuery","slice","reverse","initialRelationshipQuery","relationshipQuery","reduce","priorQuery","slug","subPath","i","priorQueryResult","SubModel","db","subQuery","buildQuery","where","result","$in","forEach","doc","stringID","_id","toString","Types","isValid","nextSubPath","map","Promise","resolve","includes","operatorKey","hasNumberIDRelation","$or","Array","isArray","relationTo","isRelatedToCustomNumberID","relatedField","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,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
});
|
|
5
|
-
const _config = require("payload/config");
|
|
6
|
-
const _getLocalizedSortProperty = require("./getLocalizedSortProperty");
|
|
7
|
-
const config = {
|
|
1
|
+
import { sanitizeConfig } from 'payload/config';
|
|
2
|
+
import { getLocalizedSortProperty } from './getLocalizedSortProperty.js';
|
|
3
|
+
const config = sanitizeConfig({
|
|
8
4
|
localization: {
|
|
9
5
|
locales: [
|
|
10
6
|
'en',
|
|
11
7
|
'es'
|
|
12
|
-
]
|
|
8
|
+
],
|
|
9
|
+
defaultLocale: 'en',
|
|
10
|
+
fallback: true
|
|
13
11
|
}
|
|
14
|
-
};
|
|
12
|
+
});
|
|
15
13
|
describe('get localized sort property', ()=>{
|
|
16
14
|
it('passes through a non-localized sort property', ()=>{
|
|
17
|
-
const result =
|
|
15
|
+
const result = getLocalizedSortProperty({
|
|
18
16
|
segments: [
|
|
19
17
|
'title'
|
|
20
18
|
],
|
|
21
|
-
config
|
|
19
|
+
config,
|
|
22
20
|
fields: [
|
|
23
21
|
{
|
|
24
22
|
name: 'title',
|
|
@@ -30,11 +28,11 @@ describe('get localized sort property', ()=>{
|
|
|
30
28
|
expect(result).toStrictEqual('title');
|
|
31
29
|
});
|
|
32
30
|
it('properly localizes an un-localized sort property', ()=>{
|
|
33
|
-
const result =
|
|
31
|
+
const result = getLocalizedSortProperty({
|
|
34
32
|
segments: [
|
|
35
33
|
'title'
|
|
36
34
|
],
|
|
37
|
-
config
|
|
35
|
+
config,
|
|
38
36
|
fields: [
|
|
39
37
|
{
|
|
40
38
|
name: 'title',
|
|
@@ -47,12 +45,12 @@ describe('get localized sort property', ()=>{
|
|
|
47
45
|
expect(result).toStrictEqual('title.en');
|
|
48
46
|
});
|
|
49
47
|
it('keeps specifically asked-for localized sort properties', ()=>{
|
|
50
|
-
const result =
|
|
48
|
+
const result = getLocalizedSortProperty({
|
|
51
49
|
segments: [
|
|
52
50
|
'title',
|
|
53
51
|
'es'
|
|
54
52
|
],
|
|
55
|
-
config
|
|
53
|
+
config,
|
|
56
54
|
fields: [
|
|
57
55
|
{
|
|
58
56
|
name: 'title',
|
|
@@ -65,12 +63,12 @@ describe('get localized sort property', ()=>{
|
|
|
65
63
|
expect(result).toStrictEqual('title.es');
|
|
66
64
|
});
|
|
67
65
|
it('properly localizes nested sort properties', ()=>{
|
|
68
|
-
const result =
|
|
66
|
+
const result = getLocalizedSortProperty({
|
|
69
67
|
segments: [
|
|
70
68
|
'group',
|
|
71
69
|
'title'
|
|
72
70
|
],
|
|
73
|
-
config
|
|
71
|
+
config,
|
|
74
72
|
fields: [
|
|
75
73
|
{
|
|
76
74
|
name: 'group',
|
|
@@ -89,13 +87,13 @@ describe('get localized sort property', ()=>{
|
|
|
89
87
|
expect(result).toStrictEqual('group.title.en');
|
|
90
88
|
});
|
|
91
89
|
it('keeps requested locale with nested sort properties', ()=>{
|
|
92
|
-
const result =
|
|
90
|
+
const result = getLocalizedSortProperty({
|
|
93
91
|
segments: [
|
|
94
92
|
'group',
|
|
95
93
|
'title',
|
|
96
94
|
'es'
|
|
97
95
|
],
|
|
98
|
-
config
|
|
96
|
+
config,
|
|
99
97
|
fields: [
|
|
100
98
|
{
|
|
101
99
|
name: 'group',
|
|
@@ -114,11 +112,11 @@ describe('get localized sort property', ()=>{
|
|
|
114
112
|
expect(result).toStrictEqual('group.title.es');
|
|
115
113
|
});
|
|
116
114
|
it('properly localizes field within row', ()=>{
|
|
117
|
-
const result =
|
|
115
|
+
const result = getLocalizedSortProperty({
|
|
118
116
|
segments: [
|
|
119
117
|
'title'
|
|
120
118
|
],
|
|
121
|
-
config
|
|
119
|
+
config,
|
|
122
120
|
fields: [
|
|
123
121
|
{
|
|
124
122
|
type: 'row',
|
|
@@ -136,12 +134,12 @@ describe('get localized sort property', ()=>{
|
|
|
136
134
|
expect(result).toStrictEqual('title.en');
|
|
137
135
|
});
|
|
138
136
|
it('properly localizes field within named tab', ()=>{
|
|
139
|
-
const result =
|
|
137
|
+
const result = getLocalizedSortProperty({
|
|
140
138
|
segments: [
|
|
141
139
|
'tab',
|
|
142
140
|
'title'
|
|
143
141
|
],
|
|
144
|
-
config
|
|
142
|
+
config,
|
|
145
143
|
fields: [
|
|
146
144
|
{
|
|
147
145
|
type: 'tabs',
|
|
@@ -164,11 +162,11 @@ describe('get localized sort property', ()=>{
|
|
|
164
162
|
expect(result).toStrictEqual('tab.title.en');
|
|
165
163
|
});
|
|
166
164
|
it('properly localizes field within unnamed tab', ()=>{
|
|
167
|
-
const result =
|
|
165
|
+
const result = getLocalizedSortProperty({
|
|
168
166
|
segments: [
|
|
169
167
|
'title'
|
|
170
168
|
],
|
|
171
|
-
config
|
|
169
|
+
config,
|
|
172
170
|
fields: [
|
|
173
171
|
{
|
|
174
172
|
type: 'tabs',
|
|
@@ -192,4 +190,4 @@ describe('get localized sort property', ()=>{
|
|
|
192
190
|
});
|
|
193
191
|
});
|
|
194
192
|
|
|
195
|
-
//# sourceMappingURL=
|
|
193
|
+
//# 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\nconst config = sanitizeConfig({\n localization: {\n locales: ['en', 'es'],\n defaultLocale: 'en',\n fallback: true,\n },\n} as Config) as SanitizedConfig\n\ndescribe('get localized sort property', () => {\n it('passes through a non-localized sort property', () => {\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","localization","locales","defaultLocale","fallback","describe","it","result","segments","fields","name","type","locale","expect","toStrictEqual","localized","tabs","label"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
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"}
|