@payloadcms/db-mongodb 4.0.0-internal.af6aad0 → 4.0.0-internal.b8a92d2

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.
@@ -1,546 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { flattenAllFields } from 'payload';
3
- import { Types } from 'mongoose';
4
- import { transform } from './transform.js';
5
- const flattenRelationshipValues = (obj, prefix = '')=>{
6
- return Object.keys(obj).reduce((acc, key)=>{
7
- const fullKey = prefix ? `${prefix}.${key}` : key;
8
- const value = obj[key];
9
- if (value && typeof value === 'object' && !(value instanceof Types.ObjectId)) {
10
- Object.assign(acc, flattenRelationshipValues(value, fullKey));
11
- // skip relationTo and blockType
12
- } else if (!fullKey.endsWith('relationTo') && !fullKey.endsWith('blockType')) {
13
- acc[fullKey] = value;
14
- }
15
- return acc;
16
- }, {});
17
- };
18
- const relsFields = [
19
- {
20
- name: 'rel_1',
21
- type: 'relationship',
22
- relationTo: 'rels'
23
- },
24
- {
25
- name: 'rel_1_l',
26
- type: 'relationship',
27
- localized: true,
28
- relationTo: 'rels'
29
- },
30
- {
31
- name: 'rel_2',
32
- type: 'relationship',
33
- hasMany: true,
34
- relationTo: 'rels'
35
- },
36
- {
37
- name: 'rel_2_l',
38
- type: 'relationship',
39
- hasMany: true,
40
- localized: true,
41
- relationTo: 'rels'
42
- },
43
- {
44
- name: 'rel_3',
45
- type: 'relationship',
46
- relationTo: [
47
- 'rels'
48
- ]
49
- },
50
- {
51
- name: 'rel_3_l',
52
- type: 'relationship',
53
- localized: true,
54
- relationTo: [
55
- 'rels'
56
- ]
57
- },
58
- {
59
- name: 'rel_4',
60
- type: 'relationship',
61
- hasMany: true,
62
- relationTo: [
63
- 'rels'
64
- ]
65
- },
66
- {
67
- name: 'rel_4_l',
68
- type: 'relationship',
69
- hasMany: true,
70
- localized: true,
71
- relationTo: [
72
- 'rels'
73
- ]
74
- }
75
- ];
76
- const referenceBlockFields = [
77
- ...relsFields,
78
- {
79
- name: 'group',
80
- type: 'group',
81
- fields: relsFields
82
- },
83
- {
84
- name: 'array',
85
- type: 'array',
86
- fields: relsFields
87
- }
88
- ];
89
- const config = {
90
- blocks: [
91
- {
92
- slug: 'reference-block',
93
- fields: referenceBlockFields,
94
- flattenedFields: flattenAllFields({
95
- fields: referenceBlockFields
96
- })
97
- }
98
- ],
99
- collections: [
100
- {
101
- slug: 'docs',
102
- fields: [
103
- ...relsFields,
104
- {
105
- name: 'array',
106
- type: 'array',
107
- fields: [
108
- {
109
- name: 'array',
110
- type: 'array',
111
- fields: relsFields
112
- },
113
- {
114
- name: 'blocks',
115
- type: 'blocks',
116
- blocks: [
117
- {
118
- slug: 'block',
119
- fields: relsFields
120
- }
121
- ]
122
- },
123
- ...relsFields
124
- ]
125
- },
126
- {
127
- name: 'arrayLocalized',
128
- type: 'array',
129
- fields: [
130
- {
131
- name: 'array',
132
- type: 'array',
133
- fields: relsFields
134
- },
135
- {
136
- name: 'blocks',
137
- type: 'blocks',
138
- blocks: [
139
- {
140
- slug: 'block',
141
- fields: relsFields
142
- }
143
- ]
144
- },
145
- ...relsFields
146
- ],
147
- localized: true
148
- },
149
- {
150
- name: 'blocks',
151
- type: 'blocks',
152
- blocks: [
153
- {
154
- slug: 'block',
155
- fields: [
156
- ...relsFields,
157
- {
158
- name: 'group',
159
- type: 'group',
160
- fields: relsFields
161
- },
162
- {
163
- name: 'array',
164
- type: 'array',
165
- fields: relsFields
166
- }
167
- ]
168
- }
169
- ]
170
- },
171
- {
172
- name: 'referencedBlocks',
173
- type: 'blocks',
174
- blocks: [
175
- 'reference-block'
176
- ]
177
- },
178
- {
179
- name: 'group',
180
- type: 'group',
181
- fields: [
182
- ...relsFields,
183
- {
184
- name: 'array',
185
- type: 'array',
186
- fields: relsFields
187
- }
188
- ]
189
- },
190
- {
191
- name: 'groupLocalized',
192
- type: 'group',
193
- fields: [
194
- ...relsFields,
195
- {
196
- name: 'array',
197
- type: 'array',
198
- fields: relsFields
199
- }
200
- ],
201
- localized: true
202
- },
203
- {
204
- name: 'groupAndRow',
205
- type: 'group',
206
- fields: [
207
- {
208
- type: 'row',
209
- fields: [
210
- ...relsFields,
211
- {
212
- type: 'array',
213
- name: 'array',
214
- fields: relsFields
215
- }
216
- ]
217
- }
218
- ]
219
- },
220
- {
221
- type: 'tabs',
222
- tabs: [
223
- {
224
- name: 'tab',
225
- fields: relsFields
226
- },
227
- {
228
- name: 'tabLocalized',
229
- fields: relsFields,
230
- localized: true
231
- },
232
- {
233
- label: 'another',
234
- fields: [
235
- {
236
- type: 'tabs',
237
- tabs: [
238
- {
239
- name: 'nestedTab',
240
- fields: relsFields
241
- }
242
- ]
243
- }
244
- ]
245
- }
246
- ]
247
- }
248
- ]
249
- },
250
- {
251
- slug: 'rels',
252
- fields: []
253
- }
254
- ],
255
- localization: {
256
- defaultLocale: 'en',
257
- localeCodes: [
258
- 'en',
259
- 'es'
260
- ],
261
- locales: [
262
- {
263
- code: 'en',
264
- label: 'EN'
265
- },
266
- {
267
- code: 'es',
268
- label: 'ES'
269
- }
270
- ]
271
- }
272
- };
273
- const relsData = {
274
- rel_1: new Types.ObjectId().toHexString(),
275
- rel_1_l: {
276
- en: new Types.ObjectId().toHexString(),
277
- es: new Types.ObjectId().toHexString()
278
- },
279
- rel_2: [
280
- new Types.ObjectId().toHexString()
281
- ],
282
- rel_2_l: {
283
- en: [
284
- new Types.ObjectId().toHexString()
285
- ],
286
- es: [
287
- new Types.ObjectId().toHexString()
288
- ]
289
- },
290
- rel_3: {
291
- relationTo: 'rels',
292
- value: new Types.ObjectId().toHexString()
293
- },
294
- rel_3_l: {
295
- en: {
296
- relationTo: 'rels',
297
- value: new Types.ObjectId().toHexString()
298
- },
299
- es: {
300
- relationTo: 'rels',
301
- value: new Types.ObjectId().toHexString()
302
- }
303
- },
304
- rel_4: [
305
- {
306
- relationTo: 'rels',
307
- value: new Types.ObjectId().toHexString()
308
- }
309
- ],
310
- rel_4_l: {
311
- en: [
312
- {
313
- relationTo: 'rels',
314
- value: new Types.ObjectId().toHexString()
315
- }
316
- ],
317
- es: [
318
- {
319
- relationTo: 'rels',
320
- value: new Types.ObjectId().toHexString()
321
- }
322
- ]
323
- }
324
- };
325
- describe('transform', ()=>{
326
- it('should sanitize relationships', ()=>{
327
- const data = {
328
- ...relsData,
329
- array: [
330
- {
331
- ...relsData,
332
- array: [
333
- {
334
- ...relsData
335
- }
336
- ],
337
- blocks: [
338
- {
339
- blockType: 'block',
340
- ...relsData
341
- }
342
- ]
343
- }
344
- ],
345
- arrayLocalized: {
346
- en: [
347
- {
348
- ...relsData,
349
- array: [
350
- {
351
- ...relsData
352
- }
353
- ],
354
- blocks: [
355
- {
356
- blockType: 'block',
357
- ...relsData
358
- }
359
- ]
360
- }
361
- ],
362
- es: [
363
- {
364
- ...relsData,
365
- array: [
366
- {
367
- ...relsData
368
- }
369
- ],
370
- blocks: [
371
- {
372
- blockType: 'block',
373
- ...relsData
374
- }
375
- ]
376
- }
377
- ]
378
- },
379
- blocks: [
380
- {
381
- blockType: 'block',
382
- ...relsData,
383
- array: [
384
- {
385
- ...relsData
386
- }
387
- ],
388
- group: {
389
- ...relsData
390
- }
391
- }
392
- ],
393
- referencedBlocks: [
394
- {
395
- blockType: 'reference-block',
396
- array: [
397
- {
398
- ...relsData
399
- }
400
- ],
401
- group: {
402
- ...relsData
403
- },
404
- ...relsData
405
- }
406
- ],
407
- group: {
408
- ...relsData,
409
- array: [
410
- {
411
- ...relsData
412
- }
413
- ]
414
- },
415
- groupAndRow: {
416
- ...relsData,
417
- array: [
418
- {
419
- ...relsData
420
- }
421
- ]
422
- },
423
- groupLocalized: {
424
- en: {
425
- ...relsData,
426
- array: [
427
- {
428
- ...relsData
429
- }
430
- ]
431
- },
432
- es: {
433
- ...relsData,
434
- array: [
435
- {
436
- ...relsData
437
- }
438
- ]
439
- }
440
- },
441
- tab: {
442
- ...relsData
443
- },
444
- tabLocalized: {
445
- en: {
446
- ...relsData
447
- },
448
- es: {
449
- ...relsData
450
- }
451
- },
452
- nestedTab: {
453
- ...relsData
454
- }
455
- };
456
- const flattenValuesBefore = Object.values(flattenRelationshipValues(data));
457
- const mockAdapter = {
458
- payload: {
459
- config
460
- }
461
- };
462
- transform({
463
- adapter: mockAdapter,
464
- operation: 'write',
465
- data,
466
- fields: config.collections[0].fields
467
- });
468
- if ('updatedAt' in data) {
469
- delete data.updatedAt;
470
- }
471
- const flattenValuesAfter = Object.values(flattenRelationshipValues(data));
472
- flattenValuesAfter.forEach((value, i)=>{
473
- expect(value).toBeInstanceOf(Types.ObjectId);
474
- expect(flattenValuesBefore[i]).toBe(value.toHexString());
475
- });
476
- });
477
- it('should strip null elements from array and blocks fields on read', ()=>{
478
- const data = {
479
- _id: new Types.ObjectId(),
480
- array: [
481
- null,
482
- {
483
- rel_1: new Types.ObjectId()
484
- }
485
- ],
486
- arrayLocalized: {
487
- en: [
488
- null,
489
- {
490
- rel_1: new Types.ObjectId()
491
- }
492
- ]
493
- },
494
- blocks: [
495
- null,
496
- {
497
- blockType: 'block',
498
- rel_1: new Types.ObjectId()
499
- }
500
- ]
501
- };
502
- const mockAdapter = {
503
- allowAdditionalKeys: false,
504
- payload: {
505
- config
506
- }
507
- };
508
- expect(()=>transform({
509
- adapter: mockAdapter,
510
- operation: 'read',
511
- data,
512
- fields: config.collections[0].fields
513
- })).not.toThrow();
514
- expect(data.array).toHaveLength(1);
515
- expect(data.array[0]).toMatchObject({});
516
- expect(data.arrayLocalized.en).toHaveLength(1);
517
- expect(data.blocks).toHaveLength(1);
518
- expect(data.blocks[0].blockType).toBe('block');
519
- });
520
- it('should skip null entries in hasMany relationship arrays without coercing them', ()=>{
521
- const validId = new Types.ObjectId();
522
- const data = {
523
- _id: new Types.ObjectId(),
524
- rel_2: [
525
- null,
526
- validId
527
- ]
528
- };
529
- const mockAdapter = {
530
- allowAdditionalKeys: false,
531
- payload: {
532
- config
533
- }
534
- };
535
- expect(()=>transform({
536
- adapter: mockAdapter,
537
- operation: 'read',
538
- data,
539
- fields: config.collections[0].fields
540
- })).not.toThrow();
541
- expect(data.rel_2[0]).toBeNull();
542
- expect(data.rel_2[1]).toBe(validId.toHexString());
543
- });
544
- });
545
-
546
- //# sourceMappingURL=transform.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/transform.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { flattenAllFields, type Field, type SanitizedConfig } from 'payload'\nimport { Types } from 'mongoose'\n\nimport { transform } from './transform.js'\nimport type { MongooseAdapter } from '../index.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 referenceBlockFields: Field[] = [\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\nconst config = {\n blocks: [\n {\n slug: 'reference-block',\n fields: referenceBlockFields,\n flattenedFields: flattenAllFields({ fields: referenceBlockFields }),\n },\n ],\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: 'referencedBlocks',\n type: 'blocks',\n blocks: ['reference-block'],\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', () => {\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 referencedBlocks: [\n {\n blockType: 'reference-block',\n array: [{ ...relsData }],\n group: { ...relsData },\n ...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 = {\n payload: {\n config,\n },\n } as MongooseAdapter\n\n transform({\n adapter: mockAdapter,\n operation: 'write',\n data,\n fields: config.collections[0].fields,\n })\n if ('updatedAt' in data) {\n delete data.updatedAt\n }\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\n it('should strip null elements from array and blocks fields on read', () => {\n const data: Record<string, any> = {\n _id: new Types.ObjectId(),\n array: [null, { rel_1: new Types.ObjectId() }],\n arrayLocalized: {\n en: [null, { rel_1: new Types.ObjectId() }],\n },\n blocks: [null, { blockType: 'block', rel_1: new Types.ObjectId() }],\n }\n\n const mockAdapter = {\n allowAdditionalKeys: false,\n payload: {\n config,\n },\n } as MongooseAdapter\n\n expect(() =>\n transform({\n adapter: mockAdapter,\n operation: 'read',\n data,\n fields: config.collections[0].fields,\n }),\n ).not.toThrow()\n\n expect(data.array).toHaveLength(1)\n expect(data.array[0]).toMatchObject({})\n expect(data.arrayLocalized.en).toHaveLength(1)\n expect(data.blocks).toHaveLength(1)\n expect(data.blocks[0].blockType).toBe('block')\n })\n\n it('should skip null entries in hasMany relationship arrays without coercing them', () => {\n const validId = new Types.ObjectId()\n const data: Record<string, any> = {\n _id: new Types.ObjectId(),\n rel_2: [null, validId],\n }\n\n const mockAdapter = {\n allowAdditionalKeys: false,\n payload: {\n config,\n },\n } as MongooseAdapter\n\n expect(() =>\n transform({\n adapter: mockAdapter,\n operation: 'read',\n data,\n fields: config.collections[0].fields,\n }),\n ).not.toThrow()\n\n expect(data.rel_2[0]).toBeNull()\n expect(data.rel_2[1]).toBe(validId.toHexString())\n })\n})\n"],"names":["describe","it","expect","flattenAllFields","Types","transform","flattenRelationshipValues","obj","prefix","Object","keys","reduce","acc","key","fullKey","value","ObjectId","assign","endsWith","relsFields","name","type","relationTo","localized","hasMany","referenceBlockFields","fields","config","blocks","slug","flattenedFields","collections","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","data","array","blockType","arrayLocalized","group","referencedBlocks","groupAndRow","groupLocalized","tab","tabLocalized","nestedTab","flattenValuesBefore","values","mockAdapter","payload","adapter","operation","updatedAt","flattenValuesAfter","forEach","i","toBeInstanceOf","toBe","_id","allowAdditionalKeys","not","toThrow","toHaveLength","toMatchObject","validId","toBeNull"],"mappings":"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"}