@payloadcms/db-mongodb 3.2.2-canary.b072173 → 3.2.2-canary.d2399ed
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/count.d.ts.map +1 -1
- package/dist/count.js +19 -21
- package/dist/count.js.map +1 -1
- package/dist/countGlobalVersions.d.ts.map +1 -1
- package/dist/countGlobalVersions.js +19 -21
- package/dist/countGlobalVersions.js.map +1 -1
- package/dist/countVersions.d.ts.map +1 -1
- package/dist/countVersions.js +19 -21
- package/dist/countVersions.js.map +1 -1
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +22 -22
- package/dist/create.js.map +1 -1
- package/dist/createGlobal.d.ts.map +1 -1
- package/dist/createGlobal.js +21 -19
- package/dist/createGlobal.js.map +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +35 -30
- package/dist/createGlobalVersion.js.map +1 -1
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +35 -30
- package/dist/createVersion.js.map +1 -1
- package/dist/deleteMany.d.ts.map +1 -1
- package/dist/deleteMany.js +6 -6
- package/dist/deleteMany.js.map +1 -1
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +17 -13
- package/dist/deleteOne.js.map +1 -1
- package/dist/deleteVersions.d.ts.map +1 -1
- package/dist/deleteVersions.js +6 -6
- package/dist/deleteVersions.js.map +1 -1
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +41 -74
- package/dist/find.js.map +1 -1
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +19 -18
- package/dist/findGlobal.js.map +1 -1
- package/dist/findGlobalVersions.d.ts.map +1 -1
- package/dist/findGlobalVersions.js +33 -62
- package/dist/findGlobalVersions.js.map +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +32 -19
- package/dist/findOne.js.map +1 -1
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +34 -62
- package/dist/findVersions.js.map +1 -1
- package/dist/{withSession.d.ts → getSession.d.ts} +2 -4
- package/dist/getSession.d.ts.map +1 -0
- package/dist/{withSession.js → getSession.js} +3 -5
- package/dist/getSession.js.map +1 -0
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.d.ts.map +1 -1
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js +20 -16
- package/dist/predefinedMigrations/migrateRelationshipsV2_V3.js.map +1 -1
- package/dist/predefinedMigrations/migrateVersionsV1_V2.js +2 -2
- package/dist/predefinedMigrations/migrateVersionsV1_V2.js.map +1 -1
- package/dist/queries/buildAndOrConditions.d.ts +3 -1
- package/dist/queries/buildAndOrConditions.d.ts.map +1 -1
- package/dist/queries/buildAndOrConditions.js +2 -1
- package/dist/queries/buildAndOrConditions.js.map +1 -1
- package/dist/queries/buildQuery.d.ts +2 -0
- package/dist/queries/buildQuery.d.ts.map +1 -1
- package/dist/queries/buildQuery.js +2 -6
- package/dist/queries/buildQuery.js.map +1 -1
- package/dist/queries/buildSearchParams.d.ts +3 -1
- package/dist/queries/buildSearchParams.d.ts.map +1 -1
- package/dist/queries/buildSearchParams.js +14 -10
- package/dist/queries/buildSearchParams.js.map +1 -1
- package/dist/queries/buildSortParam.d.ts +1 -7
- package/dist/queries/buildSortParam.d.ts.map +1 -1
- package/dist/queries/buildSortParam.js +2 -2
- package/dist/queries/buildSortParam.js.map +1 -1
- package/dist/queries/getLocalizedSortProperty.js +2 -2
- package/dist/queries/getLocalizedSortProperty.js.map +1 -1
- package/dist/queries/parseParams.d.ts +3 -1
- package/dist/queries/parseParams.d.ts.map +1 -1
- package/dist/queries/parseParams.js +2 -1
- package/dist/queries/parseParams.js.map +1 -1
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/sanitizeQueryValue.js +16 -0
- package/dist/queries/sanitizeQueryValue.js.map +1 -1
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +41 -65
- package/dist/queryDrafts.js.map +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +25 -23
- package/dist/updateGlobal.js.map +1 -1
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +28 -27
- package/dist/updateGlobalVersion.js.map +1 -1
- package/dist/updateOne.d.ts.map +1 -1
- package/dist/updateOne.js +28 -24
- package/dist/updateOne.js.map +1 -1
- package/dist/updateVersion.d.ts.map +1 -1
- package/dist/updateVersion.js +28 -26
- package/dist/updateVersion.js.map +1 -1
- package/dist/utilities/buildJoinAggregation.d.ts +4 -4
- package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
- package/dist/utilities/buildJoinAggregation.js +7 -28
- package/dist/utilities/buildJoinAggregation.js.map +1 -1
- package/dist/utilities/buildProjectionFromSelect.d.ts.map +1 -1
- package/dist/utilities/buildProjectionFromSelect.js +18 -1
- package/dist/utilities/buildProjectionFromSelect.js.map +1 -1
- package/dist/utilities/findMany.d.ts +20 -0
- package/dist/utilities/findMany.d.ts.map +1 -0
- package/dist/utilities/findMany.js +84 -0
- package/dist/utilities/findMany.js.map +1 -0
- package/dist/utilities/getHasNearConstraint.d.ts +3 -0
- package/dist/utilities/getHasNearConstraint.d.ts.map +1 -0
- package/dist/utilities/getHasNearConstraint.js +26 -0
- package/dist/utilities/getHasNearConstraint.js.map +1 -0
- package/dist/utilities/transform.d.ts +17 -0
- package/dist/utilities/transform.d.ts.map +1 -0
- package/dist/utilities/transform.js +250 -0
- package/dist/utilities/transform.js.map +1 -0
- package/dist/utilities/{sanitizeRelationshipIDs.spec.js → transform.spec.js} +23 -7
- package/dist/utilities/transform.spec.js.map +1 -0
- package/package.json +3 -3
- package/dist/utilities/sanitizeInternalFields.d.ts +0 -2
- package/dist/utilities/sanitizeInternalFields.d.ts.map +0 -1
- package/dist/utilities/sanitizeInternalFields.js +0 -20
- package/dist/utilities/sanitizeInternalFields.js.map +0 -1
- package/dist/utilities/sanitizeRelationshipIDs.d.ts +0 -9
- package/dist/utilities/sanitizeRelationshipIDs.d.ts.map +0 -1
- package/dist/utilities/sanitizeRelationshipIDs.js +0 -125
- package/dist/utilities/sanitizeRelationshipIDs.js.map +0 -1
- package/dist/utilities/sanitizeRelationshipIDs.spec.js.map +0 -1
- package/dist/withSession.d.ts.map +0 -1
- package/dist/withSession.js.map +0 -1
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { Types } from 'mongoose';
|
|
2
|
+
import { traverseFields } from 'payload';
|
|
3
|
+
import { fieldAffectsData, fieldIsVirtual } from 'payload/shared';
|
|
4
|
+
function isValidRelationObject(value) {
|
|
5
|
+
return typeof value === 'object' && value !== null && 'relationTo' in value && 'value' in value;
|
|
6
|
+
}
|
|
7
|
+
const convertRelationshipValue = ({ operation, relatedCollection, validateRelationships, value })=>{
|
|
8
|
+
const customIDField = relatedCollection.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
|
|
9
|
+
if (operation === 'read') {
|
|
10
|
+
if (value instanceof Types.ObjectId) {
|
|
11
|
+
return value.toHexString();
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
if (customIDField) {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
if (typeof value === 'string') {
|
|
19
|
+
try {
|
|
20
|
+
return new Types.ObjectId(value);
|
|
21
|
+
} catch (e) {
|
|
22
|
+
if (validateRelationships) {
|
|
23
|
+
throw e;
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
};
|
|
30
|
+
const sanitizeRelationship = ({ config, field, locale, operation, ref, validateRelationships, value })=>{
|
|
31
|
+
if (field.type === 'join') {
|
|
32
|
+
if (operation === 'read' && value && typeof value === 'object' && 'docs' in value && Array.isArray(value.docs)) {
|
|
33
|
+
for(let i = 0; i < value.docs.length; i++){
|
|
34
|
+
const item = value.docs[i];
|
|
35
|
+
if (item instanceof Types.ObjectId) {
|
|
36
|
+
value.docs[i] = item.toHexString();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
let relatedCollection;
|
|
43
|
+
let result = value;
|
|
44
|
+
const hasManyRelations = typeof field.relationTo !== 'string';
|
|
45
|
+
if (!hasManyRelations) {
|
|
46
|
+
relatedCollection = config.collections?.find(({ slug })=>slug === field.relationTo);
|
|
47
|
+
}
|
|
48
|
+
if (Array.isArray(value)) {
|
|
49
|
+
result = value.map((val)=>{
|
|
50
|
+
// Handle has many - polymorphic
|
|
51
|
+
if (isValidRelationObject(val)) {
|
|
52
|
+
const relatedCollectionForSingleValue = config.collections?.find(({ slug })=>slug === val.relationTo);
|
|
53
|
+
if (relatedCollectionForSingleValue) {
|
|
54
|
+
return {
|
|
55
|
+
relationTo: val.relationTo,
|
|
56
|
+
value: convertRelationshipValue({
|
|
57
|
+
operation,
|
|
58
|
+
relatedCollection: relatedCollectionForSingleValue,
|
|
59
|
+
validateRelationships,
|
|
60
|
+
value: val.value
|
|
61
|
+
})
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (relatedCollection) {
|
|
66
|
+
return convertRelationshipValue({
|
|
67
|
+
operation,
|
|
68
|
+
relatedCollection,
|
|
69
|
+
validateRelationships,
|
|
70
|
+
value: val
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return val;
|
|
74
|
+
});
|
|
75
|
+
} else if (isValidRelationObject(value)) {
|
|
76
|
+
relatedCollection = config.collections?.find(({ slug })=>slug === value.relationTo);
|
|
77
|
+
if (relatedCollection) {
|
|
78
|
+
result = {
|
|
79
|
+
relationTo: value.relationTo,
|
|
80
|
+
value: convertRelationshipValue({
|
|
81
|
+
operation,
|
|
82
|
+
relatedCollection,
|
|
83
|
+
validateRelationships,
|
|
84
|
+
value: value.value
|
|
85
|
+
})
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
} else if (relatedCollection) {
|
|
89
|
+
result = convertRelationshipValue({
|
|
90
|
+
operation,
|
|
91
|
+
relatedCollection,
|
|
92
|
+
validateRelationships,
|
|
93
|
+
value
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (locale) {
|
|
97
|
+
ref[locale] = result;
|
|
98
|
+
} else {
|
|
99
|
+
ref[field.name] = result;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* When sending data to Payload - convert Date to string.
|
|
104
|
+
* Vice versa when sending data to MongoDB so dates are stored properly.
|
|
105
|
+
*/ const sanitizeDate = ({ field, locale, operation, ref, value })=>{
|
|
106
|
+
if (!value) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (operation === 'read') {
|
|
110
|
+
if (value instanceof Date) {
|
|
111
|
+
value = value.toISOString();
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
if (typeof value === 'string') {
|
|
115
|
+
value = new Date(value);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (locale) {
|
|
119
|
+
ref[locale] = value;
|
|
120
|
+
} else {
|
|
121
|
+
ref[field.name] = value;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
export const transform = ({ adapter, data, fields, globalSlug, operation, validateRelationships = true })=>{
|
|
125
|
+
if (Array.isArray(data)) {
|
|
126
|
+
for(let i = 0; i < data.length; i++){
|
|
127
|
+
transform({
|
|
128
|
+
adapter,
|
|
129
|
+
data: data[i],
|
|
130
|
+
fields,
|
|
131
|
+
globalSlug,
|
|
132
|
+
operation,
|
|
133
|
+
validateRelationships
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const { payload: { config } } = adapter;
|
|
139
|
+
if (operation === 'read') {
|
|
140
|
+
delete data['__v'];
|
|
141
|
+
data.id = data._id;
|
|
142
|
+
delete data['_id'];
|
|
143
|
+
if (data.id instanceof Types.ObjectId) {
|
|
144
|
+
data.id = data.id.toHexString();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (operation !== 'read') {
|
|
148
|
+
if (operation === 'create' && !data.createdAt) {
|
|
149
|
+
data.createdAt = new Date();
|
|
150
|
+
}
|
|
151
|
+
data.updatedAt = new Date();
|
|
152
|
+
if (globalSlug) {
|
|
153
|
+
data.globalType = globalSlug;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const sanitize = ({ field, ref })=>{
|
|
157
|
+
if (!ref || typeof ref !== 'object') {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (operation !== 'read') {
|
|
161
|
+
if (typeof ref[field.name] === 'undefined' && typeof field.defaultValue !== 'undefined' && typeof field.defaultValue !== 'function') {
|
|
162
|
+
if (field.type === 'point') {
|
|
163
|
+
ref[field.name] = {
|
|
164
|
+
type: 'Point',
|
|
165
|
+
coordinates: field.defaultValue
|
|
166
|
+
};
|
|
167
|
+
} else {
|
|
168
|
+
ref[field.name] = field.defaultValue;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (fieldIsVirtual(field)) {
|
|
172
|
+
delete ref[field.name];
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (field.type === 'date') {
|
|
177
|
+
if (config.localization && field.localized) {
|
|
178
|
+
const fieldRef = ref[field.name];
|
|
179
|
+
if (!fieldRef || typeof fieldRef !== 'object') {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
for (const locale of config.localization.localeCodes){
|
|
183
|
+
sanitizeDate({
|
|
184
|
+
field,
|
|
185
|
+
operation,
|
|
186
|
+
ref: fieldRef,
|
|
187
|
+
value: fieldRef[locale]
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
} else {
|
|
191
|
+
sanitizeDate({
|
|
192
|
+
field,
|
|
193
|
+
operation,
|
|
194
|
+
ref: ref,
|
|
195
|
+
value: ref[field.name]
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (field.type === 'relationship' || field.type === 'upload' || operation === 'read' && field.type === 'join') {
|
|
200
|
+
// sanitize passed undefined in objects to null
|
|
201
|
+
if (operation !== 'read' && field.name in ref && ref[field.name] === undefined) {
|
|
202
|
+
ref[field.name] = null;
|
|
203
|
+
}
|
|
204
|
+
if (!ref[field.name]) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// handle localized relationships
|
|
208
|
+
if (config.localization && field.localized) {
|
|
209
|
+
const locales = config.localization.locales;
|
|
210
|
+
const fieldRef = ref[field.name];
|
|
211
|
+
if (typeof fieldRef !== 'object') {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
for (const { code } of locales){
|
|
215
|
+
const value = ref[field.name][code];
|
|
216
|
+
if (value) {
|
|
217
|
+
sanitizeRelationship({
|
|
218
|
+
config,
|
|
219
|
+
field,
|
|
220
|
+
locale: code,
|
|
221
|
+
operation,
|
|
222
|
+
ref: fieldRef,
|
|
223
|
+
validateRelationships,
|
|
224
|
+
value
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
} else {
|
|
229
|
+
// handle non-localized relationships
|
|
230
|
+
sanitizeRelationship({
|
|
231
|
+
config,
|
|
232
|
+
field,
|
|
233
|
+
locale: undefined,
|
|
234
|
+
operation,
|
|
235
|
+
ref: ref,
|
|
236
|
+
validateRelationships,
|
|
237
|
+
value: ref[field.name]
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
traverseFields({
|
|
243
|
+
callback: sanitize,
|
|
244
|
+
fillEmpty: false,
|
|
245
|
+
flattenedFields: fields,
|
|
246
|
+
ref: data
|
|
247
|
+
});
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/transform.ts"],"sourcesContent":["import type {\n CollectionConfig,\n DateField,\n FlattenedField,\n JoinField,\n RelationshipField,\n SanitizedConfig,\n TraverseFlattenedFieldsCallback,\n UploadField,\n} from 'payload'\n\nimport { Types } from 'mongoose'\nimport { traverseFields } from 'payload'\nimport { fieldAffectsData, fieldIsVirtual } from 'payload/shared'\n\nimport type { MongooseAdapter } from '../index.js'\n\ntype Args = {\n adapter: MongooseAdapter\n data: Record<string, unknown> | Record<string, unknown>[]\n fields: FlattenedField[]\n globalSlug?: string\n operation: 'create' | 'read' | 'update'\n /**\n * Throw errors on invalid relationships\n * @default true\n */\n validateRelationships?: boolean\n}\n\ninterface RelationObject {\n relationTo: string\n value: number | string\n}\n\nfunction isValidRelationObject(value: unknown): value is RelationObject {\n return typeof value === 'object' && value !== null && 'relationTo' in value && 'value' in value\n}\n\nconst convertRelationshipValue = ({\n operation,\n relatedCollection,\n validateRelationships,\n value,\n}: {\n operation: Args['operation']\n relatedCollection: CollectionConfig\n validateRelationships?: boolean\n value: unknown\n}) => {\n const customIDField = relatedCollection.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n\n if (operation === 'read') {\n if (value instanceof Types.ObjectId) {\n return value.toHexString()\n }\n\n return value\n }\n\n if (customIDField) {\n return value\n }\n\n if (typeof value === 'string') {\n try {\n return new Types.ObjectId(value)\n } catch (e) {\n if (validateRelationships) {\n throw e\n }\n return value\n }\n }\n\n return value\n}\n\nconst sanitizeRelationship = ({\n config,\n field,\n locale,\n operation,\n ref,\n validateRelationships,\n value,\n}: {\n config: SanitizedConfig\n field: JoinField | RelationshipField | UploadField\n locale?: string\n operation: Args['operation']\n ref: Record<string, unknown>\n validateRelationships?: boolean\n value?: unknown\n}) => {\n if (field.type === 'join') {\n if (\n operation === 'read' &&\n value &&\n typeof value === 'object' &&\n 'docs' in value &&\n Array.isArray(value.docs)\n ) {\n for (let i = 0; i < value.docs.length; i++) {\n const item = value.docs[i]\n if (item instanceof Types.ObjectId) {\n value.docs[i] = item.toHexString()\n }\n }\n }\n\n return value\n }\n let relatedCollection: CollectionConfig | undefined\n let result = value\n\n const hasManyRelations = typeof field.relationTo !== 'string'\n\n if (!hasManyRelations) {\n relatedCollection = config.collections?.find(({ slug }) => slug === field.relationTo)\n }\n\n if (Array.isArray(value)) {\n result = value.map((val) => {\n // Handle has many - polymorphic\n if (isValidRelationObject(val)) {\n const relatedCollectionForSingleValue = config.collections?.find(\n ({ slug }) => slug === val.relationTo,\n )\n\n if (relatedCollectionForSingleValue) {\n return {\n relationTo: val.relationTo,\n value: convertRelationshipValue({\n operation,\n relatedCollection: relatedCollectionForSingleValue,\n validateRelationships,\n value: val.value,\n }),\n }\n }\n }\n\n if (relatedCollection) {\n return convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value: val,\n })\n }\n\n return val\n })\n }\n // Handle has one - polymorphic\n else if (isValidRelationObject(value)) {\n relatedCollection = config.collections?.find(({ slug }) => slug === value.relationTo)\n\n if (relatedCollection) {\n result = {\n relationTo: value.relationTo,\n value: convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value: value.value,\n }),\n }\n }\n }\n // Handle has one\n else if (relatedCollection) {\n result = convertRelationshipValue({\n operation,\n relatedCollection,\n validateRelationships,\n value,\n })\n }\n\n if (locale) {\n ref[locale] = result\n } else {\n ref[field.name] = result\n }\n}\n\n/**\n * When sending data to Payload - convert Date to string.\n * Vice versa when sending data to MongoDB so dates are stored properly.\n */\nconst sanitizeDate = ({\n field,\n locale,\n operation,\n ref,\n value,\n}: {\n field: DateField\n locale?: string\n operation: Args['operation']\n ref: Record<string, unknown>\n value: unknown\n}) => {\n if (!value) {\n return\n }\n\n if (operation === 'read') {\n if (value instanceof Date) {\n value = value.toISOString()\n }\n } else {\n if (typeof value === 'string') {\n value = new Date(value)\n }\n }\n\n if (locale) {\n ref[locale] = value\n } else {\n ref[field.name] = value\n }\n}\n\nexport const transform = ({\n adapter,\n data,\n fields,\n globalSlug,\n operation,\n validateRelationships = true,\n}: Args) => {\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n transform({ adapter, data: data[i], fields, globalSlug, operation, validateRelationships })\n }\n return\n }\n\n const {\n payload: { config },\n } = adapter\n\n if (operation === 'read') {\n delete data['__v']\n data.id = data._id\n delete data['_id']\n\n if (data.id instanceof Types.ObjectId) {\n data.id = data.id.toHexString()\n }\n }\n\n if (operation !== 'read') {\n if (operation === 'create' && !data.createdAt) {\n data.createdAt = new Date()\n }\n\n data.updatedAt = new Date()\n\n if (globalSlug) {\n data.globalType = globalSlug\n }\n }\n\n const sanitize: TraverseFlattenedFieldsCallback = ({ field, ref }) => {\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n if (operation !== 'read') {\n if (\n typeof ref[field.name] === 'undefined' &&\n typeof field.defaultValue !== 'undefined' &&\n typeof field.defaultValue !== 'function'\n ) {\n if (field.type === 'point') {\n ref[field.name] = {\n type: 'Point',\n coordinates: field.defaultValue,\n }\n } else {\n ref[field.name] = field.defaultValue\n }\n }\n\n if (fieldIsVirtual(field)) {\n delete ref[field.name]\n return\n }\n }\n\n if (field.type === 'date') {\n if (config.localization && field.localized) {\n const fieldRef = ref[field.name]\n if (!fieldRef || typeof fieldRef !== 'object') {\n return\n }\n\n for (const locale of config.localization.localeCodes) {\n sanitizeDate({\n field,\n operation,\n ref: fieldRef,\n value: fieldRef[locale],\n })\n }\n } else {\n sanitizeDate({\n field,\n operation,\n ref: ref as Record<string, unknown>,\n value: ref[field.name],\n })\n }\n }\n\n if (\n field.type === 'relationship' ||\n field.type === 'upload' ||\n (operation === 'read' && field.type === 'join')\n ) {\n // sanitize passed undefined in objects to null\n if (operation !== 'read' && field.name in ref && ref[field.name] === undefined) {\n ref[field.name] = null\n }\n\n if (!ref[field.name]) {\n return\n }\n\n // handle localized relationships\n if (config.localization && field.localized) {\n const locales = config.localization.locales\n const fieldRef = ref[field.name]\n if (typeof fieldRef !== 'object') {\n return\n }\n\n for (const { code } of locales) {\n const value = ref[field.name][code]\n if (value) {\n sanitizeRelationship({\n config,\n field,\n locale: code,\n operation,\n ref: fieldRef,\n validateRelationships,\n value,\n })\n }\n }\n } else {\n // handle non-localized relationships\n sanitizeRelationship({\n config,\n field,\n locale: undefined,\n operation,\n ref: ref as Record<string, unknown>,\n validateRelationships,\n value: ref[field.name],\n })\n }\n }\n }\n\n traverseFields({ callback: sanitize, fillEmpty: false, flattenedFields: fields, ref: data })\n}\n"],"names":["Types","traverseFields","fieldAffectsData","fieldIsVirtual","isValidRelationObject","value","convertRelationshipValue","operation","relatedCollection","validateRelationships","customIDField","fields","find","field","name","ObjectId","toHexString","e","sanitizeRelationship","config","locale","ref","type","Array","isArray","docs","i","length","item","result","hasManyRelations","relationTo","collections","slug","map","val","relatedCollectionForSingleValue","sanitizeDate","Date","toISOString","transform","adapter","data","globalSlug","payload","id","_id","createdAt","updatedAt","globalType","sanitize","defaultValue","coordinates","localization","localized","fieldRef","localeCodes","undefined","locales","code","callback","fillEmpty","flattenedFields"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { flattenAllFields } from 'payload';
|
|
1
2
|
import { Types } from 'mongoose';
|
|
2
|
-
import {
|
|
3
|
+
import { transform } from './transform.js';
|
|
3
4
|
const flattenRelationshipValues = (obj, prefix = '')=>{
|
|
4
5
|
return Object.keys(obj).reduce((acc, key)=>{
|
|
5
6
|
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
@@ -291,8 +292,8 @@ const relsData = {
|
|
|
291
292
|
]
|
|
292
293
|
}
|
|
293
294
|
};
|
|
294
|
-
describe('
|
|
295
|
-
it('should sanitize relationships', ()=>{
|
|
295
|
+
describe('transform', ()=>{
|
|
296
|
+
it('should sanitize relationships with transform write', ()=>{
|
|
296
297
|
const data = {
|
|
297
298
|
...relsData,
|
|
298
299
|
array: [
|
|
@@ -409,17 +410,32 @@ describe('sanitizeRelationshipIDs', ()=>{
|
|
|
409
410
|
}
|
|
410
411
|
};
|
|
411
412
|
const flattenValuesBefore = Object.values(flattenRelationshipValues(data));
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
413
|
+
const mockAdapter = {
|
|
414
|
+
payload: {
|
|
415
|
+
config
|
|
416
|
+
}
|
|
417
|
+
};
|
|
418
|
+
const fields = flattenAllFields({
|
|
415
419
|
fields: config.collections[0].fields
|
|
416
420
|
});
|
|
421
|
+
transform({
|
|
422
|
+
type: 'write',
|
|
423
|
+
adapter: mockAdapter,
|
|
424
|
+
data,
|
|
425
|
+
fields
|
|
426
|
+
});
|
|
417
427
|
const flattenValuesAfter = Object.values(flattenRelationshipValues(data));
|
|
418
428
|
flattenValuesAfter.forEach((value, i)=>{
|
|
419
429
|
expect(value).toBeInstanceOf(Types.ObjectId);
|
|
420
430
|
expect(flattenValuesBefore[i]).toBe(value.toHexString());
|
|
421
431
|
});
|
|
432
|
+
transform({
|
|
433
|
+
type: 'read',
|
|
434
|
+
adapter: mockAdapter,
|
|
435
|
+
data,
|
|
436
|
+
fields
|
|
437
|
+
});
|
|
422
438
|
});
|
|
423
439
|
});
|
|
424
440
|
|
|
425
|
-
//# sourceMappingURL=
|
|
441
|
+
//# sourceMappingURL=transform.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/transform.spec.ts"],"sourcesContent":["import { flattenAllFields, type Field, type SanitizedConfig } from 'payload'\n\nimport { Types } from 'mongoose'\n\nimport { transform } from './transform.js'\nimport { MongooseAdapter } from '..'\n\nconst flattenRelationshipValues = (obj: Record<string, any>, prefix = ''): Record<string, any> => {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value && typeof value === 'object' && !(value instanceof Types.ObjectId)) {\n Object.assign(acc, flattenRelationshipValues(value, fullKey))\n // skip relationTo and blockType\n } else if (!fullKey.endsWith('relationTo') && !fullKey.endsWith('blockType')) {\n acc[fullKey] = value\n }\n\n return acc\n },\n {} as Record<string, any>,\n )\n}\n\nconst relsFields: Field[] = [\n {\n name: 'rel_1',\n type: 'relationship',\n relationTo: 'rels',\n },\n {\n name: 'rel_1_l',\n type: 'relationship',\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2',\n type: 'relationship',\n hasMany: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_3',\n type: 'relationship',\n relationTo: ['rels'],\n },\n {\n name: 'rel_3_l',\n type: 'relationship',\n localized: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4',\n type: 'relationship',\n hasMany: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: ['rels'],\n },\n]\n\nconst config = {\n collections: [\n {\n slug: 'docs',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n },\n {\n name: 'arrayLocalized',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n localized: true,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [\n {\n slug: 'block',\n fields: [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n name: 'group',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n {\n name: 'groupLocalized',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n localized: true,\n },\n {\n name: 'groupAndRow',\n type: 'group',\n fields: [\n {\n type: 'row',\n fields: [\n ...relsFields,\n {\n type: 'array',\n name: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n type: 'tabs',\n tabs: [\n {\n name: 'tab',\n fields: relsFields,\n },\n {\n name: 'tabLocalized',\n fields: relsFields,\n localized: true,\n },\n {\n label: 'another',\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n name: 'nestedTab',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n slug: 'rels',\n fields: [],\n },\n ],\n localization: {\n defaultLocale: 'en',\n localeCodes: ['en', 'es'],\n locales: [\n { code: 'en', label: 'EN' },\n { code: 'es', label: 'ES' },\n ],\n },\n} as SanitizedConfig\n\nconst relsData = {\n rel_1: new Types.ObjectId().toHexString(),\n rel_1_l: {\n en: new Types.ObjectId().toHexString(),\n es: new Types.ObjectId().toHexString(),\n },\n rel_2: [new Types.ObjectId().toHexString()],\n rel_2_l: {\n en: [new Types.ObjectId().toHexString()],\n es: [new Types.ObjectId().toHexString()],\n },\n rel_3: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n rel_3_l: {\n en: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n es: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n },\n rel_4: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n rel_4_l: {\n en: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n es: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n },\n}\n\ndescribe('transform', () => {\n it('should sanitize relationships with transform write', () => {\n const data = {\n ...relsData,\n array: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n arrayLocalized: {\n en: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n es: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n },\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n array: [{ ...relsData }],\n group: { ...relsData },\n },\n ],\n group: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupAndRow: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupLocalized: {\n en: {\n ...relsData,\n array: [{ ...relsData }],\n },\n es: {\n ...relsData,\n array: [{ ...relsData }],\n },\n },\n tab: { ...relsData },\n tabLocalized: {\n en: { ...relsData },\n es: { ...relsData },\n },\n nestedTab: { ...relsData },\n }\n const flattenValuesBefore = Object.values(flattenRelationshipValues(data))\n\n const mockAdapter = { payload: { config } } as MongooseAdapter\n\n const fields = flattenAllFields({ fields: config.collections[0].fields })\n\n transform({ type: 'write', adapter: mockAdapter, data, fields })\n\n const flattenValuesAfter = Object.values(flattenRelationshipValues(data))\n\n flattenValuesAfter.forEach((value, i) => {\n expect(value).toBeInstanceOf(Types.ObjectId)\n expect(flattenValuesBefore[i]).toBe(value.toHexString())\n })\n\n transform({ type: 'read', adapter: mockAdapter, data, fields })\n })\n})\n"],"names":["flattenAllFields","Types","transform","flattenRelationshipValues","obj","prefix","Object","keys","reduce","acc","key","fullKey","value","ObjectId","assign","endsWith","relsFields","name","type","relationTo","localized","hasMany","config","collections","slug","fields","blocks","tabs","label","localization","defaultLocale","localeCodes","locales","code","relsData","rel_1","toHexString","rel_1_l","en","es","rel_2","rel_2_l","rel_3","rel_3_l","rel_4","rel_4_l","describe","it","data","array","blockType","arrayLocalized","group","groupAndRow","groupLocalized","tab","tabLocalized","nestedTab","flattenValuesBefore","values","mockAdapter","payload","adapter","flattenValuesAfter","forEach","i","expect","toBeInstanceOf","toBe"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/db-mongodb",
|
|
3
|
-
"version": "3.2.2-canary.
|
|
3
|
+
"version": "3.2.2-canary.d2399ed",
|
|
4
4
|
"description": "The officially supported MongoDB database adapter for Payload",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"mongodb": "6.10.0",
|
|
50
50
|
"mongodb-memory-server": "^9",
|
|
51
51
|
"@payloadcms/eslint-config": "3.0.0",
|
|
52
|
-
"payload": "3.2.2-canary.
|
|
52
|
+
"payload": "3.2.2-canary.d2399ed"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
|
-
"payload": "3.2.2-canary.
|
|
55
|
+
"payload": "3.2.2-canary.d2399ed"
|
|
56
56
|
},
|
|
57
57
|
"scripts": {
|
|
58
58
|
"build": "pnpm build:types && pnpm build:swc",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeInternalFields.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizeInternalFields.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,KAAG,CAiB9E,CAAA"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
const internalFields = [
|
|
2
|
-
'__v'
|
|
3
|
-
];
|
|
4
|
-
export const sanitizeInternalFields = (incomingDoc)=>Object.entries(incomingDoc).reduce((newDoc, [key, val])=>{
|
|
5
|
-
if (key === '_id') {
|
|
6
|
-
return {
|
|
7
|
-
...newDoc,
|
|
8
|
-
id: val
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
if (internalFields.indexOf(key) > -1) {
|
|
12
|
-
return newDoc;
|
|
13
|
-
}
|
|
14
|
-
return {
|
|
15
|
-
...newDoc,
|
|
16
|
-
[key]: val
|
|
17
|
-
};
|
|
18
|
-
}, {});
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=sanitizeInternalFields.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/sanitizeInternalFields.ts"],"sourcesContent":["const internalFields = ['__v']\n\nexport const sanitizeInternalFields = <T extends Record<string, unknown>>(incomingDoc: T): T =>\n Object.entries(incomingDoc).reduce((newDoc, [key, val]): T => {\n if (key === '_id') {\n return {\n ...newDoc,\n id: val,\n }\n }\n\n if (internalFields.indexOf(key) > -1) {\n return newDoc\n }\n\n return {\n ...newDoc,\n [key]: val,\n }\n }, {} as T)\n"],"names":["internalFields","sanitizeInternalFields","incomingDoc","Object","entries","reduce","newDoc","key","val","id","indexOf"],"mappings":"AAAA,MAAMA,iBAAiB;IAAC;CAAM;AAE9B,OAAO,MAAMC,yBAAyB,CAAoCC,cACxEC,OAAOC,OAAO,CAACF,aAAaG,MAAM,CAAC,CAACC,QAAQ,CAACC,KAAKC,IAAI;QACpD,IAAID,QAAQ,OAAO;YACjB,OAAO;gBACL,GAAGD,MAAM;gBACTG,IAAID;YACN;QACF;QAEA,IAAIR,eAAeU,OAAO,CAACH,OAAO,CAAC,GAAG;YACpC,OAAOD;QACT;QAEA,OAAO;YACL,GAAGA,MAAM;YACT,CAACC,IAAI,EAAEC;QACT;IACF,GAAG,CAAC,GAAO"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Field, SanitizedConfig } from 'payload';
|
|
2
|
-
type Args = {
|
|
3
|
-
config: SanitizedConfig;
|
|
4
|
-
data: Record<string, unknown>;
|
|
5
|
-
fields: Field[];
|
|
6
|
-
};
|
|
7
|
-
export declare const sanitizeRelationshipIDs: ({ config, data, fields, }: Args) => Record<string, unknown>;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=sanitizeRelationshipIDs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeRelationshipIDs.d.ts","sourceRoot":"","sources":["../../src/utilities/sanitizeRelationshipIDs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,KAAK,EAAE,eAAe,EAA0B,MAAM,SAAS,CAAA;AAM/F,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAoGD,eAAO,MAAM,uBAAuB,8BAIjC,IAAI,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAyC/B,CAAA"}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { Types } from 'mongoose';
|
|
2
|
-
import { traverseFields } from 'payload';
|
|
3
|
-
import { fieldAffectsData } from 'payload/shared';
|
|
4
|
-
function isValidRelationObject(value) {
|
|
5
|
-
return typeof value === 'object' && value !== null && 'relationTo' in value && 'value' in value;
|
|
6
|
-
}
|
|
7
|
-
const convertValue = ({ relatedCollection, value })=>{
|
|
8
|
-
const customIDField = relatedCollection.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
|
|
9
|
-
if (customIDField) {
|
|
10
|
-
return value;
|
|
11
|
-
}
|
|
12
|
-
try {
|
|
13
|
-
return new Types.ObjectId(value);
|
|
14
|
-
} catch {
|
|
15
|
-
return value;
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
const sanitizeRelationship = ({ config, field, locale, ref, value })=>{
|
|
19
|
-
let relatedCollection;
|
|
20
|
-
let result = value;
|
|
21
|
-
const hasManyRelations = typeof field.relationTo !== 'string';
|
|
22
|
-
if (!hasManyRelations) {
|
|
23
|
-
relatedCollection = config.collections?.find(({ slug })=>slug === field.relationTo);
|
|
24
|
-
}
|
|
25
|
-
if (Array.isArray(value)) {
|
|
26
|
-
result = value.map((val)=>{
|
|
27
|
-
// Handle has many
|
|
28
|
-
if (relatedCollection && val && (typeof val === 'string' || typeof val === 'number')) {
|
|
29
|
-
return convertValue({
|
|
30
|
-
relatedCollection,
|
|
31
|
-
value: val
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
// Handle has many - polymorphic
|
|
35
|
-
if (isValidRelationObject(val)) {
|
|
36
|
-
const relatedCollectionForSingleValue = config.collections?.find(({ slug })=>slug === val.relationTo);
|
|
37
|
-
if (relatedCollectionForSingleValue) {
|
|
38
|
-
return {
|
|
39
|
-
relationTo: val.relationTo,
|
|
40
|
-
value: convertValue({
|
|
41
|
-
relatedCollection: relatedCollectionForSingleValue,
|
|
42
|
-
value: val.value
|
|
43
|
-
})
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return val;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
// Handle has one - polymorphic
|
|
51
|
-
if (isValidRelationObject(value)) {
|
|
52
|
-
relatedCollection = config.collections?.find(({ slug })=>slug === value.relationTo);
|
|
53
|
-
if (relatedCollection) {
|
|
54
|
-
result = {
|
|
55
|
-
relationTo: value.relationTo,
|
|
56
|
-
value: convertValue({
|
|
57
|
-
relatedCollection,
|
|
58
|
-
value: value.value
|
|
59
|
-
})
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Handle has one
|
|
64
|
-
if (relatedCollection && value && (typeof value === 'string' || typeof value === 'number')) {
|
|
65
|
-
result = convertValue({
|
|
66
|
-
relatedCollection,
|
|
67
|
-
value
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
if (locale) {
|
|
71
|
-
ref[locale] = result;
|
|
72
|
-
} else {
|
|
73
|
-
ref[field.name] = result;
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
export const sanitizeRelationshipIDs = ({ config, data, fields })=>{
|
|
77
|
-
const sanitize = ({ field, ref })=>{
|
|
78
|
-
if (!ref || typeof ref !== 'object') {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
if (field.type === 'relationship' || field.type === 'upload') {
|
|
82
|
-
if (!ref[field.name]) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
// handle localized relationships
|
|
86
|
-
if (config.localization && field.localized) {
|
|
87
|
-
const locales = config.localization.locales;
|
|
88
|
-
const fieldRef = ref[field.name];
|
|
89
|
-
if (typeof fieldRef !== 'object') {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
for (const { code } of locales){
|
|
93
|
-
const value = ref[field.name][code];
|
|
94
|
-
if (value) {
|
|
95
|
-
sanitizeRelationship({
|
|
96
|
-
config,
|
|
97
|
-
field,
|
|
98
|
-
locale: code,
|
|
99
|
-
ref: fieldRef,
|
|
100
|
-
value
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
} else {
|
|
105
|
-
// handle non-localized relationships
|
|
106
|
-
sanitizeRelationship({
|
|
107
|
-
config,
|
|
108
|
-
field,
|
|
109
|
-
locale: undefined,
|
|
110
|
-
ref,
|
|
111
|
-
value: ref[field.name]
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
traverseFields({
|
|
117
|
-
callback: sanitize,
|
|
118
|
-
fields,
|
|
119
|
-
fillEmpty: false,
|
|
120
|
-
ref: data
|
|
121
|
-
});
|
|
122
|
-
return data;
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
//# sourceMappingURL=sanitizeRelationshipIDs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/sanitizeRelationshipIDs.ts"],"sourcesContent":["import type { CollectionConfig, Field, SanitizedConfig, TraverseFieldsCallback } from 'payload'\n\nimport { Types } from 'mongoose'\nimport { APIError, traverseFields } from 'payload'\nimport { fieldAffectsData } from 'payload/shared'\n\ntype Args = {\n config: SanitizedConfig\n data: Record<string, unknown>\n fields: Field[]\n}\n\ninterface RelationObject {\n relationTo: string\n value: number | string\n}\n\nfunction isValidRelationObject(value: unknown): value is RelationObject {\n return typeof value === 'object' && value !== null && 'relationTo' in value && 'value' in value\n}\n\nconst convertValue = ({\n relatedCollection,\n value,\n}: {\n relatedCollection: CollectionConfig\n value: number | string\n}): number | string | Types.ObjectId => {\n const customIDField = relatedCollection.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n\n if (customIDField) {\n return value\n }\n\n try {\n return new Types.ObjectId(value)\n } catch {\n return value\n }\n}\n\nconst sanitizeRelationship = ({ config, field, locale, ref, value }) => {\n let relatedCollection: CollectionConfig | undefined\n let result = value\n\n const hasManyRelations = typeof field.relationTo !== 'string'\n\n if (!hasManyRelations) {\n relatedCollection = config.collections?.find(({ slug }) => slug === field.relationTo)\n }\n\n if (Array.isArray(value)) {\n result = value.map((val) => {\n // Handle has many\n if (relatedCollection && val && (typeof val === 'string' || typeof val === 'number')) {\n return convertValue({\n relatedCollection,\n value: val,\n })\n }\n\n // Handle has many - polymorphic\n if (isValidRelationObject(val)) {\n const relatedCollectionForSingleValue = config.collections?.find(\n ({ slug }) => slug === val.relationTo,\n )\n\n if (relatedCollectionForSingleValue) {\n return {\n relationTo: val.relationTo,\n value: convertValue({\n relatedCollection: relatedCollectionForSingleValue,\n value: val.value,\n }),\n }\n }\n }\n\n return val\n })\n }\n\n // Handle has one - polymorphic\n if (isValidRelationObject(value)) {\n relatedCollection = config.collections?.find(({ slug }) => slug === value.relationTo)\n\n if (relatedCollection) {\n result = {\n relationTo: value.relationTo,\n value: convertValue({ relatedCollection, value: value.value }),\n }\n }\n }\n\n // Handle has one\n if (relatedCollection && value && (typeof value === 'string' || typeof value === 'number')) {\n result = convertValue({\n relatedCollection,\n value,\n })\n }\n if (locale) {\n ref[locale] = result\n } else {\n ref[field.name] = result\n }\n}\n\nexport const sanitizeRelationshipIDs = ({\n config,\n data,\n fields,\n}: Args): Record<string, unknown> => {\n const sanitize: TraverseFieldsCallback = ({ field, ref }) => {\n if (!ref || typeof ref !== 'object') {\n return\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (!ref[field.name]) {\n return\n }\n\n // handle localized relationships\n if (config.localization && field.localized) {\n const locales = config.localization.locales\n const fieldRef = ref[field.name]\n if (typeof fieldRef !== 'object') {\n return\n }\n\n for (const { code } of locales) {\n const value = ref[field.name][code]\n if (value) {\n sanitizeRelationship({ config, field, locale: code, ref: fieldRef, value })\n }\n }\n } else {\n // handle non-localized relationships\n sanitizeRelationship({\n config,\n field,\n locale: undefined,\n ref,\n value: ref[field.name],\n })\n }\n }\n }\n\n traverseFields({ callback: sanitize, fields, fillEmpty: false, ref: data })\n\n return data\n}\n"],"names":["Types","traverseFields","fieldAffectsData","isValidRelationObject","value","convertValue","relatedCollection","customIDField","fields","find","field","name","ObjectId","sanitizeRelationship","config","locale","ref","result","hasManyRelations","relationTo","collections","slug","Array","isArray","map","val","relatedCollectionForSingleValue","sanitizeRelationshipIDs","data","sanitize","type","localization","localized","locales","fieldRef","code","undefined","callback","fillEmpty"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/sanitizeRelationshipIDs.spec.ts"],"sourcesContent":["import type { Field, SanitizedConfig } from 'payload'\n\nimport { Types } from 'mongoose'\n\nimport { sanitizeRelationshipIDs } from './sanitizeRelationshipIDs.js'\n\nconst flattenRelationshipValues = (obj: Record<string, any>, prefix = ''): Record<string, any> => {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value && typeof value === 'object' && !(value instanceof Types.ObjectId)) {\n Object.assign(acc, flattenRelationshipValues(value, fullKey))\n // skip relationTo and blockType\n } else if (!fullKey.endsWith('relationTo') && !fullKey.endsWith('blockType')) {\n acc[fullKey] = value\n }\n\n return acc\n },\n {} as Record<string, any>,\n )\n}\n\nconst relsFields: Field[] = [\n {\n name: 'rel_1',\n type: 'relationship',\n relationTo: 'rels',\n },\n {\n name: 'rel_1_l',\n type: 'relationship',\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2',\n type: 'relationship',\n hasMany: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_3',\n type: 'relationship',\n relationTo: ['rels'],\n },\n {\n name: 'rel_3_l',\n type: 'relationship',\n localized: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4',\n type: 'relationship',\n hasMany: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: ['rels'],\n },\n]\n\nconst config = {\n collections: [\n {\n slug: 'docs',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n },\n {\n name: 'arrayLocalized',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n localized: true,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [\n {\n slug: 'block',\n fields: [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n name: 'group',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n {\n name: 'groupLocalized',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n localized: true,\n },\n {\n name: 'groupAndRow',\n type: 'group',\n fields: [\n {\n type: 'row',\n fields: [\n ...relsFields,\n {\n type: 'array',\n name: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n type: 'tabs',\n tabs: [\n {\n name: 'tab',\n fields: relsFields,\n },\n {\n name: 'tabLocalized',\n fields: relsFields,\n localized: true,\n },\n {\n label: 'another',\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n name: 'nestedTab',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n slug: 'rels',\n fields: [],\n },\n ],\n localization: {\n defaultLocale: 'en',\n localeCodes: ['en', 'es'],\n locales: [\n { code: 'en', label: 'EN' },\n { code: 'es', label: 'ES' },\n ],\n },\n} as SanitizedConfig\n\nconst relsData = {\n rel_1: new Types.ObjectId().toHexString(),\n rel_1_l: {\n en: new Types.ObjectId().toHexString(),\n es: new Types.ObjectId().toHexString(),\n },\n rel_2: [new Types.ObjectId().toHexString()],\n rel_2_l: {\n en: [new Types.ObjectId().toHexString()],\n es: [new Types.ObjectId().toHexString()],\n },\n rel_3: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n rel_3_l: {\n en: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n es: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n },\n rel_4: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n rel_4_l: {\n en: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n es: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n },\n}\n\ndescribe('sanitizeRelationshipIDs', () => {\n it('should sanitize relationships', () => {\n const data = {\n ...relsData,\n array: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n arrayLocalized: {\n en: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n es: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n },\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n array: [{ ...relsData }],\n group: { ...relsData },\n },\n ],\n group: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupAndRow: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupLocalized: {\n en: {\n ...relsData,\n array: [{ ...relsData }],\n },\n es: {\n ...relsData,\n array: [{ ...relsData }],\n },\n },\n tab: { ...relsData },\n tabLocalized: {\n en: { ...relsData },\n es: { ...relsData },\n },\n nestedTab: { ...relsData },\n }\n const flattenValuesBefore = Object.values(flattenRelationshipValues(data))\n\n sanitizeRelationshipIDs({ config, data, fields: config.collections[0].fields })\n const flattenValuesAfter = Object.values(flattenRelationshipValues(data))\n\n flattenValuesAfter.forEach((value, i) => {\n expect(value).toBeInstanceOf(Types.ObjectId)\n expect(flattenValuesBefore[i]).toBe(value.toHexString())\n })\n })\n})\n"],"names":["Types","sanitizeRelationshipIDs","flattenRelationshipValues","obj","prefix","Object","keys","reduce","acc","key","fullKey","value","ObjectId","assign","endsWith","relsFields","name","type","relationTo","localized","hasMany","config","collections","slug","fields","blocks","tabs","label","localization","defaultLocale","localeCodes","locales","code","relsData","rel_1","toHexString","rel_1_l","en","es","rel_2","rel_2_l","rel_3","rel_3_l","rel_4","rel_4_l","describe","it","data","array","blockType","arrayLocalized","group","groupAndRow","groupLocalized","tab","tabLocalized","nestedTab","flattenValuesBefore","values","flattenValuesAfter","forEach","i","expect","toBeInstanceOf","toBe"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"withSession.d.ts","sourceRoot":"","sources":["../src/withSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,eAAe,EACnB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAU7D"}
|
package/dist/withSession.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/withSession.ts"],"sourcesContent":["import type { ClientSession } from 'mongoose'\nimport type { PayloadRequest } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\n/**\n * returns the session belonging to the transaction of the req.session if exists\n * @returns ClientSession\n */\nexport async function withSession(\n db: MongooseAdapter,\n req: PayloadRequest,\n): Promise<{ session: ClientSession } | Record<string, never>> {\n let transactionID = req.transactionID\n\n if (transactionID instanceof Promise) {\n transactionID = await req.transactionID\n }\n\n if (req) {\n return db.sessions[transactionID] ? { session: db.sessions[transactionID] } : {}\n }\n}\n"],"names":["withSession","db","req","transactionID","Promise","sessions","session"],"mappings":"AAKA;;;CAGC,GACD,OAAO,eAAeA,YACpBC,EAAmB,EACnBC,GAAmB;IAEnB,IAAIC,gBAAgBD,IAAIC,aAAa;IAErC,IAAIA,yBAAyBC,SAAS;QACpCD,gBAAgB,MAAMD,IAAIC,aAAa;IACzC;IAEA,IAAID,KAAK;QACP,OAAOD,GAAGI,QAAQ,CAACF,cAAc,GAAG;YAAEG,SAASL,GAAGI,QAAQ,CAACF,cAAc;QAAC,IAAI,CAAC;IACjF;AACF"}
|