@payloadcms/plugin-import-export 4.0.0-internal.38b7f1d → 4.0.0-internal.5d5a2b2
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/@types/assets.d.js +2 -0
- package/dist/@types/assets.d.js.map +1 -0
- package/dist/components/FieldsToExport/reduceFields.d.ts.map +1 -1
- package/dist/export/createExport.d.ts.map +1 -1
- package/dist/export/getCreateExportCollectionTask.d.ts.map +1 -1
- package/dist/export/getExportCollection.d.ts.map +1 -1
- package/dist/export/getFields.d.ts.map +1 -1
- package/dist/export/handleDownload.d.ts.map +1 -1
- package/dist/export/handlePreview.d.ts.map +1 -1
- package/dist/export/handlePreview.js +1 -1
- package/dist/export/handlePreview.js.map +1 -1
- package/dist/exports/types.d.ts +1 -1
- package/dist/exports/types.d.ts.map +1 -1
- package/dist/exports/types.js.map +1 -1
- package/dist/import/createImport.d.ts.map +1 -1
- package/dist/import/createImport.js +1 -1
- package/dist/import/createImport.js.map +1 -1
- package/dist/import/getCreateImportCollectionTask.d.ts.map +1 -1
- package/dist/import/getFields.d.ts.map +1 -1
- package/dist/import/getImportCollection.d.ts.map +1 -1
- package/dist/import/handlePreview.d.ts.map +1 -1
- package/dist/index.d.ts +1 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +0 -32
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utilities/applyFieldHooks.d.ts +1 -2
- package/dist/utilities/applyFieldHooks.d.ts.map +1 -1
- package/dist/utilities/applyFieldHooks.js +1 -2
- package/dist/utilities/applyFieldHooks.js.map +1 -1
- package/dist/utilities/buildDisabledFieldRegex.d.ts.map +1 -1
- package/dist/utilities/collectDisabledFieldPaths.d.ts.map +1 -1
- package/dist/utilities/fieldToRegex.d.ts.map +1 -1
- package/dist/utilities/flattenObject.d.ts.map +1 -1
- package/dist/utilities/flattenObject.js +3 -13
- package/dist/utilities/flattenObject.js.map +1 -1
- package/dist/utilities/flattenedFields.d.ts.map +1 -1
- package/dist/utilities/getExportFieldFunctions.d.ts.map +1 -1
- package/dist/utilities/getExportFieldFunctions.js +0 -8
- package/dist/utilities/getExportFieldFunctions.js.map +1 -1
- package/dist/utilities/getFileFromDoc.d.ts.map +1 -1
- package/dist/utilities/getFlattenedFieldKeys.d.ts.map +1 -1
- package/dist/utilities/getImportFieldFunctions.d.ts.map +1 -1
- package/dist/utilities/getImportFieldFunctions.js +0 -8
- package/dist/utilities/getImportFieldFunctions.js.map +1 -1
- package/dist/utilities/getPluginCollections.d.ts.map +1 -1
- package/dist/utilities/getSchemaColumns.d.ts +1 -1
- package/dist/utilities/getSchemaColumns.d.ts.map +1 -1
- package/dist/utilities/getSchemaColumns.js +2 -2
- package/dist/utilities/getSchemaColumns.js.map +1 -1
- package/dist/utilities/getSelect.d.ts.map +1 -1
- package/dist/utilities/isPlainObject.d.ts.map +1 -1
- package/dist/utilities/parseCSV.d.ts.map +1 -1
- package/dist/utilities/parseJSON.d.ts.map +1 -1
- package/dist/utilities/polymorphicRel.d.ts.map +1 -1
- package/dist/utilities/processRichTextField.d.ts.map +1 -1
- package/dist/utilities/processRichTextField.js +7 -0
- package/dist/utilities/processRichTextField.js.map +1 -1
- package/dist/utilities/processRichTextField.spec.js +308 -0
- package/dist/utilities/processRichTextField.spec.js.map +1 -0
- package/dist/utilities/removeDisabledFields.d.ts.map +1 -1
- package/dist/utilities/setNestedValue.d.ts.map +1 -1
- package/dist/utilities/sortHelpers.d.ts.map +1 -1
- package/dist/utilities/unflattenObject.d.ts.map +1 -1
- package/dist/utilities/unflattenObject.js +29 -18
- package/dist/utilities/unflattenObject.js.map +1 -1
- package/dist/utilities/unflattenObject.spec.js +106 -0
- package/dist/utilities/unflattenObject.spec.js.map +1 -1
- package/dist/utilities/unflattenPostProcess.d.ts.map +1 -1
- package/dist/utilities/unflattenPostProcess.js +39 -13
- package/dist/utilities/unflattenPostProcess.js.map +1 -1
- package/dist/utilities/validateLimitValue.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/utilities/legacyHookDispatch.spec.js +0 -227
- package/dist/utilities/legacyHookDispatch.spec.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getImportFieldFunctions } from './getImportFieldFunctions.js';
|
|
1
2
|
import { unflattenObject } from './unflattenObject.js';
|
|
2
3
|
import { describe, it, expect, vi } from 'vitest';
|
|
3
4
|
describe('unflattenObject', ()=>{
|
|
@@ -660,6 +661,111 @@ describe('unflattenObject', ()=>{
|
|
|
660
661
|
expect(archives[0]['2024']).toBe('transformed-raw');
|
|
661
662
|
});
|
|
662
663
|
});
|
|
664
|
+
describe('blocks with nested arrays', ()=>{
|
|
665
|
+
const faqFields = [
|
|
666
|
+
{
|
|
667
|
+
name: 'faqContent',
|
|
668
|
+
type: 'blocks',
|
|
669
|
+
blocks: [
|
|
670
|
+
{
|
|
671
|
+
slug: 'faqSection',
|
|
672
|
+
flattenedFields: [
|
|
673
|
+
{
|
|
674
|
+
name: 'faqs',
|
|
675
|
+
type: 'array',
|
|
676
|
+
flattenedFields: [
|
|
677
|
+
{
|
|
678
|
+
name: 'id',
|
|
679
|
+
type: 'text'
|
|
680
|
+
},
|
|
681
|
+
{
|
|
682
|
+
name: 'question',
|
|
683
|
+
type: 'text'
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
name: 'answer',
|
|
687
|
+
type: 'richText'
|
|
688
|
+
}
|
|
689
|
+
]
|
|
690
|
+
}
|
|
691
|
+
]
|
|
692
|
+
}
|
|
693
|
+
]
|
|
694
|
+
}
|
|
695
|
+
];
|
|
696
|
+
it('should unflatten a nested array inside a block as an array, not an object with numeric keys', ()=>{
|
|
697
|
+
const data = {
|
|
698
|
+
faqContent_0_faqSection_id: '6a1714b81e5f4cdbb51f18b1',
|
|
699
|
+
faqContent_0_faqSection_faqs_0_id: '6a1714c01e5f4cdbb51f18b2',
|
|
700
|
+
faqContent_0_faqSection_faqs_0_question: 'ipsum',
|
|
701
|
+
faqContent_0_faqSection_blockType: 'faqSection'
|
|
702
|
+
};
|
|
703
|
+
const result = unflattenObject({
|
|
704
|
+
data,
|
|
705
|
+
fields: faqFields,
|
|
706
|
+
req: mockReq
|
|
707
|
+
});
|
|
708
|
+
const faqContent = result.faqContent;
|
|
709
|
+
expect(Array.isArray(faqContent)).toBe(true);
|
|
710
|
+
expect(faqContent).toHaveLength(1);
|
|
711
|
+
expect(faqContent[0].blockType).toBe('faqSection');
|
|
712
|
+
const faqs = faqContent[0].faqs;
|
|
713
|
+
expect(Array.isArray(faqs)).toBe(true);
|
|
714
|
+
const faqItems = faqs;
|
|
715
|
+
expect(faqItems[0].question).toBe('ipsum');
|
|
716
|
+
expect(faqItems[0].id).toBe('6a1714c01e5f4cdbb51f18b2');
|
|
717
|
+
});
|
|
718
|
+
it('should parse a richText JSON string inside a nested array within a block', ()=>{
|
|
719
|
+
const richTextValue = {
|
|
720
|
+
root: {
|
|
721
|
+
children: [
|
|
722
|
+
{
|
|
723
|
+
children: [
|
|
724
|
+
{
|
|
725
|
+
detail: 0,
|
|
726
|
+
format: 0,
|
|
727
|
+
mode: 'normal',
|
|
728
|
+
text: 'porksum',
|
|
729
|
+
type: 'text',
|
|
730
|
+
version: 1
|
|
731
|
+
}
|
|
732
|
+
],
|
|
733
|
+
direction: null,
|
|
734
|
+
format: '',
|
|
735
|
+
indent: 0,
|
|
736
|
+
type: 'paragraph',
|
|
737
|
+
version: 1
|
|
738
|
+
}
|
|
739
|
+
],
|
|
740
|
+
direction: null,
|
|
741
|
+
format: '',
|
|
742
|
+
indent: 0,
|
|
743
|
+
type: 'root',
|
|
744
|
+
version: 1
|
|
745
|
+
}
|
|
746
|
+
};
|
|
747
|
+
const data = {
|
|
748
|
+
faqContent_0_faqSection_id: '6a1714b81e5f4cdbb51f18b1',
|
|
749
|
+
faqContent_0_faqSection_faqs_0_id: '6a1714c01e5f4cdbb51f18b2',
|
|
750
|
+
faqContent_0_faqSection_faqs_0_question: 'ipsum',
|
|
751
|
+
faqContent_0_faqSection_faqs_0_answer: JSON.stringify(richTextValue),
|
|
752
|
+
faqContent_0_faqSection_blockType: 'faqSection'
|
|
753
|
+
};
|
|
754
|
+
const importFieldHooks = getImportFieldFunctions({
|
|
755
|
+
fields: faqFields
|
|
756
|
+
});
|
|
757
|
+
const result = unflattenObject({
|
|
758
|
+
data,
|
|
759
|
+
fields: faqFields,
|
|
760
|
+
importFieldHooks,
|
|
761
|
+
req: mockReq
|
|
762
|
+
});
|
|
763
|
+
const faqContent = result.faqContent;
|
|
764
|
+
const faqs = faqContent[0].faqs;
|
|
765
|
+
expect(typeof faqs[0].answer).not.toBe('string');
|
|
766
|
+
expect(faqs[0].answer).toEqual(richTextValue);
|
|
767
|
+
});
|
|
768
|
+
});
|
|
663
769
|
describe('edge cases', ()=>{
|
|
664
770
|
it('should handle empty data', ()=>{
|
|
665
771
|
const result = unflattenObject({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/unflattenObject.spec.ts"],"sourcesContent":["import { FlattenedField, PayloadRequest } from 'payload'\n\nimport { unflattenObject } from './unflattenObject.js'\n\nimport { describe, it, expect, vi } from 'vitest'\n\ndescribe('unflattenObject', () => {\n const mockReq = {\n payload: {\n logger: {\n error: vi.fn(),\n },\n },\n } as unknown as PayloadRequest\n\n describe('hasMany number fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'hasManyNumber',\n type: 'number',\n hasMany: true,\n } as FlattenedField,\n ]\n\n it('should handle comma-separated number strings', () => {\n const data = {\n hasManyNumber: '1,2,3,5,8',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 2, 3, 5, 8],\n })\n })\n\n it('should handle comma-separated numbers with spaces', () => {\n const data = {\n hasManyNumber: ' 10 , 20 , 30 ',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [10, 20, 30],\n })\n })\n\n it('should filter out empty values in comma-separated strings', () => {\n const data = {\n hasManyNumber: '1,,3,,5',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 3, 5],\n })\n })\n\n it('should handle single number values', () => {\n const data = {\n hasManyNumber: 42,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [42],\n })\n })\n\n it('should handle single string number values', () => {\n const data = {\n hasManyNumber: '42',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [42],\n })\n })\n\n it('should handle indexed array format', () => {\n const data = {\n hasManyNumber_0: 1,\n hasManyNumber_1: 2,\n hasManyNumber_2: 3,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 2, 3],\n })\n })\n\n it('should filter out null and empty values from indexed arrays', () => {\n const data = {\n hasManyNumber_0: 1,\n hasManyNumber_1: null,\n hasManyNumber_2: '',\n hasManyNumber_3: 3,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 3],\n })\n })\n\n it('should handle empty, null, and undefined values', () => {\n // explicit null gets converted to empty array in postProcess for hasMany\n expect(unflattenObject({ data: { hasManyNumber: null }, fields, req: mockReq })).toEqual({\n hasManyNumber: [],\n })\n // undefined is skipped entirely (preserves existing data)\n expect(unflattenObject({ data: { hasManyNumber: undefined }, fields, req: mockReq })).toEqual(\n {},\n )\n })\n })\n\n describe('hasMany relationship fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'hasManyRelationship',\n type: 'relationship',\n hasMany: true,\n relationTo: 'posts',\n } as FlattenedField,\n ]\n\n it('should handle comma-separated ID strings', () => {\n const data = {\n hasManyRelationship: 'id1,id2,id3',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id2', 'id3'],\n })\n })\n\n it('should handle comma-separated IDs with spaces', () => {\n const data = {\n hasManyRelationship: ' id1 , id2 , id3 ',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id2', 'id3'],\n })\n })\n\n it('should filter out empty values in comma-separated IDs', () => {\n const data = {\n hasManyRelationship: 'id1,,id3,,id5',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id3', 'id5'],\n })\n })\n\n it('should handle single ID values', () => {\n const data = {\n hasManyRelationship: 'singleId',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['singleId'],\n })\n })\n\n it('should handle indexed array format', () => {\n const data = {\n hasManyRelationship_0: 'id1',\n hasManyRelationship_1: 'id2',\n hasManyRelationship_2: 'id3',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id2', 'id3'],\n })\n })\n\n it('should handle MongoDB ObjectIDs', () => {\n const data = {\n hasManyRelationship: '507f1f77bcf86cd799439011,507f191e810c19729de860ea',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['507f1f77bcf86cd799439011', '507f191e810c19729de860ea'],\n })\n })\n })\n\n describe('localized fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'title',\n type: 'text',\n localized: true,\n } as FlattenedField,\n ]\n\n it('should transform locale-specific keys to nested structure', () => {\n const data = {\n title_en: 'English Title',\n title_es: 'Título en Español',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n title: {\n en: 'English Title',\n es: 'Título en Español',\n },\n })\n })\n\n it('should handle missing locales', () => {\n const data = {\n title_en: 'English Title',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n title: {\n en: 'English Title',\n },\n })\n })\n })\n\n describe('blocks fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'blocks',\n type: 'blocks',\n } as FlattenedField,\n ]\n\n it('should handle block fields with blockType', () => {\n const data = {\n blocks_0_hero_title: 'Hero Title',\n blocks_0_hero_subtitle: 'Hero Subtitle',\n blocks_0_hero_blockType: 'hero',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n blocks: [\n {\n blockType: 'hero',\n title: 'Hero Title',\n subtitle: 'Hero Subtitle',\n },\n ],\n })\n })\n\n it('should handle multiple blocks', () => {\n const data = {\n blocks_0_hero_title: 'Hero Title',\n blocks_0_hero_blockType: 'hero',\n blocks_1_text_content: 'Text Content',\n blocks_1_text_blockType: 'text',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n blocks: [\n {\n blockType: 'hero',\n title: 'Hero Title',\n },\n {\n blockType: 'text',\n content: 'Text Content',\n },\n ],\n })\n })\n })\n\n describe('array fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'items',\n type: 'array',\n } as FlattenedField,\n ]\n\n it('should handle indexed array objects', () => {\n const data = {\n items_0_name: 'Item 1',\n items_0_value: 10,\n items_1_name: 'Item 2',\n items_1_value: 20,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n items: [\n { name: 'Item 1', value: 10 },\n { name: 'Item 2', value: 20 },\n ],\n })\n })\n\n it('should handle sparse arrays', () => {\n const data = {\n items_0_name: 'Item 1',\n items_2_name: 'Item 3',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n items: [{ name: 'Item 1' }, null, { name: 'Item 3' }],\n })\n })\n })\n\n describe('group fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'group',\n type: 'group',\n } as FlattenedField,\n ]\n\n it('should handle nested group fields', () => {\n const data = {\n group_field1: 'Value 1',\n group_field2: 'Value 2',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n group: {\n field1: 'Value 1',\n field2: 'Value 2',\n },\n })\n })\n })\n\n describe('polymorphic relationships', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphic',\n type: 'relationship',\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n it('should handle polymorphic relationship with id and relationTo', () => {\n const data = {\n polymorphic_id: '123',\n polymorphic_relationTo: 'posts',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphic: {\n relationTo: 'posts',\n value: '123',\n },\n })\n })\n\n it('should handle explicitly null polymorphic relationships', () => {\n const data = {\n polymorphic_id: null,\n polymorphic_relationTo: null,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphic: null,\n })\n })\n\n it('should skip polymorphic relationships with undefined values', () => {\n const data = {\n polymorphic_id: undefined,\n polymorphic_relationTo: undefined,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n // Both undefined means field is not set (preserves existing data)\n expect(result).toEqual({})\n })\n\n it('should skip polymorphic relationship with undefined id', () => {\n const data = {\n polymorphic_id: undefined,\n polymorphic_relationTo: 'posts',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n // Undefined ID means don't update this field\n expect(result).toEqual({})\n })\n\n it('should skip polymorphic relationship with undefined relationTo', () => {\n const data = {\n polymorphic_id: '123',\n polymorphic_relationTo: undefined,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n // Undefined relationTo means don't update this field\n expect(result).toEqual({})\n })\n\n it('should handle polymorphic hasMany relationships', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphicMany',\n type: 'relationship',\n hasMany: true,\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n const data = {\n polymorphicMany_0_id: '123',\n polymorphicMany_0_relationTo: 'posts',\n polymorphicMany_1_id: '456',\n polymorphicMany_1_relationTo: 'pages',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphicMany: [\n {\n relationTo: 'posts',\n value: '123',\n },\n {\n relationTo: 'pages',\n value: '456',\n },\n ],\n })\n })\n\n it('should filter out empty polymorphic hasMany items', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphicMany',\n type: 'relationship',\n hasMany: true,\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n const data = {\n polymorphicMany_0_id: '123',\n polymorphicMany_0_relationTo: 'posts',\n polymorphicMany_1_id: null,\n polymorphicMany_1_relationTo: null,\n polymorphicMany_2_id: '456',\n polymorphicMany_2_relationTo: 'pages',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphicMany: [\n {\n relationTo: 'posts',\n value: '123',\n },\n {\n relationTo: 'pages',\n value: '456',\n },\n ],\n })\n })\n\n it('should handle all empty polymorphic hasMany items', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphicMany',\n type: 'relationship',\n hasMany: true,\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n const data = {\n polymorphicMany_0_id: null,\n polymorphicMany_0_relationTo: null,\n polymorphicMany_1_id: '',\n polymorphicMany_1_relationTo: '',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphicMany: [],\n })\n })\n })\n\n describe('field-hook key resolution', () => {\n it('should fire an import hook on a digit-only field name nested inside an array', () => {\n const fields: FlattenedField[] = [\n {\n name: 'archives',\n type: 'array',\n flattenedFields: [{ name: '2024', type: 'text' }],\n } as unknown as FlattenedField,\n ]\n\n const importFieldHooks = {\n archives_2024: {\n type: 'beforeImport' as const,\n fn: ({ value }: { value: unknown }) => `transformed-${value as string}`,\n },\n }\n\n const data = { archives_0_2024: 'raw' }\n\n const result = unflattenObject({\n data,\n fields,\n importFieldHooks,\n req: mockReq,\n })\n\n const archives = result.archives as Array<Record<string, unknown>>\n expect(archives[0]!['2024']).toBe('transformed-raw')\n })\n })\n\n describe('edge cases', () => {\n it('should handle empty data', () => {\n const result = unflattenObject({ data: {}, fields: [], req: mockReq })\n expect(result).toEqual({})\n })\n\n it('should handle null data', () => {\n const result = unflattenObject({ data: null as any, fields: [], req: mockReq })\n expect(result).toEqual({})\n })\n\n it('should handle undefined values', () => {\n const data = {\n field1: undefined,\n field2: 'value',\n }\n\n const result = unflattenObject({ data, fields: [], req: mockReq })\n expect(result).toEqual({ field2: 'value' })\n })\n\n it('should preserve null values for validation', () => {\n const data = {\n field1: null,\n field2: 'value',\n }\n\n const result = unflattenObject({ data, fields: [], req: mockReq })\n // null values are preserved for validation\n expect(result).toEqual({ field1: null, field2: 'value' })\n })\n })\n})\n"],"names":["unflattenObject","describe","it","expect","vi","mockReq","payload","logger","error","fn","fields","name","type","hasMany","data","hasManyNumber","result","req","toEqual","hasManyNumber_0","hasManyNumber_1","hasManyNumber_2","hasManyNumber_3","undefined","relationTo","hasManyRelationship","hasManyRelationship_0","hasManyRelationship_1","hasManyRelationship_2","localized","title_en","title_es","title","en","es","blocks_0_hero_title","blocks_0_hero_subtitle","blocks_0_hero_blockType","blocks","blockType","subtitle","blocks_1_text_content","blocks_1_text_blockType","content","items_0_name","items_0_value","items_1_name","items_1_value","items","value","items_2_name","group_field1","group_field2","group","field1","field2","polymorphic_id","polymorphic_relationTo","polymorphic","polymorphicMany_0_id","polymorphicMany_0_relationTo","polymorphicMany_1_id","polymorphicMany_1_relationTo","polymorphicMany","polymorphicMany_2_id","polymorphicMany_2_relationTo","flattenedFields","importFieldHooks","archives_2024","archives_0_2024","archives","toBe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/unflattenObject.spec.ts"],"sourcesContent":["import { FlattenedField, PayloadRequest } from 'payload'\n\nimport { getImportFieldFunctions } from './getImportFieldFunctions.js'\nimport { unflattenObject } from './unflattenObject.js'\n\nimport { describe, it, expect, vi } from 'vitest'\n\ndescribe('unflattenObject', () => {\n const mockReq = {\n payload: {\n logger: {\n error: vi.fn(),\n },\n },\n } as unknown as PayloadRequest\n\n describe('hasMany number fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'hasManyNumber',\n type: 'number',\n hasMany: true,\n } as FlattenedField,\n ]\n\n it('should handle comma-separated number strings', () => {\n const data = {\n hasManyNumber: '1,2,3,5,8',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 2, 3, 5, 8],\n })\n })\n\n it('should handle comma-separated numbers with spaces', () => {\n const data = {\n hasManyNumber: ' 10 , 20 , 30 ',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [10, 20, 30],\n })\n })\n\n it('should filter out empty values in comma-separated strings', () => {\n const data = {\n hasManyNumber: '1,,3,,5',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 3, 5],\n })\n })\n\n it('should handle single number values', () => {\n const data = {\n hasManyNumber: 42,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [42],\n })\n })\n\n it('should handle single string number values', () => {\n const data = {\n hasManyNumber: '42',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [42],\n })\n })\n\n it('should handle indexed array format', () => {\n const data = {\n hasManyNumber_0: 1,\n hasManyNumber_1: 2,\n hasManyNumber_2: 3,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 2, 3],\n })\n })\n\n it('should filter out null and empty values from indexed arrays', () => {\n const data = {\n hasManyNumber_0: 1,\n hasManyNumber_1: null,\n hasManyNumber_2: '',\n hasManyNumber_3: 3,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 3],\n })\n })\n\n it('should handle empty, null, and undefined values', () => {\n // explicit null gets converted to empty array in postProcess for hasMany\n expect(unflattenObject({ data: { hasManyNumber: null }, fields, req: mockReq })).toEqual({\n hasManyNumber: [],\n })\n // undefined is skipped entirely (preserves existing data)\n expect(unflattenObject({ data: { hasManyNumber: undefined }, fields, req: mockReq })).toEqual(\n {},\n )\n })\n })\n\n describe('hasMany relationship fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'hasManyRelationship',\n type: 'relationship',\n hasMany: true,\n relationTo: 'posts',\n } as FlattenedField,\n ]\n\n it('should handle comma-separated ID strings', () => {\n const data = {\n hasManyRelationship: 'id1,id2,id3',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id2', 'id3'],\n })\n })\n\n it('should handle comma-separated IDs with spaces', () => {\n const data = {\n hasManyRelationship: ' id1 , id2 , id3 ',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id2', 'id3'],\n })\n })\n\n it('should filter out empty values in comma-separated IDs', () => {\n const data = {\n hasManyRelationship: 'id1,,id3,,id5',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id3', 'id5'],\n })\n })\n\n it('should handle single ID values', () => {\n const data = {\n hasManyRelationship: 'singleId',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['singleId'],\n })\n })\n\n it('should handle indexed array format', () => {\n const data = {\n hasManyRelationship_0: 'id1',\n hasManyRelationship_1: 'id2',\n hasManyRelationship_2: 'id3',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id2', 'id3'],\n })\n })\n\n it('should handle MongoDB ObjectIDs', () => {\n const data = {\n hasManyRelationship: '507f1f77bcf86cd799439011,507f191e810c19729de860ea',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['507f1f77bcf86cd799439011', '507f191e810c19729de860ea'],\n })\n })\n })\n\n describe('localized fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'title',\n type: 'text',\n localized: true,\n } as FlattenedField,\n ]\n\n it('should transform locale-specific keys to nested structure', () => {\n const data = {\n title_en: 'English Title',\n title_es: 'Título en Español',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n title: {\n en: 'English Title',\n es: 'Título en Español',\n },\n })\n })\n\n it('should handle missing locales', () => {\n const data = {\n title_en: 'English Title',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n title: {\n en: 'English Title',\n },\n })\n })\n })\n\n describe('blocks fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'blocks',\n type: 'blocks',\n } as FlattenedField,\n ]\n\n it('should handle block fields with blockType', () => {\n const data = {\n blocks_0_hero_title: 'Hero Title',\n blocks_0_hero_subtitle: 'Hero Subtitle',\n blocks_0_hero_blockType: 'hero',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n blocks: [\n {\n blockType: 'hero',\n title: 'Hero Title',\n subtitle: 'Hero Subtitle',\n },\n ],\n })\n })\n\n it('should handle multiple blocks', () => {\n const data = {\n blocks_0_hero_title: 'Hero Title',\n blocks_0_hero_blockType: 'hero',\n blocks_1_text_content: 'Text Content',\n blocks_1_text_blockType: 'text',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n blocks: [\n {\n blockType: 'hero',\n title: 'Hero Title',\n },\n {\n blockType: 'text',\n content: 'Text Content',\n },\n ],\n })\n })\n })\n\n describe('array fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'items',\n type: 'array',\n } as FlattenedField,\n ]\n\n it('should handle indexed array objects', () => {\n const data = {\n items_0_name: 'Item 1',\n items_0_value: 10,\n items_1_name: 'Item 2',\n items_1_value: 20,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n items: [\n { name: 'Item 1', value: 10 },\n { name: 'Item 2', value: 20 },\n ],\n })\n })\n\n it('should handle sparse arrays', () => {\n const data = {\n items_0_name: 'Item 1',\n items_2_name: 'Item 3',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n items: [{ name: 'Item 1' }, null, { name: 'Item 3' }],\n })\n })\n })\n\n describe('group fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'group',\n type: 'group',\n } as FlattenedField,\n ]\n\n it('should handle nested group fields', () => {\n const data = {\n group_field1: 'Value 1',\n group_field2: 'Value 2',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n group: {\n field1: 'Value 1',\n field2: 'Value 2',\n },\n })\n })\n })\n\n describe('polymorphic relationships', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphic',\n type: 'relationship',\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n it('should handle polymorphic relationship with id and relationTo', () => {\n const data = {\n polymorphic_id: '123',\n polymorphic_relationTo: 'posts',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphic: {\n relationTo: 'posts',\n value: '123',\n },\n })\n })\n\n it('should handle explicitly null polymorphic relationships', () => {\n const data = {\n polymorphic_id: null,\n polymorphic_relationTo: null,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphic: null,\n })\n })\n\n it('should skip polymorphic relationships with undefined values', () => {\n const data = {\n polymorphic_id: undefined,\n polymorphic_relationTo: undefined,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n // Both undefined means field is not set (preserves existing data)\n expect(result).toEqual({})\n })\n\n it('should skip polymorphic relationship with undefined id', () => {\n const data = {\n polymorphic_id: undefined,\n polymorphic_relationTo: 'posts',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n // Undefined ID means don't update this field\n expect(result).toEqual({})\n })\n\n it('should skip polymorphic relationship with undefined relationTo', () => {\n const data = {\n polymorphic_id: '123',\n polymorphic_relationTo: undefined,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n // Undefined relationTo means don't update this field\n expect(result).toEqual({})\n })\n\n it('should handle polymorphic hasMany relationships', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphicMany',\n type: 'relationship',\n hasMany: true,\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n const data = {\n polymorphicMany_0_id: '123',\n polymorphicMany_0_relationTo: 'posts',\n polymorphicMany_1_id: '456',\n polymorphicMany_1_relationTo: 'pages',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphicMany: [\n {\n relationTo: 'posts',\n value: '123',\n },\n {\n relationTo: 'pages',\n value: '456',\n },\n ],\n })\n })\n\n it('should filter out empty polymorphic hasMany items', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphicMany',\n type: 'relationship',\n hasMany: true,\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n const data = {\n polymorphicMany_0_id: '123',\n polymorphicMany_0_relationTo: 'posts',\n polymorphicMany_1_id: null,\n polymorphicMany_1_relationTo: null,\n polymorphicMany_2_id: '456',\n polymorphicMany_2_relationTo: 'pages',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphicMany: [\n {\n relationTo: 'posts',\n value: '123',\n },\n {\n relationTo: 'pages',\n value: '456',\n },\n ],\n })\n })\n\n it('should handle all empty polymorphic hasMany items', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphicMany',\n type: 'relationship',\n hasMany: true,\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n const data = {\n polymorphicMany_0_id: null,\n polymorphicMany_0_relationTo: null,\n polymorphicMany_1_id: '',\n polymorphicMany_1_relationTo: '',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphicMany: [],\n })\n })\n })\n\n describe('field-hook key resolution', () => {\n it('should fire an import hook on a digit-only field name nested inside an array', () => {\n const fields: FlattenedField[] = [\n {\n name: 'archives',\n type: 'array',\n flattenedFields: [{ name: '2024', type: 'text' }],\n } as unknown as FlattenedField,\n ]\n\n const importFieldHooks = {\n archives_2024: {\n type: 'beforeImport' as const,\n fn: ({ value }: { value: unknown }) => `transformed-${value as string}`,\n },\n }\n\n const data = { archives_0_2024: 'raw' }\n\n const result = unflattenObject({\n data,\n fields,\n importFieldHooks,\n req: mockReq,\n })\n\n const archives = result.archives as Array<Record<string, unknown>>\n expect(archives[0]!['2024']).toBe('transformed-raw')\n })\n })\n\n describe('blocks with nested arrays', () => {\n const faqFields: FlattenedField[] = [\n {\n name: 'faqContent',\n type: 'blocks',\n blocks: [\n {\n slug: 'faqSection',\n flattenedFields: [\n {\n name: 'faqs',\n type: 'array',\n flattenedFields: [\n { name: 'id', type: 'text' },\n { name: 'question', type: 'text' },\n { name: 'answer', type: 'richText' },\n ],\n },\n ],\n },\n ],\n },\n ] as unknown as FlattenedField[]\n\n it('should unflatten a nested array inside a block as an array, not an object with numeric keys', () => {\n const data = {\n faqContent_0_faqSection_id: '6a1714b81e5f4cdbb51f18b1',\n faqContent_0_faqSection_faqs_0_id: '6a1714c01e5f4cdbb51f18b2',\n faqContent_0_faqSection_faqs_0_question: 'ipsum',\n faqContent_0_faqSection_blockType: 'faqSection',\n }\n\n const result = unflattenObject({ data, fields: faqFields, req: mockReq })\n\n const faqContent = result.faqContent as Array<Record<string, unknown>>\n expect(Array.isArray(faqContent)).toBe(true)\n expect(faqContent).toHaveLength(1)\n expect(faqContent[0]!.blockType).toBe('faqSection')\n\n const faqs = faqContent[0]!.faqs\n expect(Array.isArray(faqs)).toBe(true)\n\n const faqItems = faqs as Array<Record<string, unknown>>\n expect(faqItems[0]!.question).toBe('ipsum')\n expect(faqItems[0]!.id).toBe('6a1714c01e5f4cdbb51f18b2')\n })\n\n it('should parse a richText JSON string inside a nested array within a block', () => {\n const richTextValue = {\n root: {\n children: [\n {\n children: [\n { detail: 0, format: 0, mode: 'normal', text: 'porksum', type: 'text', version: 1 },\n ],\n direction: null,\n format: '',\n indent: 0,\n type: 'paragraph',\n version: 1,\n },\n ],\n direction: null,\n format: '',\n indent: 0,\n type: 'root',\n version: 1,\n },\n }\n\n const data = {\n faqContent_0_faqSection_id: '6a1714b81e5f4cdbb51f18b1',\n faqContent_0_faqSection_faqs_0_id: '6a1714c01e5f4cdbb51f18b2',\n faqContent_0_faqSection_faqs_0_question: 'ipsum',\n faqContent_0_faqSection_faqs_0_answer: JSON.stringify(richTextValue),\n faqContent_0_faqSection_blockType: 'faqSection',\n }\n\n const importFieldHooks = getImportFieldFunctions({ fields: faqFields })\n const result = unflattenObject({ data, fields: faqFields, importFieldHooks, req: mockReq })\n\n const faqContent = result.faqContent as Array<Record<string, unknown>>\n const faqs = faqContent[0]!.faqs as Array<Record<string, unknown>>\n\n expect(typeof faqs[0]!.answer).not.toBe('string')\n expect(faqs[0]!.answer).toEqual(richTextValue)\n })\n })\n\n describe('edge cases', () => {\n it('should handle empty data', () => {\n const result = unflattenObject({ data: {}, fields: [], req: mockReq })\n expect(result).toEqual({})\n })\n\n it('should handle null data', () => {\n const result = unflattenObject({ data: null as any, fields: [], req: mockReq })\n expect(result).toEqual({})\n })\n\n it('should handle undefined values', () => {\n const data = {\n field1: undefined,\n field2: 'value',\n }\n\n const result = unflattenObject({ data, fields: [], req: mockReq })\n expect(result).toEqual({ field2: 'value' })\n })\n\n it('should preserve null values for validation', () => {\n const data = {\n field1: null,\n field2: 'value',\n }\n\n const result = unflattenObject({ data, fields: [], req: mockReq })\n // null values are preserved for validation\n expect(result).toEqual({ field1: null, field2: 'value' })\n })\n })\n})\n"],"names":["getImportFieldFunctions","unflattenObject","describe","it","expect","vi","mockReq","payload","logger","error","fn","fields","name","type","hasMany","data","hasManyNumber","result","req","toEqual","hasManyNumber_0","hasManyNumber_1","hasManyNumber_2","hasManyNumber_3","undefined","relationTo","hasManyRelationship","hasManyRelationship_0","hasManyRelationship_1","hasManyRelationship_2","localized","title_en","title_es","title","en","es","blocks_0_hero_title","blocks_0_hero_subtitle","blocks_0_hero_blockType","blocks","blockType","subtitle","blocks_1_text_content","blocks_1_text_blockType","content","items_0_name","items_0_value","items_1_name","items_1_value","items","value","items_2_name","group_field1","group_field2","group","field1","field2","polymorphic_id","polymorphic_relationTo","polymorphic","polymorphicMany_0_id","polymorphicMany_0_relationTo","polymorphicMany_1_id","polymorphicMany_1_relationTo","polymorphicMany","polymorphicMany_2_id","polymorphicMany_2_relationTo","flattenedFields","importFieldHooks","archives_2024","archives_0_2024","archives","toBe","faqFields","slug","faqContent_0_faqSection_id","faqContent_0_faqSection_faqs_0_id","faqContent_0_faqSection_faqs_0_question","faqContent_0_faqSection_blockType","faqContent","Array","isArray","toHaveLength","faqs","faqItems","question","id","richTextValue","root","children","detail","format","mode","text","version","direction","indent","faqContent_0_faqSection_faqs_0_answer","JSON","stringify","answer","not"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unflattenPostProcess.d.ts","sourceRoot":"","sources":["../../src/utilities/unflattenPostProcess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"unflattenPostProcess.d.ts","sourceRoot":"","sources":["../../src/utilities/unflattenPostProcess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAuM7C;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAC9B,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,QAAQ,cAAc,EAAE,KACvB,IAMF,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getBlockFlattenedFields, getNestedFlattenedFields } from './flattenedFields.js';
|
|
1
2
|
import { isPlainObject } from './isPlainObject.js';
|
|
2
3
|
import { processRichTextField } from './processRichTextField.js';
|
|
3
4
|
const normalizeLocalizedFields = (doc, fields)=>{
|
|
@@ -107,29 +108,54 @@ const normalizePolymorphicRelationships = (doc, fields)=>{
|
|
|
107
108
|
}
|
|
108
109
|
}
|
|
109
110
|
};
|
|
110
|
-
const
|
|
111
|
-
for (const field of fields
|
|
112
|
-
if (
|
|
113
|
-
|
|
111
|
+
const normalizeRichTextInFields = (doc, fields)=>{
|
|
112
|
+
for (const field of fields){
|
|
113
|
+
if (!('name' in field) || !field.name || !(field.name in doc)) {
|
|
114
|
+
continue;
|
|
114
115
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const blocks = doc[field.name];
|
|
118
|
-
if (!Array.isArray(blocks)) {
|
|
116
|
+
const value = doc[field.name];
|
|
117
|
+
if (value === null || value === undefined) {
|
|
119
118
|
continue;
|
|
120
119
|
}
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
if (field.type === 'richText') {
|
|
121
|
+
doc[field.name] = processRichTextField(value);
|
|
122
|
+
} else if (field.type === 'blocks') {
|
|
123
|
+
if (!Array.isArray(value)) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const blockDefs = field.blocks ?? [];
|
|
127
|
+
for (const blockItem of value){
|
|
128
|
+
if (!isPlainObject(blockItem)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const blockDef = blockDefs.find((b)=>b.slug === blockItem.blockType);
|
|
132
|
+
if (blockDef) {
|
|
133
|
+
normalizeRichTextInFields(blockItem, getBlockFlattenedFields(blockDef));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
} else if (field.type === 'array') {
|
|
137
|
+
if (!Array.isArray(value)) {
|
|
123
138
|
continue;
|
|
124
139
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
140
|
+
const nestedFields = getNestedFlattenedFields(field) ?? [];
|
|
141
|
+
for (const item of value){
|
|
142
|
+
if (!isPlainObject(item)) {
|
|
143
|
+
continue;
|
|
128
144
|
}
|
|
145
|
+
normalizeRichTextInFields(item, nestedFields);
|
|
129
146
|
}
|
|
147
|
+
} else if (field.type === 'group' || field.type === 'tab') {
|
|
148
|
+
if (!isPlainObject(value)) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
const nestedFields = getNestedFlattenedFields(field) ?? [];
|
|
152
|
+
normalizeRichTextInFields(value, nestedFields);
|
|
130
153
|
}
|
|
131
154
|
}
|
|
132
155
|
};
|
|
156
|
+
const normalizeRichText = (doc, fields)=>{
|
|
157
|
+
normalizeRichTextInFields(doc, fields);
|
|
158
|
+
};
|
|
133
159
|
/**
|
|
134
160
|
* Post-processes the unflattened document to handle special field types:
|
|
135
161
|
* - Localized fields: transforms field_locale keys to nested { field: { locale: value } }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/unflattenPostProcess.ts"],"sourcesContent":["import type { FlattenedField } from 'payload'\n\nimport { isPlainObject } from './isPlainObject.js'\nimport { processRichTextField } from './processRichTextField.js'\n\nconst normalizeLocalizedFields = (doc: Record<string, unknown>, fields: FlattenedField[]): void => {\n const processed = new Set<string>()\n\n for (const field of fields.filter((f) => f.localized)) {\n if (processed.has(field.name)) {\n continue\n }\n\n const localePattern = new RegExp(`^${field.name}_([a-z]{2}(?:_[A-Z]{2})?)$`)\n const localeData: Record<string, unknown> = {}\n const keysToDelete: string[] = []\n\n for (const [key, value] of Object.entries(doc)) {\n const match = key.match(localePattern)\n if (match && match[1]) {\n localeData[match[1]] = value\n keysToDelete.push(key)\n }\n }\n\n if (Object.keys(localeData).length > 0) {\n doc[field.name] = localeData\n keysToDelete.forEach((key) => delete doc[key])\n processed.add(field.name)\n }\n }\n}\n\nconst normalizeHasManyNumbers = (doc: Record<string, unknown>, fields: FlattenedField[]): void => {\n const numberFields = fields.filter((field) => field.type === 'number' && field.hasMany)\n for (const field of numberFields) {\n if (!(field.name in doc)) {\n continue\n }\n const value = doc[field.name]\n\n if (typeof value === 'string' && value.includes(',')) {\n doc[field.name] = value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '')\n .map((v) => {\n const num = parseFloat(v)\n return isNaN(num) ? 0 : num\n })\n } else if (Array.isArray(value)) {\n doc[field.name] = value\n .filter((v) => v !== null && v !== undefined && v !== '')\n .map((v) => {\n if (typeof v === 'string') {\n const num = parseFloat(v)\n return isNaN(num) ? 0 : num\n }\n return v\n })\n } else if (value !== null && value !== undefined && value !== '') {\n const num = typeof value === 'string' ? parseFloat(value) : value\n doc[field.name] = isNaN(num as number) ? [] : [num]\n } else {\n doc[field.name] = []\n }\n }\n}\n\nconst normalizeHasManyRelationships = (\n doc: Record<string, unknown>,\n fields: FlattenedField[],\n): void => {\n const relationshipFields = fields.filter(\n (field) =>\n (field.type === 'relationship' || field.type === 'upload') &&\n field.hasMany === true &&\n !Array.isArray(field.relationTo),\n )\n\n for (const field of relationshipFields) {\n const value = doc[field.name]\n\n if (typeof value === 'string' && value.includes(',')) {\n doc[field.name] = value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '')\n } else if (Array.isArray(value)) {\n doc[field.name] = value.filter((v) => v !== null && v !== undefined && v !== '')\n } else if (value !== null && value !== undefined && value !== '') {\n doc[field.name] = [value]\n }\n }\n}\n\nconst normalizePolymorphicRelationships = (\n doc: Record<string, unknown>,\n fields: FlattenedField[],\n): void => {\n for (const [key, value] of Object.entries(doc)) {\n if (Array.isArray(value)) {\n const hasPolymorphicItems = value.some((item) => isPlainObject(item) && 'relationTo' in item)\n\n if (!hasPolymorphicItems) {\n continue\n }\n\n const processedArray: unknown[] = []\n for (const item of value) {\n if (isPlainObject(item) && 'relationTo' in item) {\n if (!item.relationTo || (!item.id && !item.value)) {\n continue\n }\n if ('id' in item) {\n item.value = item.id\n delete item.id\n }\n processedArray.push(item)\n } else if (item !== null && item !== undefined) {\n processedArray.push(item)\n }\n }\n\n if (value.length !== processedArray.length) {\n doc[key] = processedArray.length > 0 ? processedArray : []\n }\n } else if (isPlainObject(value)) {\n if ('relationTo' in value && ('id' in value || 'value' in value)) {\n if (!value.relationTo || (!value.id && !value.value)) {\n doc[key] = null\n } else if ('id' in value && !('value' in value)) {\n value.value = value.id\n delete value.id\n }\n } else {\n normalizePolymorphicRelationships(value, fields)\n }\n }\n }\n}\n\nconst normalizeRichText = (doc: Record<string, unknown>, fields: FlattenedField[]): void => {\n for (const field of fields.filter((f) => f.type === 'richText')) {\n if (field.name in doc && doc[field.name]) {\n doc[field.name] = processRichTextField(doc[field.name])\n }\n }\n\n for (const field of fields.filter((f) => f.type === 'blocks')) {\n const blocks = doc[field.name]\n if (!Array.isArray(blocks)) {\n continue\n }\n for (const block of blocks) {\n if (!isPlainObject(block)) {\n continue\n }\n for (const [key, value] of Object.entries(block)) {\n if (key === 'richText' || (typeof key === 'string' && key.includes('richText'))) {\n block[key] = processRichTextField(value)\n }\n }\n }\n }\n}\n\n/**\n * Post-processes the unflattened document to handle special field types:\n * - Localized fields: transforms field_locale keys to nested { field: { locale: value } }\n * - Number hasMany: converts comma-separated strings or arrays to number arrays\n * - Relationship hasMany: converts comma-separated IDs to arrays\n * - Polymorphic relationships: transforms flat {relationTo, id} to {relationTo, value}\n * - Rich text fields: ensures proper data structure\n */\nexport const postProcessDocument = (\n doc: Record<string, unknown>,\n fields: FlattenedField[],\n): void => {\n normalizeLocalizedFields(doc, fields)\n normalizeHasManyNumbers(doc, fields)\n normalizeHasManyRelationships(doc, fields)\n normalizePolymorphicRelationships(doc, fields)\n normalizeRichText(doc, fields)\n}\n"],"names":["isPlainObject","processRichTextField","normalizeLocalizedFields","doc","fields","processed","Set","field","filter","f","localized","has","name","localePattern","RegExp","localeData","keysToDelete","key","value","Object","entries","match","push","keys","length","forEach","add","normalizeHasManyNumbers","numberFields","type","hasMany","includes","split","map","v","trim","num","parseFloat","isNaN","Array","isArray","undefined","normalizeHasManyRelationships","relationshipFields","relationTo","normalizePolymorphicRelationships","hasPolymorphicItems","some","item","processedArray","id","normalizeRichText","blocks","block","postProcessDocument"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/unflattenPostProcess.ts"],"sourcesContent":["import type { FlattenedField } from 'payload'\n\nimport { getBlockFlattenedFields, getNestedFlattenedFields } from './flattenedFields.js'\nimport { isPlainObject } from './isPlainObject.js'\nimport { processRichTextField } from './processRichTextField.js'\n\nconst normalizeLocalizedFields = (doc: Record<string, unknown>, fields: FlattenedField[]): void => {\n const processed = new Set<string>()\n\n for (const field of fields.filter((f) => f.localized)) {\n if (processed.has(field.name)) {\n continue\n }\n\n const localePattern = new RegExp(`^${field.name}_([a-z]{2}(?:_[A-Z]{2})?)$`)\n const localeData: Record<string, unknown> = {}\n const keysToDelete: string[] = []\n\n for (const [key, value] of Object.entries(doc)) {\n const match = key.match(localePattern)\n if (match && match[1]) {\n localeData[match[1]] = value\n keysToDelete.push(key)\n }\n }\n\n if (Object.keys(localeData).length > 0) {\n doc[field.name] = localeData\n keysToDelete.forEach((key) => delete doc[key])\n processed.add(field.name)\n }\n }\n}\n\nconst normalizeHasManyNumbers = (doc: Record<string, unknown>, fields: FlattenedField[]): void => {\n const numberFields = fields.filter((field) => field.type === 'number' && field.hasMany)\n for (const field of numberFields) {\n if (!(field.name in doc)) {\n continue\n }\n const value = doc[field.name]\n\n if (typeof value === 'string' && value.includes(',')) {\n doc[field.name] = value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '')\n .map((v) => {\n const num = parseFloat(v)\n return isNaN(num) ? 0 : num\n })\n } else if (Array.isArray(value)) {\n doc[field.name] = value\n .filter((v) => v !== null && v !== undefined && v !== '')\n .map((v) => {\n if (typeof v === 'string') {\n const num = parseFloat(v)\n return isNaN(num) ? 0 : num\n }\n return v\n })\n } else if (value !== null && value !== undefined && value !== '') {\n const num = typeof value === 'string' ? parseFloat(value) : value\n doc[field.name] = isNaN(num as number) ? [] : [num]\n } else {\n doc[field.name] = []\n }\n }\n}\n\nconst normalizeHasManyRelationships = (\n doc: Record<string, unknown>,\n fields: FlattenedField[],\n): void => {\n const relationshipFields = fields.filter(\n (field) =>\n (field.type === 'relationship' || field.type === 'upload') &&\n field.hasMany === true &&\n !Array.isArray(field.relationTo),\n )\n\n for (const field of relationshipFields) {\n const value = doc[field.name]\n\n if (typeof value === 'string' && value.includes(',')) {\n doc[field.name] = value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '')\n } else if (Array.isArray(value)) {\n doc[field.name] = value.filter((v) => v !== null && v !== undefined && v !== '')\n } else if (value !== null && value !== undefined && value !== '') {\n doc[field.name] = [value]\n }\n }\n}\n\nconst normalizePolymorphicRelationships = (\n doc: Record<string, unknown>,\n fields: FlattenedField[],\n): void => {\n for (const [key, value] of Object.entries(doc)) {\n if (Array.isArray(value)) {\n const hasPolymorphicItems = value.some((item) => isPlainObject(item) && 'relationTo' in item)\n\n if (!hasPolymorphicItems) {\n continue\n }\n\n const processedArray: unknown[] = []\n for (const item of value) {\n if (isPlainObject(item) && 'relationTo' in item) {\n if (!item.relationTo || (!item.id && !item.value)) {\n continue\n }\n if ('id' in item) {\n item.value = item.id\n delete item.id\n }\n processedArray.push(item)\n } else if (item !== null && item !== undefined) {\n processedArray.push(item)\n }\n }\n\n if (value.length !== processedArray.length) {\n doc[key] = processedArray.length > 0 ? processedArray : []\n }\n } else if (isPlainObject(value)) {\n if ('relationTo' in value && ('id' in value || 'value' in value)) {\n if (!value.relationTo || (!value.id && !value.value)) {\n doc[key] = null\n } else if ('id' in value && !('value' in value)) {\n value.value = value.id\n delete value.id\n }\n } else {\n normalizePolymorphicRelationships(value, fields)\n }\n }\n }\n}\n\nconst normalizeRichTextInFields = (\n doc: Record<string, unknown>,\n fields: FlattenedField[],\n): void => {\n for (const field of fields) {\n if (!('name' in field) || !field.name || !(field.name in doc)) {\n continue\n }\n const value = doc[field.name]\n if (value === null || value === undefined) {\n continue\n }\n\n if (field.type === 'richText') {\n doc[field.name] = processRichTextField(value)\n } else if (field.type === 'blocks') {\n if (!Array.isArray(value)) {\n continue\n }\n const blockDefs =\n (field as { blocks?: Array<{ flattenedFields?: FlattenedField[]; slug: string }> })\n .blocks ?? []\n for (const blockItem of value) {\n if (!isPlainObject(blockItem)) {\n continue\n }\n const blockDef = blockDefs.find((b) => b.slug === blockItem.blockType)\n if (blockDef) {\n normalizeRichTextInFields(blockItem, getBlockFlattenedFields(blockDef))\n }\n }\n } else if (field.type === 'array') {\n if (!Array.isArray(value)) {\n continue\n }\n const nestedFields = getNestedFlattenedFields(field) ?? []\n for (const item of value) {\n if (!isPlainObject(item)) {\n continue\n }\n normalizeRichTextInFields(item, nestedFields)\n }\n } else if (field.type === 'group' || field.type === 'tab') {\n if (!isPlainObject(value)) {\n continue\n }\n const nestedFields = getNestedFlattenedFields(field) ?? []\n normalizeRichTextInFields(value, nestedFields)\n }\n }\n}\n\nconst normalizeRichText = (doc: Record<string, unknown>, fields: FlattenedField[]): void => {\n normalizeRichTextInFields(doc, fields)\n}\n\n/**\n * Post-processes the unflattened document to handle special field types:\n * - Localized fields: transforms field_locale keys to nested { field: { locale: value } }\n * - Number hasMany: converts comma-separated strings or arrays to number arrays\n * - Relationship hasMany: converts comma-separated IDs to arrays\n * - Polymorphic relationships: transforms flat {relationTo, id} to {relationTo, value}\n * - Rich text fields: ensures proper data structure\n */\nexport const postProcessDocument = (\n doc: Record<string, unknown>,\n fields: FlattenedField[],\n): void => {\n normalizeLocalizedFields(doc, fields)\n normalizeHasManyNumbers(doc, fields)\n normalizeHasManyRelationships(doc, fields)\n normalizePolymorphicRelationships(doc, fields)\n normalizeRichText(doc, fields)\n}\n"],"names":["getBlockFlattenedFields","getNestedFlattenedFields","isPlainObject","processRichTextField","normalizeLocalizedFields","doc","fields","processed","Set","field","filter","f","localized","has","name","localePattern","RegExp","localeData","keysToDelete","key","value","Object","entries","match","push","keys","length","forEach","add","normalizeHasManyNumbers","numberFields","type","hasMany","includes","split","map","v","trim","num","parseFloat","isNaN","Array","isArray","undefined","normalizeHasManyRelationships","relationshipFields","relationTo","normalizePolymorphicRelationships","hasPolymorphicItems","some","item","processedArray","id","normalizeRichTextInFields","blockDefs","blocks","blockItem","blockDef","find","b","slug","blockType","nestedFields","normalizeRichText","postProcessDocument"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateLimitValue.d.ts","sourceRoot":"","sources":["../../src/utilities/validateLimitValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEzD,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"validateLimitValue.d.ts","sourceRoot":"","sources":["../../src/utilities/validateLimitValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEzD,eAAO,MAAM,kBAAkB,GAC7B,OAAO,IAAI,GAAG,MAAM,GAAG,SAAS,EAChC,GAAG,SAAS,KACX,MAAM,GAAG,SAMX,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/plugin-import-export",
|
|
3
|
-
"version": "4.0.0-internal.
|
|
3
|
+
"version": "4.0.0-internal.5d5a2b2",
|
|
4
4
|
"description": "Import-Export plugin for Payload",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"payload",
|
|
@@ -64,17 +64,17 @@
|
|
|
64
64
|
"csv-parse": "5.6.0",
|
|
65
65
|
"csv-stringify": "6.5.2",
|
|
66
66
|
"qs-esm": "8.0.1",
|
|
67
|
-
"@payloadcms/translations": "4.0.0-internal.
|
|
68
|
-
"@payloadcms/ui": "4.0.0-internal.
|
|
67
|
+
"@payloadcms/translations": "4.0.0-internal.5d5a2b2",
|
|
68
|
+
"@payloadcms/ui": "4.0.0-internal.5d5a2b2"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
|
-
"@payloadcms/
|
|
72
|
-
"
|
|
73
|
-
"
|
|
71
|
+
"@payloadcms/eslint-config": "3.28.0",
|
|
72
|
+
"@payloadcms/ui": "4.0.0-internal.5d5a2b2",
|
|
73
|
+
"payload": "4.0.0-internal.5d5a2b2"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
|
-
"@payloadcms/ui": "4.0.0-internal.
|
|
77
|
-
"payload": "4.0.0-internal.
|
|
76
|
+
"@payloadcms/ui": "4.0.0-internal.5d5a2b2",
|
|
77
|
+
"payload": "4.0.0-internal.5d5a2b2"
|
|
78
78
|
},
|
|
79
79
|
"homepage:": "https://payloadcms.com",
|
|
80
80
|
"scripts": {
|