@payloadcms/plugin-import-export 4.0.0-internal.5d5a2b2 → 4.0.0-internal.5e065b3

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.
Files changed (192) hide show
  1. package/dist/components/CollectionField/index.d.ts +3 -2
  2. package/dist/components/CollectionField/index.d.ts.map +1 -1
  3. package/dist/components/CollectionField/index.js.map +1 -1
  4. package/dist/components/ExportListMenuItem/index.d.ts.map +1 -1
  5. package/dist/components/ExportListMenuItem/index.js +14 -12
  6. package/dist/components/ExportListMenuItem/index.js.map +1 -1
  7. package/dist/components/ExportPreview/index.css +52 -0
  8. package/dist/components/ExportPreview/index.d.ts +1 -1
  9. package/dist/components/ExportPreview/index.d.ts.map +1 -1
  10. package/dist/components/ExportPreview/index.js +12 -2
  11. package/dist/components/ExportPreview/index.js.map +1 -1
  12. package/dist/components/FieldsToExport/index.d.ts +3 -2
  13. package/dist/components/FieldsToExport/index.d.ts.map +1 -1
  14. package/dist/components/FieldsToExport/index.js +18 -15
  15. package/dist/components/FieldsToExport/index.js.map +1 -1
  16. package/dist/components/FieldsToExport/reduceFields.d.ts +6 -0
  17. package/dist/components/FieldsToExport/reduceFields.d.ts.map +1 -1
  18. package/dist/components/FieldsToExport/reduceFields.js +4 -0
  19. package/dist/components/FieldsToExport/reduceFields.js.map +1 -1
  20. package/dist/components/FormatField/index.d.ts +3 -2
  21. package/dist/components/FormatField/index.d.ts.map +1 -1
  22. package/dist/components/FormatField/index.js +6 -3
  23. package/dist/components/FormatField/index.js.map +1 -1
  24. package/dist/components/ImportListMenuItem/index.d.ts.map +1 -1
  25. package/dist/components/ImportListMenuItem/index.js +14 -12
  26. package/dist/components/ImportListMenuItem/index.js.map +1 -1
  27. package/dist/components/ImportPreview/index.css +45 -0
  28. package/dist/components/ImportPreview/index.d.ts +1 -1
  29. package/dist/components/ImportPreview/index.d.ts.map +1 -1
  30. package/dist/components/ImportPreview/index.js +44 -11
  31. package/dist/components/ImportPreview/index.js.map +1 -1
  32. package/dist/components/LimitField/index.d.ts +3 -2
  33. package/dist/components/LimitField/index.d.ts.map +1 -1
  34. package/dist/components/LimitField/index.js.map +1 -1
  35. package/dist/components/LocaleField/index.d.ts +3 -2
  36. package/dist/components/LocaleField/index.d.ts.map +1 -1
  37. package/dist/components/LocaleField/index.js.map +1 -1
  38. package/dist/components/Page/index.d.ts +4 -3
  39. package/dist/components/Page/index.d.ts.map +1 -1
  40. package/dist/components/Page/index.js +1 -1
  41. package/dist/components/Page/index.js.map +1 -1
  42. package/dist/components/RelationshipCell/getRelationshipGroupKey.d.ts +7 -0
  43. package/dist/components/RelationshipCell/getRelationshipGroupKey.d.ts.map +1 -0
  44. package/dist/components/RelationshipCell/getRelationshipGroupKey.js +3 -0
  45. package/dist/components/RelationshipCell/getRelationshipGroupKey.js.map +1 -0
  46. package/dist/components/RelationshipCell/getRelationshipGroups.d.ts +43 -0
  47. package/dist/components/RelationshipCell/getRelationshipGroups.d.ts.map +1 -0
  48. package/dist/components/RelationshipCell/getRelationshipGroups.js +109 -0
  49. package/dist/components/RelationshipCell/getRelationshipGroups.js.map +1 -0
  50. package/dist/components/RelationshipCell/index.css +30 -0
  51. package/dist/components/RelationshipCell/index.d.ts +15 -0
  52. package/dist/components/RelationshipCell/index.d.ts.map +1 -0
  53. package/dist/components/RelationshipCell/index.js +57 -0
  54. package/dist/components/RelationshipCell/index.js.map +1 -0
  55. package/dist/components/SortBy/index.css +9 -0
  56. package/dist/components/SortBy/index.d.ts +4 -3
  57. package/dist/components/SortBy/index.d.ts.map +1 -1
  58. package/dist/components/SortBy/index.js +1 -2
  59. package/dist/components/SortBy/index.js.map +1 -1
  60. package/dist/components/SortOrder/index.css +9 -0
  61. package/dist/components/SortOrder/index.d.ts +4 -3
  62. package/dist/components/SortOrder/index.d.ts.map +1 -1
  63. package/dist/components/SortOrder/index.js +1 -2
  64. package/dist/components/SortOrder/index.js.map +1 -1
  65. package/dist/export/batchProcessor.d.ts +4 -3
  66. package/dist/export/batchProcessor.d.ts.map +1 -1
  67. package/dist/export/batchProcessor.js +6 -2
  68. package/dist/export/batchProcessor.js.map +1 -1
  69. package/dist/export/createExport.d.ts +4 -2
  70. package/dist/export/createExport.d.ts.map +1 -1
  71. package/dist/export/createExport.js +7 -2
  72. package/dist/export/createExport.js.map +1 -1
  73. package/dist/export/getCreateExportCollectionTask.d.ts.map +1 -1
  74. package/dist/export/getCreateExportCollectionTask.js +11 -0
  75. package/dist/export/getCreateExportCollectionTask.js.map +1 -1
  76. package/dist/export/getExportCollection.d.ts.map +1 -1
  77. package/dist/export/getExportCollection.js +9 -4
  78. package/dist/export/getExportCollection.js.map +1 -1
  79. package/dist/export/getFields.d.ts.map +1 -1
  80. package/dist/export/handleDownload.d.ts.map +1 -1
  81. package/dist/export/handleDownload.js +7 -3
  82. package/dist/export/handleDownload.js.map +1 -1
  83. package/dist/export/handlePreview.d.ts.map +1 -1
  84. package/dist/export/handlePreview.js +24 -5
  85. package/dist/export/handlePreview.js.map +1 -1
  86. package/dist/exports/types.d.ts +1 -1
  87. package/dist/exports/types.d.ts.map +1 -1
  88. package/dist/exports/types.js.map +1 -1
  89. package/dist/import/batchProcessor.d.ts +4 -3
  90. package/dist/import/batchProcessor.d.ts.map +1 -1
  91. package/dist/import/batchProcessor.js +15 -8
  92. package/dist/import/batchProcessor.js.map +1 -1
  93. package/dist/import/createImport.d.ts +3 -2
  94. package/dist/import/createImport.d.ts.map +1 -1
  95. package/dist/import/createImport.js +8 -1
  96. package/dist/import/createImport.js.map +1 -1
  97. package/dist/import/getCreateImportCollectionTask.d.ts.map +1 -1
  98. package/dist/import/getCreateImportCollectionTask.js +5 -2
  99. package/dist/import/getCreateImportCollectionTask.js.map +1 -1
  100. package/dist/import/getFields.d.ts.map +1 -1
  101. package/dist/import/getImportCollection.d.ts.map +1 -1
  102. package/dist/import/getImportCollection.js +6 -4
  103. package/dist/import/getImportCollection.js.map +1 -1
  104. package/dist/import/handlePreview.d.ts.map +1 -1
  105. package/dist/import/handlePreview.js +5 -1
  106. package/dist/import/handlePreview.js.map +1 -1
  107. package/dist/index.d.ts +1 -2
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +6 -3
  110. package/dist/index.js.map +1 -1
  111. package/dist/translations/languages/en.d.ts.map +1 -1
  112. package/dist/types.d.ts +17 -1
  113. package/dist/types.d.ts.map +1 -1
  114. package/dist/types.js.map +1 -1
  115. package/dist/utilities/applyFieldHooks.d.ts.map +1 -1
  116. package/dist/utilities/applyFieldHooks.js +1 -1
  117. package/dist/utilities/applyFieldHooks.js.map +1 -1
  118. package/dist/utilities/buildDisabledFieldRegex.d.ts.map +1 -1
  119. package/dist/utilities/collectDisabledFieldPaths.d.ts.map +1 -1
  120. package/dist/utilities/fieldToRegex.d.ts.map +1 -1
  121. package/dist/utilities/flattenObject.d.ts.map +1 -1
  122. package/dist/utilities/flattenedFields.d.ts.map +1 -1
  123. package/dist/utilities/flattenedFields.js +3 -0
  124. package/dist/utilities/flattenedFields.js.map +1 -1
  125. package/dist/utilities/getExportFieldFunctions.d.ts.map +1 -1
  126. package/dist/utilities/getExportFieldFunctions.js +64 -27
  127. package/dist/utilities/getExportFieldFunctions.js.map +1 -1
  128. package/dist/utilities/getFileFromDoc.d.ts.map +1 -1
  129. package/dist/utilities/getFileFromDoc.js +3 -3
  130. package/dist/utilities/getFileFromDoc.js.map +1 -1
  131. package/dist/utilities/getFlattenedFieldKeys.d.ts.map +1 -1
  132. package/dist/utilities/getImportFieldFunctions.d.ts.map +1 -1
  133. package/dist/utilities/getPluginCollections.d.ts.map +1 -1
  134. package/dist/utilities/getSchemaColumns.d.ts.map +1 -1
  135. package/dist/utilities/getSelect.d.ts.map +1 -1
  136. package/dist/utilities/getSelect.js +11 -3
  137. package/dist/utilities/getSelect.js.map +1 -1
  138. package/dist/utilities/getSubmittedFormValues.d.ts +12 -0
  139. package/dist/utilities/getSubmittedFormValues.d.ts.map +1 -0
  140. package/dist/utilities/getSubmittedFormValues.js +24 -0
  141. package/dist/utilities/getSubmittedFormValues.js.map +1 -0
  142. package/dist/utilities/isPlainObject.d.ts.map +1 -1
  143. package/dist/utilities/parseCSV.d.ts.map +1 -1
  144. package/dist/utilities/parseJSON.d.ts.map +1 -1
  145. package/dist/utilities/polymorphicRel.d.ts.map +1 -1
  146. package/dist/utilities/processRichTextField.d.ts.map +1 -1
  147. package/dist/utilities/removeDisabledFields.d.ts.map +1 -1
  148. package/dist/utilities/setNestedValue.d.ts +2 -1
  149. package/dist/utilities/setNestedValue.d.ts.map +1 -1
  150. package/dist/utilities/setNestedValue.js +65 -34
  151. package/dist/utilities/setNestedValue.js.map +1 -1
  152. package/dist/utilities/sortHelpers.d.ts +1 -1
  153. package/dist/utilities/sortHelpers.d.ts.map +1 -1
  154. package/dist/utilities/unflattenObject.d.ts.map +1 -1
  155. package/dist/utilities/unflattenPostProcess.d.ts.map +1 -1
  156. package/dist/utilities/validateLimitValue.d.ts.map +1 -1
  157. package/license.md +1 -1
  158. package/package.json +9 -9
  159. package/dist/@types/assets.d.js +0 -2
  160. package/dist/@types/assets.d.js.map +0 -1
  161. package/dist/components/ExportPreview/index.scss +0 -48
  162. package/dist/components/FieldsToExport/index.scss +0 -0
  163. package/dist/components/FieldsToExport/reduceFields.spec.js +0 -239
  164. package/dist/components/FieldsToExport/reduceFields.spec.js.map +0 -1
  165. package/dist/components/ImportPreview/index.scss +0 -41
  166. package/dist/components/SortBy/index.scss +0 -3
  167. package/dist/components/SortOrder/index.scss +0 -3
  168. package/dist/utilities/applyFieldHooks.spec.js +0 -205
  169. package/dist/utilities/applyFieldHooks.spec.js.map +0 -1
  170. package/dist/utilities/buildDisabledFieldRegex.spec.js +0 -64
  171. package/dist/utilities/buildDisabledFieldRegex.spec.js.map +0 -1
  172. package/dist/utilities/fieldToRegex.spec.js +0 -151
  173. package/dist/utilities/fieldToRegex.spec.js.map +0 -1
  174. package/dist/utilities/filterToSelectedFields.spec.js +0 -204
  175. package/dist/utilities/filterToSelectedFields.spec.js.map +0 -1
  176. package/dist/utilities/flattenObject.spec.js +0 -158
  177. package/dist/utilities/flattenObject.spec.js.map +0 -1
  178. package/dist/utilities/getExportFieldFunctions.spec.js +0 -50
  179. package/dist/utilities/getExportFieldFunctions.spec.js.map +0 -1
  180. package/dist/utilities/getImportFieldFunctions.spec.js +0 -167
  181. package/dist/utilities/getImportFieldFunctions.spec.js.map +0 -1
  182. package/dist/utilities/getSchemaColumns.spec.js +0 -157
  183. package/dist/utilities/getSchemaColumns.spec.js.map +0 -1
  184. package/dist/utilities/parseCSV.spec.js +0 -195
  185. package/dist/utilities/parseCSV.spec.js.map +0 -1
  186. package/dist/utilities/processRichTextField.spec.js +0 -308
  187. package/dist/utilities/processRichTextField.spec.js.map +0 -1
  188. package/dist/utilities/siblingDoc.spec.js +0 -278
  189. package/dist/utilities/siblingDoc.spec.js.map +0 -1
  190. package/dist/utilities/unflattenObject.spec.js +0 -819
  191. package/dist/utilities/unflattenObject.spec.js.map +0 -1
  192. /package/dist/components/Page/{index.scss → index.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/import/getCreateImportCollectionTask.ts"],"sourcesContent":["import type { Config, TaskConfig } from 'payload'\n\nimport { FileRetrievalError } from 'payload'\n\nimport { getFileFromDoc } from '../utilities/getFileFromDoc.js'\nimport { createImport } from './createImport.js'\n\nexport type ImportTaskInput = {\n batchSize?: number\n debug?: boolean\n defaultVersionStatus?: 'draft' | 'published'\n importCollection: string\n importId: string\n maxLimit?: number\n userCollection?: string\n userID?: number | string\n}\n\nexport const getCreateCollectionImportTask = (\n _config: Config,\n): TaskConfig<{\n input: ImportTaskInput\n output: object\n}> => {\n return {\n slug: 'createCollectionImport',\n handler: async ({ input, req }) => {\n const {\n batchSize,\n debug,\n defaultVersionStatus,\n importCollection,\n importId,\n maxLimit,\n userCollection,\n userID,\n } = input\n\n // Fetch the import document to get all necessary data\n const importDoc = await req.payload.findByID({\n id: importId,\n collection: importCollection,\n })\n\n if (!importDoc) {\n throw new Error(`Import document not found: ${importId}`)\n }\n\n // Get the collection config for the imports collection\n const collectionConfig = req.payload.config.collections.find(\n (c) => c.slug === importCollection,\n )\n\n if (!collectionConfig) {\n throw new Error(`Collection config not found for: ${importCollection}`)\n }\n\n // Retrieve the file using getFileFromDoc (handles both local and cloud storage)\n const file = await getFileFromDoc({\n collectionConfig,\n doc: {\n filename: importDoc.filename as string,\n mimeType: importDoc.mimeType as string | undefined,\n url: importDoc.url as string | undefined,\n },\n req,\n })\n\n const fileMimetype = file.mimetype || (importDoc.mimeType as string)\n\n if (!fileMimetype) {\n throw new FileRetrievalError(\n req.t,\n `Unable to determine mimetype for file: ${importDoc.filename}`,\n )\n }\n\n const result = await createImport({\n name: (importDoc.filename as string) || 'import',\n batchSize,\n collectionSlug: importDoc.collectionSlug as string,\n debug,\n defaultVersionStatus,\n file: {\n name: importDoc.filename as string,\n data: file.data,\n mimetype: fileMimetype,\n },\n format: fileMimetype === 'text/csv' ? 'csv' : 'json',\n importMode: (importDoc.importMode as 'create' | 'update' | 'upsert') || 'create',\n matchField: importDoc.matchField as string | undefined,\n maxLimit,\n req,\n userCollection,\n userID,\n })\n\n // Update the import document with results\n await req.payload.update({\n id: importId,\n collection: importCollection,\n data: {\n status:\n result.errors.length === 0\n ? 'completed'\n : result.imported + result.updated === 0\n ? 'failed'\n : 'partial',\n summary: {\n imported: result.imported,\n issueDetails:\n result.errors.length > 0\n ? result.errors.map((e) => ({\n data: e.doc,\n error: e.error,\n row: e.index + 1,\n }))\n : undefined,\n issues: result.errors.length,\n total: result.total,\n updated: result.updated,\n },\n },\n })\n\n return {\n output: result,\n }\n },\n inputSchema: [\n {\n name: 'importId',\n type: 'text',\n required: true,\n },\n {\n name: 'importCollection',\n type: 'text',\n required: true,\n },\n {\n name: 'userID',\n type: 'text',\n },\n {\n name: 'userCollection',\n type: 'text',\n },\n {\n name: 'batchSize',\n type: 'number',\n },\n {\n name: 'debug',\n type: 'checkbox',\n },\n {\n name: 'defaultVersionStatus',\n type: 'select',\n options: ['draft', 'published'],\n },\n {\n name: 'maxLimit',\n type: 'number',\n },\n ],\n }\n}\n"],"names":["FileRetrievalError","getFileFromDoc","createImport","getCreateCollectionImportTask","_config","slug","handler","input","req","batchSize","debug","defaultVersionStatus","importCollection","importId","maxLimit","userCollection","userID","importDoc","payload","findByID","id","collection","Error","collectionConfig","config","collections","find","c","file","doc","filename","mimeType","url","fileMimetype","mimetype","t","result","name","collectionSlug","data","format","importMode","matchField","update","status","errors","length","imported","updated","summary","issueDetails","map","e","error","row","index","undefined","issues","total","output","inputSchema","type","required","options"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/import/getCreateImportCollectionTask.ts"],"sourcesContent":["import type { Config, TaskConfig } from 'payload'\n\nimport { FileRetrievalError } from 'payload'\n\nimport { getFileFromDoc } from '../utilities/getFileFromDoc.js'\nimport { createImport } from './createImport.js'\n\nexport type ImportTaskInput = {\n batchSize?: number\n debug?: boolean\n defaultVersionStatus?: 'draft' | 'published'\n importCollection: string\n importId: string\n maxLimit?: number\n userCollection?: string\n userID?: number | string\n}\n\nexport const getCreateCollectionImportTask = (\n _config: Config,\n): TaskConfig<{\n input: ImportTaskInput\n output: object\n}> => {\n return {\n slug: 'createCollectionImport',\n handler: async ({ input, req }) => {\n const {\n batchSize,\n debug,\n defaultVersionStatus,\n importCollection,\n importId,\n maxLimit,\n userCollection,\n userID,\n } = input\n\n // Fetch the import document to get all necessary data\n const importDoc = await req.payload.findByID({\n id: importId,\n collection: importCollection,\n overrideAccess: true,\n })\n\n if (!importDoc) {\n throw new Error(`Import document not found: ${importId}`)\n }\n\n // Get the collection config for the imports collection\n const collectionConfig = req.payload.config.collections.find(\n (c) => c.slug === importCollection,\n )\n\n if (!collectionConfig) {\n throw new Error(`Collection config not found for: ${importCollection}`)\n }\n\n // Retrieve the file using getFileFromDoc (handles both local and cloud storage)\n const file = await getFileFromDoc({\n collectionConfig,\n doc: {\n filename: importDoc.filename as string,\n mimeType: importDoc.mimeType as string | undefined,\n url: importDoc.url as string | undefined,\n },\n req,\n })\n\n const fileMimetype = file.mimetype || (importDoc.mimeType as string)\n\n if (!fileMimetype) {\n throw new FileRetrievalError(\n req.t,\n `Unable to determine mimetype for file: ${importDoc.filename}`,\n )\n }\n\n const result = await createImport({\n name: (importDoc.filename as string) || 'import',\n batchSize,\n collectionSlug: importDoc.collectionSlug as string,\n debug,\n defaultVersionStatus,\n file: {\n name: importDoc.filename as string,\n data: file.data,\n mimetype: fileMimetype,\n },\n format: fileMimetype === 'text/csv' ? 'csv' : 'json',\n importDoc,\n importMode: (importDoc.importMode as 'create' | 'update' | 'upsert') || 'create',\n matchField: importDoc.matchField as string | undefined,\n maxLimit,\n req,\n userCollection,\n userID,\n })\n\n // Update the import document with results\n await req.payload.update({\n id: importId,\n collection: importCollection,\n data: {\n status:\n result.errors.length === 0\n ? 'completed'\n : result.imported + result.updated === 0\n ? 'failed'\n : 'partial',\n summary: {\n imported: result.imported,\n issueDetails:\n result.errors.length > 0\n ? result.errors.map((e) => ({\n data: e.doc,\n error: e.error,\n row: e.index + 1,\n }))\n : undefined,\n issues: result.errors.length,\n total: result.total,\n updated: result.updated,\n },\n },\n overrideAccess: true,\n })\n\n return {\n output: result,\n }\n },\n inputSchema: [\n {\n name: 'importId',\n type: 'text',\n required: true,\n },\n {\n name: 'importCollection',\n type: 'text',\n required: true,\n },\n {\n name: 'userID',\n type: 'text',\n },\n {\n name: 'userCollection',\n type: 'text',\n },\n {\n name: 'batchSize',\n type: 'number',\n },\n {\n name: 'debug',\n type: 'checkbox',\n },\n {\n name: 'defaultVersionStatus',\n type: 'select',\n options: ['draft', 'published'],\n },\n {\n name: 'maxLimit',\n type: 'number',\n },\n ],\n }\n}\n"],"names":["FileRetrievalError","getFileFromDoc","createImport","getCreateCollectionImportTask","_config","slug","handler","input","req","batchSize","debug","defaultVersionStatus","importCollection","importId","maxLimit","userCollection","userID","importDoc","payload","findByID","id","collection","overrideAccess","Error","collectionConfig","config","collections","find","c","file","doc","filename","mimeType","url","fileMimetype","mimetype","t","result","name","collectionSlug","data","format","importMode","matchField","update","status","errors","length","imported","updated","summary","issueDetails","map","e","error","row","index","undefined","issues","total","output","inputSchema","type","required","options"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../src/import/getFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAkB,MAAM,SAAS,CAAA;AAEpD,KAAK,gBAAgB,GAAG;IACtB;;;OAGG;IACH,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,SAAS,gBAAgB,KAAG,KAAK,EA0J1D,CAAA"}
1
+ {"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../src/import/getFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAkB,MAAM,SAAS,CAAA;AAEpD,KAAK,gBAAgB,GAAG;IACtB;;;OAGG;IACH,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,SAAS,YAAa,gBAAgB,KAAG,KAAK,EA0J1D,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getImportCollection.d.ts","sourceRoot":"","sources":["../../src/import/getImportCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAI1E,OAAO,KAAK,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAYzE,eAAO,MAAM,mBAAmB,GAAI,kDAIjC;IACD;;OAEG;IACH,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,YAAY,EAAE,wBAAwB,CAAA;CACvC,KAAG,gBAoVH,CAAA"}
1
+ {"version":3,"file":"getImportCollection.d.ts","sourceRoot":"","sources":["../../src/import/getImportCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAI1E,OAAO,KAAK,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAYzE,eAAO,MAAM,mBAAmB,qDAI7B;IACD;;OAEG;IACH,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,YAAY,EAAE,wBAAwB,CAAA;CACvC,KAAG,gBAsVH,CAAA"}
@@ -117,12 +117,13 @@ export const getImportCollection = ({ collectionSlugs, importConfig, pluginConfi
117
117
  mimetype: fileMimetype
118
118
  },
119
119
  format: fileMimetype === 'text/csv' ? 'csv' : 'json',
120
+ importDoc: doc,
120
121
  importMode: doc.importMode || 'create',
121
122
  matchField: doc.matchField,
122
123
  maxLimit,
123
124
  req,
124
- userCollection: req?.user?.collection || req?.user?.user?.collection,
125
- userID: req?.user?.id || req?.user?.user?.id
125
+ userCollection: req?.user?.collection,
126
+ userID: req?.user?.id
126
127
  });
127
128
  // Determine status
128
129
  let status;
@@ -283,11 +284,12 @@ export const getImportCollection = ({ collectionSlugs, importConfig, pluginConfi
283
284
  importCollection: collectionConfig.slug,
284
285
  importId: doc.id,
285
286
  maxLimit,
286
- userCollection: req.user?.collection || req?.user?.user?.collection,
287
- userID: req?.user?.id || req?.user?.user?.id
287
+ userCollection: req.user?.collection,
288
+ userID: req?.user?.id
288
289
  };
289
290
  await req.payload.jobs.queue({
290
291
  input,
292
+ overrideAccess: true,
291
293
  task: 'createCollectionImport'
292
294
  });
293
295
  } catch (err) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/import/getImportCollection.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, CollectionConfig } from 'payload'\n\nimport { FileRetrievalError } from 'payload'\n\nimport type { ImportConfig, ImportExportPluginConfig } from '../types.js'\nimport type { ImportTaskInput } from './getCreateImportCollectionTask.js'\n\nimport { getFileFromDoc } from '../utilities/getFileFromDoc.js'\nimport { resolveLimit } from '../utilities/resolveLimit.js'\nimport { createImport } from './createImport.js'\nimport { getFields } from './getFields.js'\nimport { handlePreview } from './handlePreview.js'\n\nconst FALLBACK_BATCH_SIZE = 100\nconst FALLBACK_VERSION_STATUS = 'published'\n\nexport const getImportCollection = ({\n collectionSlugs,\n importConfig,\n pluginConfig,\n}: {\n /**\n * Collection slugs that this import collection supports.\n */\n collectionSlugs: string[]\n importConfig?: ImportConfig\n pluginConfig: ImportExportPluginConfig\n}): CollectionConfig => {\n const afterChange: CollectionAfterChangeHook[] = []\n\n const collection: CollectionConfig = {\n slug: 'imports',\n access: {\n update: () => false,\n },\n admin: {\n components: {\n edit: {\n SaveButton: '@payloadcms/plugin-import-export/rsc#ImportSaveButton',\n },\n },\n custom: {\n 'plugin-import-export': {\n collectionSlugs,\n },\n },\n disableCopyToLocale: true,\n group: false,\n useAsTitle: 'filename',\n },\n disableDuplicate: true,\n endpoints: [\n {\n handler: handlePreview,\n method: 'post',\n path: '/preview-data',\n },\n ],\n fields: getFields({ collectionSlugs }),\n hooks: {\n afterChange,\n },\n lockDocuments: false,\n upload: {\n filesRequiredOnCreate: true,\n hideFileInputOnCreate: false,\n hideRemoveFile: true,\n mimeTypes: ['text/csv', 'application/json'],\n },\n }\n\n afterChange.push(async ({ collection: collectionConfig, doc, operation, req }) => {\n if (operation !== 'create' || doc.status !== 'pending') {\n return doc\n }\n\n const targetCollection = req.payload.collections[doc.collectionSlug]\n const targetPluginConfig = targetCollection?.config.custom?.['plugin-import-export']\n\n const disableJobsQueue =\n targetPluginConfig?.importDisableJobsQueue ?? importConfig?.disableJobsQueue ?? false\n\n const debug = pluginConfig.debug || false\n\n if (debug) {\n req.payload.logger.info({\n collectionSlug: doc.collectionSlug,\n disableJobsQueue,\n docId: doc.id,\n msg: '[Import Sync Hook] Starting',\n transactionID: req.transactionID,\n })\n }\n\n if (!disableJobsQueue) {\n return doc\n }\n\n try {\n // Get file data from the uploaded document\n // First try req.file which is available during the same request (especially important for cloud storage)\n // Fall back to getFileFromDoc for cases where req.file isn't available\n let fileData: Buffer\n let fileMimetype: string\n\n if (req.file?.data) {\n fileData = req.file.data\n fileMimetype = req.file.mimetype || doc.mimeType\n\n if (!fileMimetype) {\n throw new FileRetrievalError(\n req.t,\n `Unable to determine mimetype for file: ${doc.filename}`,\n )\n }\n } else {\n const fileFromDoc = await getFileFromDoc({\n collectionConfig,\n doc: {\n filename: doc.filename,\n mimeType: doc.mimeType,\n url: doc.url,\n },\n req,\n })\n fileData = fileFromDoc.data\n fileMimetype = fileFromDoc.mimetype\n }\n\n const maxLimit = await resolveLimit({\n limit: targetPluginConfig?.importLimit,\n req,\n })\n const defaultVersionStatus =\n targetPluginConfig?.defaultVersionStatus ??\n importConfig?.defaultVersionStatus ??\n pluginConfig.defaultVersionStatus ??\n FALLBACK_VERSION_STATUS\n const batchSize =\n targetPluginConfig?.importBatchSize ??\n importConfig?.batchSize ??\n pluginConfig.batchSize ??\n FALLBACK_BATCH_SIZE\n\n const result = await createImport({\n id: doc.id,\n name: doc.filename || 'import',\n batchSize,\n collectionSlug: doc.collectionSlug,\n debug,\n defaultVersionStatus,\n file: {\n name: doc.filename,\n data: fileData,\n mimetype: fileMimetype,\n },\n format: fileMimetype === 'text/csv' ? 'csv' : 'json',\n importMode: doc.importMode || 'create',\n matchField: doc.matchField,\n maxLimit,\n req,\n userCollection: req?.user?.collection || req?.user?.user?.collection,\n userID: req?.user?.id || req?.user?.user?.id,\n })\n\n // Determine status\n let status: 'completed' | 'failed' | 'partial'\n if (result.errors.length === 0) {\n status = 'completed'\n } else if (result.imported + result.updated === 0) {\n status = 'failed'\n } else {\n status = 'partial'\n }\n\n const summary = {\n imported: result.imported,\n issueDetails:\n result.errors.length > 0\n ? result.errors.map((e) => ({\n data: e.doc,\n error: e.error,\n row: e.index + 1,\n }))\n : undefined,\n issues: result.errors.length,\n total: result.total,\n updated: result.updated,\n }\n\n // Try to update the document with results\n try {\n await req.payload.update({\n id: doc.id,\n collection: collectionConfig.slug,\n data: {\n status,\n summary,\n },\n overrideAccess: true,\n req,\n })\n } catch (updateErr) {\n // Update may fail if document not yet committed\n if (debug) {\n req.payload.logger.error({\n err: updateErr,\n msg: `Failed to update import document ${doc.id} with results`,\n })\n }\n }\n\n // Return updated doc for immediate response\n return {\n ...doc,\n status,\n summary,\n }\n } catch (err) {\n const summary = {\n imported: 0,\n issueDetails: [\n {\n data: {},\n error: err instanceof Error ? err.message : String(err),\n row: 0,\n },\n ],\n issues: 1,\n total: 0,\n updated: 0,\n }\n\n if (debug) {\n req.payload.logger.error({\n docId: doc.id,\n err,\n msg: '[Import Sync Hook] Import processing failed, attempting to update status',\n transactionID: req.transactionID,\n })\n }\n\n // Try to update document with error status\n try {\n if (debug) {\n req.payload.logger.info({\n collectionSlug: collectionConfig.slug,\n docId: doc.id,\n msg: '[Import Sync Hook] About to update document with failed status',\n })\n }\n await req.payload.update({\n id: doc.id,\n collection: collectionConfig.slug,\n data: {\n status: 'failed',\n summary,\n },\n overrideAccess: true,\n req,\n })\n if (debug) {\n req.payload.logger.info({\n docId: doc.id,\n msg: '[Import Sync Hook] Successfully updated document with failed status',\n })\n }\n } catch (updateErr) {\n // Update may fail if document not yet committed, log but continue\n // ALWAYS log this error to help debug Postgres issues\n req.payload.logger.error({\n err: updateErr,\n msg: `[Import Sync Hook] Failed to update import document ${doc.id} with error status`,\n transactionID: req.transactionID,\n })\n }\n\n if (debug) {\n req.payload.logger.info({\n docId: doc.id,\n msg: '[Import Sync Hook] Returning failed doc',\n status: 'failed',\n })\n }\n\n // Return error status for immediate response\n return {\n ...doc,\n status: 'failed',\n summary,\n }\n }\n })\n\n afterChange.push(async ({ collection: collectionConfig, doc, operation, req }) => {\n if (operation !== 'create') {\n return\n }\n\n const targetCollection = req.payload.collections[doc.collectionSlug]\n const targetPluginConfig = targetCollection?.config.custom?.['plugin-import-export']\n\n const disableJobsQueue =\n targetPluginConfig?.importDisableJobsQueue ?? importConfig?.disableJobsQueue ?? false\n\n if (pluginConfig.debug) {\n req.payload.logger.info({\n collectionSlug: doc.collectionSlug,\n disableJobsQueue,\n docId: doc.id,\n docStatus: doc.status,\n msg: '[Import Job Hook] Checking if should queue job',\n transactionID: req.transactionID,\n })\n }\n\n if (disableJobsQueue) {\n if (pluginConfig.debug) {\n req.payload.logger.info({\n docId: doc.id,\n msg: '[Import Job Hook] Skipping job queue (sync mode)',\n })\n }\n return\n }\n\n try {\n // Resolve maxLimit ahead of time since it may involve async config resolution\n const maxLimit = await resolveLimit({\n limit: targetPluginConfig?.importLimit,\n req,\n })\n const defaultVersionStatus =\n targetPluginConfig?.defaultVersionStatus ??\n importConfig?.defaultVersionStatus ??\n pluginConfig.defaultVersionStatus ??\n FALLBACK_VERSION_STATUS\n const batchSize =\n targetPluginConfig?.importBatchSize ??\n importConfig?.batchSize ??\n pluginConfig.batchSize ??\n FALLBACK_BATCH_SIZE\n\n const input: ImportTaskInput = {\n batchSize,\n debug: pluginConfig.debug,\n defaultVersionStatus,\n importCollection: collectionConfig.slug,\n importId: doc.id,\n maxLimit,\n userCollection: req.user?.collection || req?.user?.user?.collection,\n userID: req?.user?.id || req?.user?.user?.id,\n }\n\n await req.payload.jobs.queue({\n input,\n task: 'createCollectionImport',\n })\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Failed to queue import job for document ${doc.id}`,\n })\n }\n })\n\n return collection\n}\n"],"names":["FileRetrievalError","getFileFromDoc","resolveLimit","createImport","getFields","handlePreview","FALLBACK_BATCH_SIZE","FALLBACK_VERSION_STATUS","getImportCollection","collectionSlugs","importConfig","pluginConfig","afterChange","collection","slug","access","update","admin","components","edit","SaveButton","custom","disableCopyToLocale","group","useAsTitle","disableDuplicate","endpoints","handler","method","path","fields","hooks","lockDocuments","upload","filesRequiredOnCreate","hideFileInputOnCreate","hideRemoveFile","mimeTypes","push","collectionConfig","doc","operation","req","status","targetCollection","payload","collections","collectionSlug","targetPluginConfig","config","disableJobsQueue","importDisableJobsQueue","debug","logger","info","docId","id","msg","transactionID","fileData","fileMimetype","file","data","mimetype","mimeType","t","filename","fileFromDoc","url","maxLimit","limit","importLimit","defaultVersionStatus","batchSize","importBatchSize","result","name","format","importMode","matchField","userCollection","user","userID","errors","length","imported","updated","summary","issueDetails","map","e","error","row","index","undefined","issues","total","overrideAccess","updateErr","err","Error","message","String","docStatus","input","importCollection","importId","jobs","queue","task"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/import/getImportCollection.ts"],"sourcesContent":["import type { CollectionAfterChangeHook, CollectionConfig } from 'payload'\n\nimport { FileRetrievalError } from 'payload'\n\nimport type { ImportConfig, ImportExportPluginConfig } from '../types.js'\nimport type { ImportTaskInput } from './getCreateImportCollectionTask.js'\n\nimport { getFileFromDoc } from '../utilities/getFileFromDoc.js'\nimport { resolveLimit } from '../utilities/resolveLimit.js'\nimport { createImport } from './createImport.js'\nimport { getFields } from './getFields.js'\nimport { handlePreview } from './handlePreview.js'\n\nconst FALLBACK_BATCH_SIZE = 100\nconst FALLBACK_VERSION_STATUS = 'published'\n\nexport const getImportCollection = ({\n collectionSlugs,\n importConfig,\n pluginConfig,\n}: {\n /**\n * Collection slugs that this import collection supports.\n */\n collectionSlugs: string[]\n importConfig?: ImportConfig\n pluginConfig: ImportExportPluginConfig\n}): CollectionConfig => {\n const afterChange: CollectionAfterChangeHook[] = []\n\n const collection: CollectionConfig = {\n slug: 'imports',\n access: {\n update: () => false,\n },\n admin: {\n components: {\n edit: {\n SaveButton: '@payloadcms/plugin-import-export/rsc#ImportSaveButton',\n },\n },\n custom: {\n 'plugin-import-export': {\n collectionSlugs,\n },\n },\n disableCopyToLocale: true,\n group: false,\n useAsTitle: 'filename',\n },\n disableDuplicate: true,\n endpoints: [\n {\n handler: handlePreview,\n method: 'post',\n path: '/preview-data',\n },\n ],\n fields: getFields({ collectionSlugs }),\n hooks: {\n afterChange,\n },\n lockDocuments: false,\n upload: {\n filesRequiredOnCreate: true,\n hideFileInputOnCreate: false,\n hideRemoveFile: true,\n mimeTypes: ['text/csv', 'application/json'],\n },\n }\n\n afterChange.push(async ({ collection: collectionConfig, doc, operation, req }) => {\n if (operation !== 'create' || doc.status !== 'pending') {\n return doc\n }\n\n const targetCollection = req.payload.collections[doc.collectionSlug]\n const targetPluginConfig = targetCollection?.config.custom?.['plugin-import-export']\n\n const disableJobsQueue =\n targetPluginConfig?.importDisableJobsQueue ?? importConfig?.disableJobsQueue ?? false\n\n const debug = pluginConfig.debug || false\n\n if (debug) {\n req.payload.logger.info({\n collectionSlug: doc.collectionSlug,\n disableJobsQueue,\n docId: doc.id,\n msg: '[Import Sync Hook] Starting',\n transactionID: req.transactionID,\n })\n }\n\n if (!disableJobsQueue) {\n return doc\n }\n\n try {\n // Get file data from the uploaded document\n // First try req.file which is available during the same request (especially important for cloud storage)\n // Fall back to getFileFromDoc for cases where req.file isn't available\n let fileData: Buffer\n let fileMimetype: string\n\n if (req.file?.data) {\n fileData = req.file.data\n fileMimetype = req.file.mimetype || doc.mimeType\n\n if (!fileMimetype) {\n throw new FileRetrievalError(\n req.t,\n `Unable to determine mimetype for file: ${doc.filename}`,\n )\n }\n } else {\n const fileFromDoc = await getFileFromDoc({\n collectionConfig,\n doc: {\n filename: doc.filename,\n mimeType: doc.mimeType,\n url: doc.url,\n },\n req,\n })\n fileData = fileFromDoc.data\n fileMimetype = fileFromDoc.mimetype\n }\n\n const maxLimit = await resolveLimit({\n limit: targetPluginConfig?.importLimit,\n req,\n })\n const defaultVersionStatus =\n targetPluginConfig?.defaultVersionStatus ??\n importConfig?.defaultVersionStatus ??\n pluginConfig.defaultVersionStatus ??\n FALLBACK_VERSION_STATUS\n const batchSize =\n targetPluginConfig?.importBatchSize ??\n importConfig?.batchSize ??\n pluginConfig.batchSize ??\n FALLBACK_BATCH_SIZE\n\n const result = await createImport({\n id: doc.id,\n name: doc.filename || 'import',\n batchSize,\n collectionSlug: doc.collectionSlug,\n debug,\n defaultVersionStatus,\n file: {\n name: doc.filename,\n data: fileData,\n mimetype: fileMimetype,\n },\n format: fileMimetype === 'text/csv' ? 'csv' : 'json',\n importDoc: doc,\n importMode: doc.importMode || 'create',\n matchField: doc.matchField,\n maxLimit,\n req,\n userCollection: req?.user?.collection,\n userID: req?.user?.id,\n })\n\n // Determine status\n let status: 'completed' | 'failed' | 'partial'\n if (result.errors.length === 0) {\n status = 'completed'\n } else if (result.imported + result.updated === 0) {\n status = 'failed'\n } else {\n status = 'partial'\n }\n\n const summary = {\n imported: result.imported,\n issueDetails:\n result.errors.length > 0\n ? result.errors.map((e) => ({\n data: e.doc,\n error: e.error,\n row: e.index + 1,\n }))\n : undefined,\n issues: result.errors.length,\n total: result.total,\n updated: result.updated,\n }\n\n // Try to update the document with results\n try {\n await req.payload.update({\n id: doc.id,\n collection: collectionConfig.slug,\n data: {\n status,\n summary,\n },\n overrideAccess: true,\n req,\n })\n } catch (updateErr) {\n // Update may fail if document not yet committed\n if (debug) {\n req.payload.logger.error({\n err: updateErr,\n msg: `Failed to update import document ${doc.id} with results`,\n })\n }\n }\n\n // Return updated doc for immediate response\n return {\n ...doc,\n status,\n summary,\n }\n } catch (err) {\n const summary = {\n imported: 0,\n issueDetails: [\n {\n data: {},\n error: err instanceof Error ? err.message : String(err),\n row: 0,\n },\n ],\n issues: 1,\n total: 0,\n updated: 0,\n }\n\n if (debug) {\n req.payload.logger.error({\n docId: doc.id,\n err,\n msg: '[Import Sync Hook] Import processing failed, attempting to update status',\n transactionID: req.transactionID,\n })\n }\n\n // Try to update document with error status\n try {\n if (debug) {\n req.payload.logger.info({\n collectionSlug: collectionConfig.slug,\n docId: doc.id,\n msg: '[Import Sync Hook] About to update document with failed status',\n })\n }\n await req.payload.update({\n id: doc.id,\n collection: collectionConfig.slug,\n data: {\n status: 'failed',\n summary,\n },\n overrideAccess: true,\n req,\n })\n if (debug) {\n req.payload.logger.info({\n docId: doc.id,\n msg: '[Import Sync Hook] Successfully updated document with failed status',\n })\n }\n } catch (updateErr) {\n // Update may fail if document not yet committed, log but continue\n // ALWAYS log this error to help debug Postgres issues\n req.payload.logger.error({\n err: updateErr,\n msg: `[Import Sync Hook] Failed to update import document ${doc.id} with error status`,\n transactionID: req.transactionID,\n })\n }\n\n if (debug) {\n req.payload.logger.info({\n docId: doc.id,\n msg: '[Import Sync Hook] Returning failed doc',\n status: 'failed',\n })\n }\n\n // Return error status for immediate response\n return {\n ...doc,\n status: 'failed',\n summary,\n }\n }\n })\n\n afterChange.push(async ({ collection: collectionConfig, doc, operation, req }) => {\n if (operation !== 'create') {\n return\n }\n\n const targetCollection = req.payload.collections[doc.collectionSlug]\n const targetPluginConfig = targetCollection?.config.custom?.['plugin-import-export']\n\n const disableJobsQueue =\n targetPluginConfig?.importDisableJobsQueue ?? importConfig?.disableJobsQueue ?? false\n\n if (pluginConfig.debug) {\n req.payload.logger.info({\n collectionSlug: doc.collectionSlug,\n disableJobsQueue,\n docId: doc.id,\n docStatus: doc.status,\n msg: '[Import Job Hook] Checking if should queue job',\n transactionID: req.transactionID,\n })\n }\n\n if (disableJobsQueue) {\n if (pluginConfig.debug) {\n req.payload.logger.info({\n docId: doc.id,\n msg: '[Import Job Hook] Skipping job queue (sync mode)',\n })\n }\n return\n }\n\n try {\n // Resolve maxLimit ahead of time since it may involve async config resolution\n const maxLimit = await resolveLimit({\n limit: targetPluginConfig?.importLimit,\n req,\n })\n const defaultVersionStatus =\n targetPluginConfig?.defaultVersionStatus ??\n importConfig?.defaultVersionStatus ??\n pluginConfig.defaultVersionStatus ??\n FALLBACK_VERSION_STATUS\n const batchSize =\n targetPluginConfig?.importBatchSize ??\n importConfig?.batchSize ??\n pluginConfig.batchSize ??\n FALLBACK_BATCH_SIZE\n\n const input: ImportTaskInput = {\n batchSize,\n debug: pluginConfig.debug,\n defaultVersionStatus,\n importCollection: collectionConfig.slug,\n importId: doc.id,\n maxLimit,\n userCollection: req.user?.collection,\n userID: req?.user?.id,\n }\n\n await req.payload.jobs.queue({\n input,\n overrideAccess: true,\n task: 'createCollectionImport',\n })\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Failed to queue import job for document ${doc.id}`,\n })\n }\n })\n\n return collection\n}\n"],"names":["FileRetrievalError","getFileFromDoc","resolveLimit","createImport","getFields","handlePreview","FALLBACK_BATCH_SIZE","FALLBACK_VERSION_STATUS","getImportCollection","collectionSlugs","importConfig","pluginConfig","afterChange","collection","slug","access","update","admin","components","edit","SaveButton","custom","disableCopyToLocale","group","useAsTitle","disableDuplicate","endpoints","handler","method","path","fields","hooks","lockDocuments","upload","filesRequiredOnCreate","hideFileInputOnCreate","hideRemoveFile","mimeTypes","push","collectionConfig","doc","operation","req","status","targetCollection","payload","collections","collectionSlug","targetPluginConfig","config","disableJobsQueue","importDisableJobsQueue","debug","logger","info","docId","id","msg","transactionID","fileData","fileMimetype","file","data","mimetype","mimeType","t","filename","fileFromDoc","url","maxLimit","limit","importLimit","defaultVersionStatus","batchSize","importBatchSize","result","name","format","importDoc","importMode","matchField","userCollection","user","userID","errors","length","imported","updated","summary","issueDetails","map","e","error","row","index","undefined","issues","total","overrideAccess","updateErr","err","Error","message","String","docStatus","input","importCollection","importId","jobs","queue","task"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handlePreview.d.ts","sourceRoot":"","sources":["../../src/import/handlePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAoB7C,eAAO,MAAM,aAAa,GAAU,KAAK,cAAc,KAAG,OAAO,CAAC,QAAQ,CAuIzE,CAAA"}
1
+ {"version":3,"file":"handlePreview.d.ts","sourceRoot":"","sources":["../../src/import/handlePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAqB7C,eAAO,MAAM,aAAa,QAAe,cAAc,KAAG,OAAO,CAAC,QAAQ,CA4IzE,CAAA"}
@@ -2,6 +2,7 @@ import { addDataAndFileToRequest } from 'payload';
2
2
  import { DEFAULT_PREVIEW_LIMIT, MAX_PREVIEW_LIMIT, MIN_PREVIEW_LIMIT, MIN_PREVIEW_PAGE } from '../constants.js';
3
3
  import { applyFieldHooks } from '../utilities/applyFieldHooks.js';
4
4
  import { getImportFieldFunctions } from '../utilities/getImportFieldFunctions.js';
5
+ import { getSubmittedFormValues } from '../utilities/getSubmittedFormValues.js';
5
6
  import { parseCSV } from '../utilities/parseCSV.js';
6
7
  import { parseJSON } from '../utilities/parseJSON.js';
7
8
  import { removeDisabledFields } from '../utilities/removeDisabledFields.js';
@@ -9,7 +10,7 @@ import { resolveLimit } from '../utilities/resolveLimit.js';
9
10
  import { unflattenObject } from '../utilities/unflattenObject.js';
10
11
  export const handlePreview = async (req)=>{
11
12
  await addDataAndFileToRequest(req);
12
- const { collectionSlug, fileData, format, previewLimit: rawPreviewLimit = DEFAULT_PREVIEW_LIMIT, previewPage: rawPreviewPage = 1 } = req.data;
13
+ const { collectionSlug, fileData, format, formData, previewLimit: rawPreviewLimit = DEFAULT_PREVIEW_LIMIT, previewPage: rawPreviewPage = 1 } = req.data;
13
14
  // Validate and clamp pagination values to safe bounds
14
15
  const previewLimit = Math.max(MIN_PREVIEW_LIMIT, Math.min(rawPreviewLimit, MAX_PREVIEW_LIMIT));
15
16
  const previewPage = Math.max(MIN_PREVIEW_PAGE, rawPreviewPage);
@@ -82,6 +83,9 @@ export const handlePreview = async (req)=>{
82
83
  batchNumber: 1,
83
84
  data: parsedData,
84
85
  format: format ?? 'csv',
86
+ importDoc: getSubmittedFormValues({
87
+ formData: formData ?? {}
88
+ }),
85
89
  originalData: originalDocs,
86
90
  req,
87
91
  totalBatches: 1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/import/handlePreview.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { addDataAndFileToRequest } from 'payload'\n\nimport type { ImportPreviewResponse } from '../types.js'\n\nimport {\n DEFAULT_PREVIEW_LIMIT,\n MAX_PREVIEW_LIMIT,\n MIN_PREVIEW_LIMIT,\n MIN_PREVIEW_PAGE,\n} from '../constants.js'\nimport { applyFieldHooks } from '../utilities/applyFieldHooks.js'\nimport { getImportFieldFunctions } from '../utilities/getImportFieldFunctions.js'\nimport { parseCSV } from '../utilities/parseCSV.js'\nimport { parseJSON } from '../utilities/parseJSON.js'\nimport { removeDisabledFields } from '../utilities/removeDisabledFields.js'\nimport { resolveLimit } from '../utilities/resolveLimit.js'\nimport { unflattenObject } from '../utilities/unflattenObject.js'\n\nexport const handlePreview = async (req: PayloadRequest): Promise<Response> => {\n await addDataAndFileToRequest(req)\n\n const {\n collectionSlug,\n fileData,\n format,\n previewLimit: rawPreviewLimit = DEFAULT_PREVIEW_LIMIT,\n previewPage: rawPreviewPage = 1,\n } = req.data as {\n collectionSlug: string\n fileData?: string\n format?: 'csv' | 'json'\n previewLimit?: number\n previewPage?: number\n }\n\n // Validate and clamp pagination values to safe bounds\n const previewLimit = Math.max(MIN_PREVIEW_LIMIT, Math.min(rawPreviewLimit, MAX_PREVIEW_LIMIT))\n const previewPage = Math.max(MIN_PREVIEW_PAGE, rawPreviewPage)\n\n const targetCollection = req.payload.collections[collectionSlug]\n if (!targetCollection) {\n return Response.json(\n { error: `Collection with slug ${collectionSlug} not found` },\n { status: 400 },\n )\n }\n\n // Resolve max limit from the collection config\n const pluginConfig = targetCollection.config.custom?.['plugin-import-export']\n const maxLimit = await resolveLimit({\n limit: pluginConfig?.importLimit,\n req,\n })\n\n if (!fileData) {\n return Response.json({ error: 'No file data provided' }, { status: 400 })\n }\n\n try {\n // Parse the file data\n let parsedData: Record<string, unknown>[]\n let originalDocs: Record<string, unknown>[] = []\n const buffer = Buffer.from(fileData, 'base64')\n\n const importFieldHooks = getImportFieldFunctions({\n fields: targetCollection.config.flattenedFields || [],\n })\n\n if (format === 'csv') {\n const rawData = await parseCSV({ data: buffer, req })\n originalDocs = rawData\n\n // Unflatten CSV data\n parsedData = rawData\n .map((doc) => {\n const unflattened = unflattenObject({\n data: doc,\n fields: targetCollection.config.flattenedFields ?? [],\n format: 'csv',\n importFieldHooks,\n req,\n })\n return unflattened ?? {}\n })\n .filter((doc) => doc && Object.keys(doc).length > 0)\n } else {\n const parsedDocs = parseJSON({ data: buffer, req })\n originalDocs = parsedDocs\n // Apply field-level import hooks for JSON format\n parsedData = parsedDocs.map((doc) =>\n applyFieldHooks({\n type: 'beforeImport',\n data: doc,\n fieldHooks: importFieldHooks,\n fields: targetCollection.config.flattenedFields ?? [],\n format: 'json',\n operation: 'import',\n req,\n }),\n )\n }\n\n const importHooks = targetCollection.config.custom?.['plugin-import-export']?.importHooks\n if (importHooks?.before && parsedData.length > 0) {\n const result = await importHooks.before({\n batchNumber: 1,\n data: parsedData as unknown as Parameters<typeof importHooks.before>[0]['data'],\n format: format ?? 'csv',\n originalData: originalDocs,\n req,\n totalBatches: 1,\n })\n parsedData = result as unknown as Record<string, unknown>[]\n }\n\n // Remove disabled fields from the documents\n const disabledFields =\n targetCollection.config.admin?.custom?.['plugin-import-export']?.disabledFields ?? []\n\n if (disabledFields.length > 0) {\n parsedData = parsedData.map((doc) => removeDisabledFields(doc, disabledFields))\n }\n\n // Calculate pagination\n const totalDocs = parsedData.length\n const totalPages = totalDocs === 0 ? 0 : Math.ceil(totalDocs / previewLimit)\n const startIndex = (previewPage - 1) * previewLimit\n const endIndex = startIndex + previewLimit\n const paginatedDocs = parsedData.slice(startIndex, endIndex)\n\n const hasNextPage = previewPage < totalPages\n const hasPrevPage = previewPage > 1\n\n // Check if the file exceeds the max limit\n const limitExceeded = typeof maxLimit === 'number' && maxLimit > 0 && totalDocs > maxLimit\n\n const response: ImportPreviewResponse = {\n docs: paginatedDocs,\n hasNextPage,\n hasPrevPage,\n limit: previewLimit,\n limitExceeded,\n maxLimit,\n page: previewPage,\n totalDocs,\n totalPages,\n }\n\n return Response.json(response)\n } catch (error) {\n req.payload.logger.error({ err: error, msg: 'Error parsing import preview data' })\n return Response.json({ error: 'Failed to parse file data' }, { status: 500 })\n }\n}\n"],"names":["addDataAndFileToRequest","DEFAULT_PREVIEW_LIMIT","MAX_PREVIEW_LIMIT","MIN_PREVIEW_LIMIT","MIN_PREVIEW_PAGE","applyFieldHooks","getImportFieldFunctions","parseCSV","parseJSON","removeDisabledFields","resolveLimit","unflattenObject","handlePreview","req","collectionSlug","fileData","format","previewLimit","rawPreviewLimit","previewPage","rawPreviewPage","data","Math","max","min","targetCollection","payload","collections","Response","json","error","status","pluginConfig","config","custom","maxLimit","limit","importLimit","parsedData","originalDocs","buffer","Buffer","from","importFieldHooks","fields","flattenedFields","rawData","map","doc","unflattened","filter","Object","keys","length","parsedDocs","type","fieldHooks","operation","importHooks","before","result","batchNumber","originalData","totalBatches","disabledFields","admin","totalDocs","totalPages","ceil","startIndex","endIndex","paginatedDocs","slice","hasNextPage","hasPrevPage","limitExceeded","response","docs","page","logger","err","msg"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/import/handlePreview.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { addDataAndFileToRequest } from 'payload'\n\nimport type { ImportDoc, ImportPreviewResponse } from '../types.js'\n\nimport {\n DEFAULT_PREVIEW_LIMIT,\n MAX_PREVIEW_LIMIT,\n MIN_PREVIEW_LIMIT,\n MIN_PREVIEW_PAGE,\n} from '../constants.js'\nimport { applyFieldHooks } from '../utilities/applyFieldHooks.js'\nimport { getImportFieldFunctions } from '../utilities/getImportFieldFunctions.js'\nimport { getSubmittedFormValues } from '../utilities/getSubmittedFormValues.js'\nimport { parseCSV } from '../utilities/parseCSV.js'\nimport { parseJSON } from '../utilities/parseJSON.js'\nimport { removeDisabledFields } from '../utilities/removeDisabledFields.js'\nimport { resolveLimit } from '../utilities/resolveLimit.js'\nimport { unflattenObject } from '../utilities/unflattenObject.js'\n\nexport const handlePreview = async (req: PayloadRequest): Promise<Response> => {\n await addDataAndFileToRequest(req)\n\n const {\n collectionSlug,\n fileData,\n format,\n formData,\n previewLimit: rawPreviewLimit = DEFAULT_PREVIEW_LIMIT,\n previewPage: rawPreviewPage = 1,\n } = req.data as {\n collectionSlug: string\n fileData?: string\n format?: 'csv' | 'json'\n formData?: Record<string, unknown>\n previewLimit?: number\n previewPage?: number\n }\n\n // Validate and clamp pagination values to safe bounds\n const previewLimit = Math.max(MIN_PREVIEW_LIMIT, Math.min(rawPreviewLimit, MAX_PREVIEW_LIMIT))\n const previewPage = Math.max(MIN_PREVIEW_PAGE, rawPreviewPage)\n\n const targetCollection = req.payload.collections[collectionSlug]\n if (!targetCollection) {\n return Response.json(\n { error: `Collection with slug ${collectionSlug} not found` },\n { status: 400 },\n )\n }\n\n // Resolve max limit from the collection config\n const pluginConfig = targetCollection.config.custom?.['plugin-import-export']\n const maxLimit = await resolveLimit({\n limit: pluginConfig?.importLimit,\n req,\n })\n\n if (!fileData) {\n return Response.json({ error: 'No file data provided' }, { status: 400 })\n }\n\n try {\n // Parse the file data\n let parsedData: Record<string, unknown>[]\n let originalDocs: Record<string, unknown>[] = []\n const buffer = Buffer.from(fileData, 'base64')\n\n const importFieldHooks = getImportFieldFunctions({\n fields: targetCollection.config.flattenedFields || [],\n })\n\n if (format === 'csv') {\n const rawData = await parseCSV({ data: buffer, req })\n originalDocs = rawData\n\n // Unflatten CSV data\n parsedData = rawData\n .map((doc) => {\n const unflattened = unflattenObject({\n data: doc,\n fields: targetCollection.config.flattenedFields ?? [],\n format: 'csv',\n importFieldHooks,\n req,\n })\n return unflattened ?? {}\n })\n .filter((doc) => doc && Object.keys(doc).length > 0)\n } else {\n const parsedDocs = parseJSON({ data: buffer, req })\n originalDocs = parsedDocs\n // Apply field-level import hooks for JSON format\n parsedData = parsedDocs.map((doc) =>\n applyFieldHooks({\n type: 'beforeImport',\n data: doc,\n fieldHooks: importFieldHooks,\n fields: targetCollection.config.flattenedFields ?? [],\n format: 'json',\n operation: 'import',\n req,\n }),\n )\n }\n\n const importHooks = targetCollection.config.custom?.['plugin-import-export']?.importHooks\n if (importHooks?.before && parsedData.length > 0) {\n const result = await importHooks.before({\n batchNumber: 1,\n data: parsedData as unknown as Parameters<typeof importHooks.before>[0]['data'],\n format: format ?? 'csv',\n importDoc: getSubmittedFormValues({\n formData: formData ?? {},\n }) as ImportDoc,\n originalData: originalDocs,\n req,\n totalBatches: 1,\n })\n parsedData = result as unknown as Record<string, unknown>[]\n }\n\n // Remove disabled fields from the documents\n const disabledFields =\n targetCollection.config.admin?.custom?.['plugin-import-export']?.disabledFields ?? []\n\n if (disabledFields.length > 0) {\n parsedData = parsedData.map((doc) => removeDisabledFields(doc, disabledFields))\n }\n\n // Calculate pagination\n const totalDocs = parsedData.length\n const totalPages = totalDocs === 0 ? 0 : Math.ceil(totalDocs / previewLimit)\n const startIndex = (previewPage - 1) * previewLimit\n const endIndex = startIndex + previewLimit\n const paginatedDocs = parsedData.slice(startIndex, endIndex)\n\n const hasNextPage = previewPage < totalPages\n const hasPrevPage = previewPage > 1\n\n // Check if the file exceeds the max limit\n const limitExceeded = typeof maxLimit === 'number' && maxLimit > 0 && totalDocs > maxLimit\n\n const response: ImportPreviewResponse = {\n docs: paginatedDocs,\n hasNextPage,\n hasPrevPage,\n limit: previewLimit,\n limitExceeded,\n maxLimit,\n page: previewPage,\n totalDocs,\n totalPages,\n }\n\n return Response.json(response)\n } catch (error) {\n req.payload.logger.error({ err: error, msg: 'Error parsing import preview data' })\n return Response.json({ error: 'Failed to parse file data' }, { status: 500 })\n }\n}\n"],"names":["addDataAndFileToRequest","DEFAULT_PREVIEW_LIMIT","MAX_PREVIEW_LIMIT","MIN_PREVIEW_LIMIT","MIN_PREVIEW_PAGE","applyFieldHooks","getImportFieldFunctions","getSubmittedFormValues","parseCSV","parseJSON","removeDisabledFields","resolveLimit","unflattenObject","handlePreview","req","collectionSlug","fileData","format","formData","previewLimit","rawPreviewLimit","previewPage","rawPreviewPage","data","Math","max","min","targetCollection","payload","collections","Response","json","error","status","pluginConfig","config","custom","maxLimit","limit","importLimit","parsedData","originalDocs","buffer","Buffer","from","importFieldHooks","fields","flattenedFields","rawData","map","doc","unflattened","filter","Object","keys","length","parsedDocs","type","fieldHooks","operation","importHooks","before","result","batchNumber","importDoc","originalData","totalBatches","disabledFields","admin","totalDocs","totalPages","ceil","startIndex","endIndex","paginatedDocs","slice","hasNextPage","hasPrevPage","limitExceeded","response","docs","page","logger","err","msg"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { Config } from 'payload';
2
1
  import type { ExportAfterHook, ExportBeforeHook, FieldBeforeExportHook, FieldBeforeImportHook, ImportAfterHook, ImportBeforeHook, ImportExportPluginConfig, Limit } from './types.js';
3
2
  /**
4
3
  * Adds CSV/JSON import and export functionality to selected collections.
@@ -10,7 +9,7 @@ import type { ExportAfterHook, ExportBeforeHook, FieldBeforeExportHook, FieldBef
10
9
  *
11
10
  * @see https://payloadcms.com/docs/plugins/import-export
12
11
  */
13
- export declare const importExportPlugin: (pluginConfig: ImportExportPluginConfig) => (config: Config) => Promise<Config>;
12
+ export declare const importExportPlugin: (options: ImportExportPluginConfig) => import("payload").Plugin;
14
13
  declare module 'payload' {
15
14
  interface FieldCustom {
16
15
  'plugin-import-export'?: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAKrC,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,EAEN,MAAM,YAAY,CAAA;AAQnB;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAC5B,cAAc,wBAAwB,MAChC,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAsMrC,CAAA;AAEH,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAiB,WAAW;QAC1B,sBAAsB,CAAC,EAAE;YACvB;;;;;;eAMG;YACH,QAAQ,CAAC,EAAE,OAAO,CAAA;YAClB;;;eAGG;YACH,KAAK,CAAC,EAAE;gBACN;;;;mBAIG;gBACH,YAAY,CAAC,EAAE,qBAAqB,CAAA;gBACpC;;mBAEG;gBACH,YAAY,CAAC,EAAE,qBAAqB,CAAA;aACrC,CAAA;SACF,CAAA;KACF;IAED,UAAiB,qBAAqB;QACpC,sBAAsB,CAAC,EAAE;YACvB;;;eAGG;YACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;YAC1B;;;eAGG;YACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;YACzB;;eAEG;YACH,eAAe,CAAC,EAAE,OAAO,CAAA;YACzB;;eAEG;YACH,WAAW,CAAC,EAAE,OAAO,CAAA;YACrB;;;eAGG;YACH,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;SAC9B,CAAA;KACF;IAED,UAAiB,gBAAgB;QAC/B;;;;;;;WAOG;QACH,sBAAsB,CAAC,EAAE;YACvB;;;;eAIG;YACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;YAC5C;;;eAGG;YACH,eAAe,CAAC,EAAE,MAAM,CAAA;YACxB;;;eAGG;YACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;YAChC;;;eAGG;YACH,WAAW,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,eAAe,CAAC;gBAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;aAAE,CAAA;YACpE;;;;eAIG;YACH,WAAW,CAAC,EAAE,KAAK,CAAA;YACnB;;;eAGG;YACH,eAAe,CAAC,EAAE,MAAM,CAAA;YACxB;;;eAGG;YACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;YAChC;;;eAGG;YACH,WAAW,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,eAAe,CAAC;gBAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;aAAE,CAAA;YACpE;;;;eAIG;YACH,WAAW,CAAC,EAAE,KAAK,CAAA;SACpB,CAAA;KACF;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,KAAK,EAEN,MAAM,YAAY,CAAA;AAQnB;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,iEAyM7B,CAAA;AAEF,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAiB,WAAW;QAC1B,sBAAsB,CAAC,EAAE;YACvB;;;;;;eAMG;YACH,QAAQ,CAAC,EAAE,OAAO,CAAA;YAClB;;;eAGG;YACH,KAAK,CAAC,EAAE;gBACN;;;;mBAIG;gBACH,YAAY,CAAC,EAAE,qBAAqB,CAAA;gBACpC;;mBAEG;gBACH,YAAY,CAAC,EAAE,qBAAqB,CAAA;aACrC,CAAA;SACF,CAAA;KACF;IAED,UAAiB,qBAAqB;QACpC,sBAAsB,CAAC,EAAE;YACvB;;;eAGG;YACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;YAC1B;;;eAGG;YACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;YACzB;;eAEG;YACH,eAAe,CAAC,EAAE,OAAO,CAAA;YACzB;;eAEG;YACH,WAAW,CAAC,EAAE,OAAO,CAAA;YACrB;;;eAGG;YACH,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;SAC9B,CAAA;KACF;IAED,UAAiB,gBAAgB;QAC/B;;;;;;;WAOG;QACH,sBAAsB,CAAC,EAAE;YACvB;;;;eAIG;YACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;YAC5C;;;eAGG;YACH,eAAe,CAAC,EAAE,MAAM,CAAA;YACxB;;;eAGG;YACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;YAChC;;;eAGG;YACH,WAAW,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,eAAe,CAAC;gBAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;aAAE,CAAA;YACpE;;;;eAIG;YACH,WAAW,CAAC,EAAE,KAAK,CAAA;YACnB;;;eAGG;YACH,eAAe,CAAC,EAAE,MAAM,CAAA;YACxB;;;eAGG;YACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;YAChC;;;eAGG;YACH,WAAW,CAAC,EAAE;gBAAE,KAAK,CAAC,EAAE,eAAe,CAAC;gBAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;aAAE,CAAA;YACpE;;;;eAIG;YACH,WAAW,CAAC,EAAE,KAAK,CAAA;SACpB,CAAA;KACF;CACF"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { deepMergeSimple } from 'payload';
1
+ import { deepMergeSimple, definePlugin } from 'payload';
2
2
  import { getCreateCollectionExportTask } from './export/getCreateExportCollectionTask.js';
3
3
  import { getCreateCollectionImportTask } from './import/getCreateImportCollectionTask.js';
4
4
  import { translations } from './translations/index.js';
@@ -13,7 +13,9 @@ import { getPluginCollections } from './utilities/getPluginCollections.js';
13
13
  * format, lifecycle hooks, override) live on each entry of `collections`.
14
14
  *
15
15
  * @see https://payloadcms.com/docs/plugins/import-export
16
- */ export const importExportPlugin = (pluginConfig)=>async (config)=>{
16
+ */ export const importExportPlugin = definePlugin({
17
+ slug: '@payloadcms/plugin-import-export',
18
+ plugin: async ({ config, options: pluginConfig })=>{
17
19
  // Get all export/import collections and the mappings from target collections to custom collections
18
20
  const { customExportSlugMap, customImportSlugMap, exportCollections, importCollections } = await getPluginCollections({
19
21
  config,
@@ -189,6 +191,7 @@ import { getPluginCollections } from './utilities/getPluginCollections.js';
189
191
  translations: deepMergeSimple(simplifiedTranslations, config.i18n?.translations ?? {})
190
192
  };
191
193
  return config;
192
- };
194
+ }
195
+ });
193
196
 
194
197
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { Config } from 'payload'\n\nimport { deepMergeSimple } from 'payload'\n\nimport type { PluginDefaultTranslationsObject } from './translations/types.js'\nimport type {\n ExportAfterHook,\n ExportBeforeHook,\n FieldBeforeExportHook,\n FieldBeforeImportHook,\n ImportAfterHook,\n ImportBeforeHook,\n ImportExportPluginConfig,\n Limit,\n PluginCollectionConfig,\n} from './types.js'\n\nimport { getCreateCollectionExportTask } from './export/getCreateExportCollectionTask.js'\nimport { getCreateCollectionImportTask } from './import/getCreateImportCollectionTask.js'\nimport { translations } from './translations/index.js'\nimport { collectDisabledFieldPaths } from './utilities/collectDisabledFieldPaths.js'\nimport { getPluginCollections } from './utilities/getPluginCollections.js'\n\n/**\n * Adds CSV/JSON import and export functionality to selected collections.\n *\n * Registers two upload collections (`exports`, `imports`) that drive the admin\n * UI flow, plus the `createCollectionExport` and `createCollectionImport` jobs\n * that run the work asynchronously. Per-collection settings (batch size, limits,\n * format, lifecycle hooks, override) live on each entry of `collections`.\n *\n * @see https://payloadcms.com/docs/plugins/import-export\n */\nexport const importExportPlugin =\n (pluginConfig: ImportExportPluginConfig) =>\n async (config: Config): Promise<Config> => {\n // Get all export/import collections and the mappings from target collections to custom collections\n const { customExportSlugMap, customImportSlugMap, exportCollections, importCollections } =\n await getPluginCollections({\n config,\n pluginConfig,\n })\n\n // Base collections are at index 0 (always present)\n const baseExportCollection = exportCollections[0]!\n const baseImportCollection = importCollections[0]!\n\n // Collect all export and import collection slugs for filtering\n const allExportSlugs = new Set(exportCollections.map((c) => c.slug))\n const allImportSlugs = new Set(importCollections.map((c) => c.slug))\n\n // Initialize collections array if needed\n if (!config.collections) {\n config.collections = []\n }\n\n // Push all export/import collections if their slugs don't already exist\n for (const collection of [...exportCollections, ...importCollections]) {\n const slugExists = config.collections.some((c) => c.slug === collection.slug)\n if (!slugExists) {\n config.collections.push(collection)\n }\n }\n\n // inject custom import export provider\n config.admin = config.admin || {}\n config.admin.components = config.admin.components || {}\n config.admin.components.providers = config.admin.components.providers || []\n config.admin.components.providers.push(\n '@payloadcms/plugin-import-export/rsc#ImportExportProvider',\n )\n\n // inject the createExport and createImport jobs into the config\n ;((config.jobs ??= {}).tasks ??= []).push(getCreateCollectionExportTask(config))\n config.jobs.tasks.push(getCreateCollectionImportTask(config))\n\n // Build a map of collection configs for quick lookup\n const collectionConfigMap = new Map<string, PluginCollectionConfig>()\n if (pluginConfig.collections) {\n for (const collectionConfig of pluginConfig.collections) {\n collectionConfigMap.set(collectionConfig.slug, collectionConfig)\n }\n }\n\n // Determine which collections to add import/export menu items to\n // Exclude all export and import collections\n const collectionsToUpdate = config.collections.filter(\n (c) => !allExportSlugs.has(c.slug) && !allImportSlugs.has(c.slug),\n )\n\n for (const collection of collectionsToUpdate) {\n // Get the plugin config for this collection (if specified)\n const collectionPluginConfig = collectionConfigMap.get(collection.slug)\n\n // If collections array is specified but this collection is not in it, skip\n if (\n pluginConfig.collections &&\n pluginConfig.collections.length > 0 &&\n !collectionPluginConfig\n ) {\n continue\n }\n\n // Determine which export/import collection to use for this collection\n const exportSlugForCollection =\n customExportSlugMap.get(collection.slug) || baseExportCollection.slug\n const importSlugForCollection =\n customImportSlugMap.get(collection.slug) || baseImportCollection.slug\n\n // Check if export/import are disabled for this collection\n const exportDisabled = collectionPluginConfig?.export === false\n const importDisabled = collectionPluginConfig?.import === false\n\n if (!collection.admin) {\n collection.admin = { components: { listMenuItems: [] } }\n }\n const components = collection.admin.components || {}\n if (!components.listMenuItems) {\n components.listMenuItems = []\n }\n\n // Add export menu item if not disabled\n if (!exportDisabled) {\n components.listMenuItems.push({\n clientProps: {\n collectionSlug: collection.slug,\n exportCollectionSlug: exportSlugForCollection,\n },\n path: '@payloadcms/plugin-import-export/rsc#ExportListMenuItem',\n })\n }\n\n // Add import menu item if not disabled\n if (!importDisabled) {\n components.listMenuItems.push({\n clientProps: {\n collectionSlug: collection.slug,\n importCollectionSlug: importSlugForCollection,\n },\n path: '@payloadcms/plugin-import-export/rsc#ImportListMenuItem',\n })\n }\n\n // Find fields explicitly marked as disabled for import/export\n const disabledFieldAccessors = collectDisabledFieldPaths(collection.fields)\n\n const exportConfig =\n typeof collectionPluginConfig?.export === 'object'\n ? collectionPluginConfig.export\n : undefined\n const exportFormat = exportConfig?.format\n const exportDisableJobsQueue = exportConfig?.disableJobsQueue\n const exportBatchSize = exportConfig?.batchSize\n const exportDisableSave = exportConfig?.disableSave\n const exportDisableDownload = exportConfig?.disableDownload\n\n const importConfig =\n typeof collectionPluginConfig?.import === 'object'\n ? collectionPluginConfig.import\n : undefined\n const importDisableJobsQueue = importConfig?.disableJobsQueue\n const importBatchSize = importConfig?.batchSize\n\n const exportLimit = exportConfig?.limit ?? pluginConfig.exportLimit\n const exportHooks = exportConfig?.hooks\n\n const importLimit = importConfig?.limit ?? pluginConfig.importLimit\n const importDefaultVersionStatus = importConfig?.defaultVersionStatus\n const importHooks = importConfig?.hooks\n\n collection.admin.custom = {\n ...(collection.admin.custom || {}),\n 'plugin-import-export': {\n ...(collection.admin.custom?.['plugin-import-export'] || {}),\n disabledFields: disabledFieldAccessors,\n ...(exportFormat !== undefined && { exportFormat }),\n ...(exportDisableSave !== undefined && { disableSave: exportDisableSave }),\n ...(exportDisableDownload !== undefined && { disableDownload: exportDisableDownload }),\n },\n }\n\n collection.custom = {\n ...(collection.custom || {}),\n 'plugin-import-export': {\n ...(collection.custom?.['plugin-import-export'] || {}),\n ...(exportLimit !== undefined && { exportLimit }),\n ...(exportDisableJobsQueue !== undefined && {\n exportDisableJobsQueue,\n }),\n ...(exportBatchSize !== undefined && { exportBatchSize }),\n ...(importLimit !== undefined && { importLimit }),\n ...(importDisableJobsQueue !== undefined && {\n importDisableJobsQueue,\n }),\n ...(importBatchSize !== undefined && { importBatchSize }),\n ...(importDefaultVersionStatus !== undefined && {\n defaultVersionStatus: importDefaultVersionStatus,\n }),\n ...(exportHooks !== undefined && { exportHooks }),\n ...(importHooks !== undefined && { importHooks }),\n },\n }\n\n collection.admin.components = components\n }\n\n if (!config.i18n) {\n config.i18n = {}\n }\n\n /**\n * Merge plugin translations — only for languages the user has enabled.\n * Plugins run before sanitize, so `supportedLanguages` may be undefined; sanitize will\n * default it to `{ en }`, so we mirror that here to avoid merging 30+ unused tables.\n */\n const supportedLanguageKeys = config.i18n?.supportedLanguages\n ? Object.keys(config.i18n.supportedLanguages)\n : ['en']\n\n const simplifiedTranslations: Record<string, PluginDefaultTranslationsObject> = {}\n for (const lang of supportedLanguageKeys) {\n const entry = translations[lang as keyof typeof translations]\n if (entry) {\n simplifiedTranslations[lang] = entry.translations\n }\n }\n\n config.i18n = {\n ...config.i18n,\n translations: deepMergeSimple(simplifiedTranslations, config.i18n?.translations ?? {}),\n }\n\n return config\n }\n\ndeclare module 'payload' {\n export interface FieldCustom {\n 'plugin-import-export'?: {\n /**\n * When `true` the field is **completely excluded** from the import-export plugin:\n * - It will not appear in the \"Fields to export\" selector.\n * - It is hidden from the preview list when no specific fields are chosen.\n * - Its data is omitted from the final CSV / JSON export.\n * @default false\n */\n disabled?: boolean\n /**\n * Field-level lifecycle hooks for import/export transformations.\n * Works for both CSV and JSON formats.\n */\n hooks?: {\n /**\n * Runs before a field value is exported. Return a transformed value,\n * `undefined` to use default behavior, or mutate `siblingData` to add\n * extra columns at the same level.\n */\n beforeExport?: FieldBeforeExportHook\n /**\n * Runs before a field value is imported. Return the transformed value.\n */\n beforeImport?: FieldBeforeImportHook\n }\n }\n }\n\n export interface CollectionAdminCustom {\n 'plugin-import-export'?: {\n /**\n * Array of collection slugs that this export/import collection can target.\n * Used by CollectionField to populate the dropdown options.\n */\n collectionSlugs?: string[]\n /**\n * Array of field paths that are disabled for import/export.\n * These paths are collected from fields marked with `custom['plugin-import-export'].disabled = true`.\n */\n disabledFields?: string[]\n /**\n * If true, disables the download button in the export preview UI.\n */\n disableDownload?: boolean\n /**\n * If true, disables the save button in the export preview UI.\n */\n disableSave?: boolean\n /**\n * When set, forces exports from this collection to use this format.\n * This value is read from the plugin config's `export.format` option.\n */\n exportFormat?: 'csv' | 'json'\n }\n }\n\n export interface CollectionCustom {\n /**\n * @internal\n * Server-side storage for resolved plugin config. Users should configure\n * import/export via `importExportPlugin({ collections: [{ slug, export: { ... }, import: { ... } }] })`.\n * These fields are populated automatically and are not part of the public\n * API — the names here intentionally diverge from the user-facing nested\n * `export.hooks` / `import.hooks` config and may change without notice.\n */\n 'plugin-import-export'?: {\n /**\n * @internal Default version status for imported documents when _status field is not provided.\n * Only applies to collections with versions enabled.\n * @default 'published'\n */\n defaultVersionStatus?: 'draft' | 'published'\n /**\n * Number of documents to process in each batch during export.\n * @default 100\n */\n exportBatchSize?: number\n /**\n * If true, disables the jobs queue for exports and runs them synchronously.\n * @default false\n */\n exportDisableJobsQueue?: boolean\n /**\n * Lifecycle hooks for export operations. Stored server-side since functions\n * cannot be serialized to the client.\n */\n exportHooks?: { after?: ExportAfterHook; before?: ExportBeforeHook }\n /**\n * Maximum number of documents that can be exported from this collection.\n * Set to 0 for unlimited (default). Can be a number or function.\n * Stored in collection.custom (server-only) since functions cannot be serialized to client.\n */\n exportLimit?: Limit\n /**\n * Number of documents to process in each batch during import.\n * @default 100\n */\n importBatchSize?: number\n /**\n * If true, disables the jobs queue for imports and runs them synchronously.\n * @default false\n */\n importDisableJobsQueue?: boolean\n /**\n * Lifecycle hooks for import operations. Stored server-side since functions\n * cannot be serialized to the client.\n */\n importHooks?: { after?: ImportAfterHook; before?: ImportBeforeHook }\n /**\n * Maximum number of documents that can be imported to this collection.\n * Set to 0 for unlimited (default). Can be a number or function.\n * Stored in collection.custom (server-only) since functions cannot be serialized to client.\n */\n importLimit?: Limit\n }\n }\n}\n"],"names":["deepMergeSimple","getCreateCollectionExportTask","getCreateCollectionImportTask","translations","collectDisabledFieldPaths","getPluginCollections","importExportPlugin","pluginConfig","config","customExportSlugMap","customImportSlugMap","exportCollections","importCollections","baseExportCollection","baseImportCollection","allExportSlugs","Set","map","c","slug","allImportSlugs","collections","collection","slugExists","some","push","admin","components","providers","jobs","tasks","collectionConfigMap","Map","collectionConfig","set","collectionsToUpdate","filter","has","collectionPluginConfig","get","length","exportSlugForCollection","importSlugForCollection","exportDisabled","export","importDisabled","import","listMenuItems","clientProps","collectionSlug","exportCollectionSlug","path","importCollectionSlug","disabledFieldAccessors","fields","exportConfig","undefined","exportFormat","format","exportDisableJobsQueue","disableJobsQueue","exportBatchSize","batchSize","exportDisableSave","disableSave","exportDisableDownload","disableDownload","importConfig","importDisableJobsQueue","importBatchSize","exportLimit","limit","exportHooks","hooks","importLimit","importDefaultVersionStatus","defaultVersionStatus","importHooks","custom","disabledFields","i18n","supportedLanguageKeys","supportedLanguages","Object","keys","simplifiedTranslations","lang","entry"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { deepMergeSimple, definePlugin } from 'payload'\n\nimport type { PluginDefaultTranslationsObject } from './translations/types.js'\nimport type {\n ExportAfterHook,\n ExportBeforeHook,\n FieldBeforeExportHook,\n FieldBeforeImportHook,\n ImportAfterHook,\n ImportBeforeHook,\n ImportExportPluginConfig,\n Limit,\n PluginCollectionConfig,\n} from './types.js'\n\nimport { getCreateCollectionExportTask } from './export/getCreateExportCollectionTask.js'\nimport { getCreateCollectionImportTask } from './import/getCreateImportCollectionTask.js'\nimport { translations } from './translations/index.js'\nimport { collectDisabledFieldPaths } from './utilities/collectDisabledFieldPaths.js'\nimport { getPluginCollections } from './utilities/getPluginCollections.js'\n\n/**\n * Adds CSV/JSON import and export functionality to selected collections.\n *\n * Registers two upload collections (`exports`, `imports`) that drive the admin\n * UI flow, plus the `createCollectionExport` and `createCollectionImport` jobs\n * that run the work asynchronously. Per-collection settings (batch size, limits,\n * format, lifecycle hooks, override) live on each entry of `collections`.\n *\n * @see https://payloadcms.com/docs/plugins/import-export\n */\nexport const importExportPlugin = definePlugin<ImportExportPluginConfig>({\n slug: '@payloadcms/plugin-import-export',\n plugin: async ({ config, options: pluginConfig }) => {\n // Get all export/import collections and the mappings from target collections to custom collections\n const { customExportSlugMap, customImportSlugMap, exportCollections, importCollections } =\n await getPluginCollections({\n config,\n pluginConfig,\n })\n\n // Base collections are at index 0 (always present)\n const baseExportCollection = exportCollections[0]!\n const baseImportCollection = importCollections[0]!\n\n // Collect all export and import collection slugs for filtering\n const allExportSlugs = new Set(exportCollections.map((c) => c.slug))\n const allImportSlugs = new Set(importCollections.map((c) => c.slug))\n\n // Initialize collections array if needed\n if (!config.collections) {\n config.collections = []\n }\n\n // Push all export/import collections if their slugs don't already exist\n for (const collection of [...exportCollections, ...importCollections]) {\n const slugExists = config.collections.some((c) => c.slug === collection.slug)\n if (!slugExists) {\n config.collections.push(collection)\n }\n }\n\n // inject custom import export provider\n config.admin = config.admin || {}\n config.admin.components = config.admin.components || {}\n config.admin.components.providers = config.admin.components.providers || []\n config.admin.components.providers.push(\n '@payloadcms/plugin-import-export/rsc#ImportExportProvider',\n )\n\n // inject the createExport and createImport jobs into the config\n ;((config.jobs ??= {}).tasks ??= []).push(getCreateCollectionExportTask(config))\n config.jobs.tasks.push(getCreateCollectionImportTask(config))\n\n // Build a map of collection configs for quick lookup\n const collectionConfigMap = new Map<string, PluginCollectionConfig>()\n if (pluginConfig.collections) {\n for (const collectionConfig of pluginConfig.collections) {\n collectionConfigMap.set(collectionConfig.slug, collectionConfig)\n }\n }\n\n // Determine which collections to add import/export menu items to\n // Exclude all export and import collections\n const collectionsToUpdate = config.collections.filter(\n (c) => !allExportSlugs.has(c.slug) && !allImportSlugs.has(c.slug),\n )\n\n for (const collection of collectionsToUpdate) {\n // Get the plugin config for this collection (if specified)\n const collectionPluginConfig = collectionConfigMap.get(collection.slug)\n\n // If collections array is specified but this collection is not in it, skip\n if (\n pluginConfig.collections &&\n pluginConfig.collections.length > 0 &&\n !collectionPluginConfig\n ) {\n continue\n }\n\n // Determine which export/import collection to use for this collection\n const exportSlugForCollection =\n customExportSlugMap.get(collection.slug) || baseExportCollection.slug\n const importSlugForCollection =\n customImportSlugMap.get(collection.slug) || baseImportCollection.slug\n\n // Check if export/import are disabled for this collection\n const exportDisabled = collectionPluginConfig?.export === false\n const importDisabled = collectionPluginConfig?.import === false\n\n if (!collection.admin) {\n collection.admin = { components: { listMenuItems: [] } }\n }\n const components = collection.admin.components || {}\n if (!components.listMenuItems) {\n components.listMenuItems = []\n }\n\n // Add export menu item if not disabled\n if (!exportDisabled) {\n components.listMenuItems.push({\n clientProps: {\n collectionSlug: collection.slug,\n exportCollectionSlug: exportSlugForCollection,\n },\n path: '@payloadcms/plugin-import-export/rsc#ExportListMenuItem',\n })\n }\n\n // Add import menu item if not disabled\n if (!importDisabled) {\n components.listMenuItems.push({\n clientProps: {\n collectionSlug: collection.slug,\n importCollectionSlug: importSlugForCollection,\n },\n path: '@payloadcms/plugin-import-export/rsc#ImportListMenuItem',\n })\n }\n\n // Find fields explicitly marked as disabled for import/export\n const disabledFieldAccessors = collectDisabledFieldPaths(collection.fields)\n\n const exportConfig =\n typeof collectionPluginConfig?.export === 'object'\n ? collectionPluginConfig.export\n : undefined\n const exportFormat = exportConfig?.format\n const exportDisableJobsQueue = exportConfig?.disableJobsQueue\n const exportBatchSize = exportConfig?.batchSize\n const exportDisableSave = exportConfig?.disableSave\n const exportDisableDownload = exportConfig?.disableDownload\n\n const importConfig =\n typeof collectionPluginConfig?.import === 'object'\n ? collectionPluginConfig.import\n : undefined\n const importDisableJobsQueue = importConfig?.disableJobsQueue\n const importBatchSize = importConfig?.batchSize\n\n const exportLimit = exportConfig?.limit ?? pluginConfig.exportLimit\n const exportHooks = exportConfig?.hooks\n\n const importLimit = importConfig?.limit ?? pluginConfig.importLimit\n const importDefaultVersionStatus = importConfig?.defaultVersionStatus\n const importHooks = importConfig?.hooks\n\n collection.admin.custom = {\n ...(collection.admin.custom || {}),\n 'plugin-import-export': {\n ...(collection.admin.custom?.['plugin-import-export'] || {}),\n disabledFields: disabledFieldAccessors,\n ...(exportFormat !== undefined && { exportFormat }),\n ...(exportDisableSave !== undefined && { disableSave: exportDisableSave }),\n ...(exportDisableDownload !== undefined && { disableDownload: exportDisableDownload }),\n },\n }\n\n collection.custom = {\n ...(collection.custom || {}),\n 'plugin-import-export': {\n ...(collection.custom?.['plugin-import-export'] || {}),\n ...(exportLimit !== undefined && { exportLimit }),\n ...(exportDisableJobsQueue !== undefined && {\n exportDisableJobsQueue,\n }),\n ...(exportBatchSize !== undefined && { exportBatchSize }),\n ...(importLimit !== undefined && { importLimit }),\n ...(importDisableJobsQueue !== undefined && {\n importDisableJobsQueue,\n }),\n ...(importBatchSize !== undefined && { importBatchSize }),\n ...(importDefaultVersionStatus !== undefined && {\n defaultVersionStatus: importDefaultVersionStatus,\n }),\n ...(exportHooks !== undefined && { exportHooks }),\n ...(importHooks !== undefined && { importHooks }),\n },\n }\n\n collection.admin.components = components\n }\n\n if (!config.i18n) {\n config.i18n = {}\n }\n\n /**\n * Merge plugin translations — only for languages the user has enabled.\n * Plugins run before sanitize, so `supportedLanguages` may be undefined; sanitize will\n * default it to `{ en }`, so we mirror that here to avoid merging 30+ unused tables.\n */\n const supportedLanguageKeys = config.i18n?.supportedLanguages\n ? Object.keys(config.i18n.supportedLanguages)\n : ['en']\n\n const simplifiedTranslations: Record<string, PluginDefaultTranslationsObject> = {}\n for (const lang of supportedLanguageKeys) {\n const entry = translations[lang as keyof typeof translations]\n if (entry) {\n simplifiedTranslations[lang] = entry.translations\n }\n }\n\n config.i18n = {\n ...config.i18n,\n translations: deepMergeSimple(simplifiedTranslations, config.i18n?.translations ?? {}),\n }\n\n return config\n },\n})\n\ndeclare module 'payload' {\n export interface FieldCustom {\n 'plugin-import-export'?: {\n /**\n * When `true` the field is **completely excluded** from the import-export plugin:\n * - It will not appear in the \"Fields to export\" selector.\n * - It is hidden from the preview list when no specific fields are chosen.\n * - Its data is omitted from the final CSV / JSON export.\n * @default false\n */\n disabled?: boolean\n /**\n * Field-level lifecycle hooks for import/export transformations.\n * Works for both CSV and JSON formats.\n */\n hooks?: {\n /**\n * Runs before a field value is exported. Return a transformed value,\n * `undefined` to use default behavior, or mutate `siblingData` to add\n * extra columns at the same level.\n */\n beforeExport?: FieldBeforeExportHook\n /**\n * Runs before a field value is imported. Return the transformed value.\n */\n beforeImport?: FieldBeforeImportHook\n }\n }\n }\n\n export interface CollectionAdminCustom {\n 'plugin-import-export'?: {\n /**\n * Array of collection slugs that this export/import collection can target.\n * Used by CollectionField to populate the dropdown options.\n */\n collectionSlugs?: string[]\n /**\n * Array of field paths that are disabled for import/export.\n * These paths are collected from fields marked with `custom['plugin-import-export'].disabled = true`.\n */\n disabledFields?: string[]\n /**\n * If true, disables the download button in the export preview UI.\n */\n disableDownload?: boolean\n /**\n * If true, disables the save button in the export preview UI.\n */\n disableSave?: boolean\n /**\n * When set, forces exports from this collection to use this format.\n * This value is read from the plugin config's `export.format` option.\n */\n exportFormat?: 'csv' | 'json'\n }\n }\n\n export interface CollectionCustom {\n /**\n * @internal\n * Server-side storage for resolved plugin config. Users should configure\n * import/export via `importExportPlugin({ collections: [{ slug, export: { ... }, import: { ... } }] })`.\n * These fields are populated automatically and are not part of the public\n * API — the names here intentionally diverge from the user-facing nested\n * `export.hooks` / `import.hooks` config and may change without notice.\n */\n 'plugin-import-export'?: {\n /**\n * @internal Default version status for imported documents when _status field is not provided.\n * Only applies to collections with versions enabled.\n * @default 'published'\n */\n defaultVersionStatus?: 'draft' | 'published'\n /**\n * Number of documents to process in each batch during export.\n * @default 100\n */\n exportBatchSize?: number\n /**\n * If true, disables the jobs queue for exports and runs them synchronously.\n * @default false\n */\n exportDisableJobsQueue?: boolean\n /**\n * Lifecycle hooks for export operations. Stored server-side since functions\n * cannot be serialized to the client.\n */\n exportHooks?: { after?: ExportAfterHook; before?: ExportBeforeHook }\n /**\n * Maximum number of documents that can be exported from this collection.\n * Set to 0 for unlimited (default). Can be a number or function.\n * Stored in collection.custom (server-only) since functions cannot be serialized to client.\n */\n exportLimit?: Limit\n /**\n * Number of documents to process in each batch during import.\n * @default 100\n */\n importBatchSize?: number\n /**\n * If true, disables the jobs queue for imports and runs them synchronously.\n * @default false\n */\n importDisableJobsQueue?: boolean\n /**\n * Lifecycle hooks for import operations. Stored server-side since functions\n * cannot be serialized to the client.\n */\n importHooks?: { after?: ImportAfterHook; before?: ImportBeforeHook }\n /**\n * Maximum number of documents that can be imported to this collection.\n * Set to 0 for unlimited (default). Can be a number or function.\n * Stored in collection.custom (server-only) since functions cannot be serialized to client.\n */\n importLimit?: Limit\n }\n }\n}\n"],"names":["deepMergeSimple","definePlugin","getCreateCollectionExportTask","getCreateCollectionImportTask","translations","collectDisabledFieldPaths","getPluginCollections","importExportPlugin","slug","plugin","config","options","pluginConfig","customExportSlugMap","customImportSlugMap","exportCollections","importCollections","baseExportCollection","baseImportCollection","allExportSlugs","Set","map","c","allImportSlugs","collections","collection","slugExists","some","push","admin","components","providers","jobs","tasks","collectionConfigMap","Map","collectionConfig","set","collectionsToUpdate","filter","has","collectionPluginConfig","get","length","exportSlugForCollection","importSlugForCollection","exportDisabled","export","importDisabled","import","listMenuItems","clientProps","collectionSlug","exportCollectionSlug","path","importCollectionSlug","disabledFieldAccessors","fields","exportConfig","undefined","exportFormat","format","exportDisableJobsQueue","disableJobsQueue","exportBatchSize","batchSize","exportDisableSave","disableSave","exportDisableDownload","disableDownload","importConfig","importDisableJobsQueue","importBatchSize","exportLimit","limit","exportHooks","hooks","importLimit","importDefaultVersionStatus","defaultVersionStatus","importHooks","custom","disabledFields","i18n","supportedLanguageKeys","supportedLanguages","Object","keys","simplifiedTranslations","lang","entry"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4C1B,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../src/translations/languages/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,eAAO,MAAM,cAAc;IACzB,sBAAsB;QACpB,UAAU;QACV,kBAAkB;QAClB,iBAAiB;QACjB,iBAAiB;QACjB,mBAAmB;QACnB,aAAa;QACb,4BAA4B;QAC5B,mBAAmB;QACnB,oBAAoB;QACpB,oBAAoB;QACpB,oBAAoB;QACpB,+BAA+B;QAC/B,wBAAwB;QACxB,+BAA+B;QAC/B,+BAA+B;QAC/B,mBAAmB;QACnB,oBAAoB;QACpB,8BAA8B;QAC9B,wBAAwB;QACxB,kBAAkB;QAClB,kBAAkB;QAClB,4BAA4B;QAC5B,kBAAkB;QAClB,wBAAwB;QACxB,oBAAoB;QACpB,qBAAqB;QACrB,mBAAmB;QACnB,aAAa;QACb,WAAW;QACX,mBAAmB;QACnB,mBAAmB;QACnB,OAAO;QACP,IAAI;QACJ,eAAe;QACf,eAAe;QACf,6BAA6B;QAC7B,+BAA+B;QAC/B,iCAAiC;QACjC,WAAW;QACX,mBAAmB;QACnB,sBAAsB;;CAEzB,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,cAGhB,CAAA"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { CollectionConfig, CollectionSlug, DataFromCollectionSlug, PayloadRequest } from 'payload';
1
+ import type { CollectionConfig, CollectionSlug, DataFromCollectionSlug, JsonObject, PayloadRequest } from 'payload';
2
2
  /**
3
3
  * Function to dynamically determine the limit based on request context
4
4
  */
@@ -29,6 +29,14 @@ export type ImportResult = {
29
29
  total: number;
30
30
  updated: number;
31
31
  };
32
+ /** Export document or unsaved form values. `id` indicates a saved document. Treat as read-only. */
33
+ export type ExportDoc = {
34
+ id?: number | string;
35
+ } & JsonObject;
36
+ /** Import document or unsaved preview form values. `id` indicates a saved document. Treat as read-only. */
37
+ export type ImportDoc = {
38
+ id?: number | string;
39
+ } & JsonObject;
32
40
  /**
33
41
  * Hook called before each export batch is written to file.
34
42
  * Receives the transformed batch data and the original DB documents.
@@ -39,6 +47,8 @@ export type ExportBeforeHook<TSlug extends CollectionSlug = CollectionSlug> = (a
39
47
  batchNumber: number;
40
48
  /** Transformed batch — flat rows for CSV, nested docs for JSON. Modify and return this. */
41
49
  data: Record<string, unknown>[];
50
+ /** See {@link ExportDoc}. */
51
+ exportDoc: ExportDoc;
42
52
  /** Export format. Open-ended to support custom formats in the future. */
43
53
  format: 'csv' | 'json' | ({} & string);
44
54
  /**
@@ -63,6 +73,8 @@ export type ExportAfterHook = (args: {
63
73
  batchNumber: number;
64
74
  /** The batch data that was written */
65
75
  data: Record<string, unknown>[];
76
+ /** See {@link ExportDoc}. */
77
+ exportDoc: ExportDoc;
66
78
  /** Export format */
67
79
  format: 'csv' | 'json' | ({} & string);
68
80
  /** Raw DB documents before transformation */
@@ -88,6 +100,8 @@ export type ImportBeforeHook<TSlug extends CollectionSlug = CollectionSlug> = (a
88
100
  data: Partial<DataFromCollectionSlug<TSlug>>[];
89
101
  /** Import format. Open-ended to support custom formats in the future. */
90
102
  format: 'csv' | 'json' | ({} & string);
103
+ /** See {@link ImportDoc}. */
104
+ importDoc: ImportDoc;
91
105
  /** Raw parsed file rows before unflattening. Read-only reference. */
92
106
  originalData: Record<string, unknown>[];
93
107
  req: PayloadRequest;
@@ -103,6 +117,8 @@ export type ImportAfterHook = (args: {
103
117
  batchNumber: number;
104
118
  /** Import format */
105
119
  format: 'csv' | 'json' | ({} & string);
120
+ /** See {@link ImportDoc}. */
121
+ importDoc: ImportDoc;
106
122
  /**
107
123
  * Raw parsed file rows for this batch before unflattening and before-hook
108
124
  * transformation. For CSV this is the flat key/value row; for JSON this is
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}