@payloadcms/plugin-import-export 3.71.0-internal.ef75fa0 → 3.71.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/dist/components/CollectionField/index.d.ts.map +1 -1
  2. package/dist/components/CollectionField/index.js +8 -3
  3. package/dist/components/CollectionField/index.js.map +1 -1
  4. package/dist/components/ExportListMenuItem/index.d.ts +0 -1
  5. package/dist/components/ExportListMenuItem/index.d.ts.map +1 -1
  6. package/dist/components/ExportListMenuItem/index.js +0 -1
  7. package/dist/components/ExportListMenuItem/index.js.map +1 -1
  8. package/dist/components/ExportPreview/index.d.ts +4 -0
  9. package/dist/components/ExportPreview/index.d.ts.map +1 -0
  10. package/dist/components/ExportPreview/index.js +252 -0
  11. package/dist/components/ExportPreview/index.js.map +1 -0
  12. package/dist/components/ExportPreview/index.scss +36 -0
  13. package/dist/components/ImportCollectionField/index.d.ts +3 -0
  14. package/dist/components/ImportCollectionField/index.d.ts.map +1 -0
  15. package/dist/components/ImportCollectionField/index.js +17 -0
  16. package/dist/components/ImportCollectionField/index.js.map +1 -0
  17. package/dist/components/ImportListMenuItem/index.d.ts +6 -0
  18. package/dist/components/ImportListMenuItem/index.d.ts.map +1 -0
  19. package/dist/components/ImportListMenuItem/index.js +48 -0
  20. package/dist/components/ImportListMenuItem/index.js.map +1 -0
  21. package/dist/components/ImportPreview/index.d.ts +4 -0
  22. package/dist/components/ImportPreview/index.d.ts.map +1 -0
  23. package/dist/components/ImportPreview/index.js +624 -0
  24. package/dist/components/ImportPreview/index.js.map +1 -0
  25. package/dist/components/ImportPreview/index.scss +41 -0
  26. package/dist/components/ImportSaveButton/index.d.ts +2 -0
  27. package/dist/components/ImportSaveButton/index.d.ts.map +1 -0
  28. package/dist/components/ImportSaveButton/index.js +18 -0
  29. package/dist/components/ImportSaveButton/index.js.map +1 -0
  30. package/dist/components/Page/index.scss +4 -2
  31. package/dist/constants.d.ts +21 -0
  32. package/dist/constants.d.ts.map +1 -0
  33. package/dist/constants.js +21 -0
  34. package/dist/constants.js.map +1 -0
  35. package/dist/export/batchProcessor.d.ts +107 -0
  36. package/dist/export/batchProcessor.d.ts.map +1 -0
  37. package/dist/export/batchProcessor.js +187 -0
  38. package/dist/export/batchProcessor.js.map +1 -0
  39. package/dist/export/createExport.d.ts +9 -4
  40. package/dist/export/createExport.d.ts.map +1 -1
  41. package/dist/export/createExport.js +163 -111
  42. package/dist/export/createExport.js.map +1 -1
  43. package/dist/export/getCreateExportCollectionTask.d.ts +1 -2
  44. package/dist/export/getCreateExportCollectionTask.d.ts.map +1 -1
  45. package/dist/export/getCreateExportCollectionTask.js +10 -18
  46. package/dist/export/getCreateExportCollectionTask.js.map +1 -1
  47. package/dist/export/getExportCollection.d.ts +8 -0
  48. package/dist/export/getExportCollection.d.ts.map +1 -0
  49. package/dist/export/getExportCollection.js +100 -0
  50. package/dist/export/getExportCollection.js.map +1 -0
  51. package/dist/export/getFields.d.ts +8 -2
  52. package/dist/export/getFields.d.ts.map +1 -1
  53. package/dist/export/getFields.js +7 -9
  54. package/dist/export/getFields.js.map +1 -1
  55. package/dist/export/handleDownload.d.ts +3 -0
  56. package/dist/export/handleDownload.d.ts.map +1 -0
  57. package/dist/export/{download.js → handleDownload.js} +7 -6
  58. package/dist/export/handleDownload.js.map +1 -0
  59. package/dist/export/handlePreview.d.ts +3 -0
  60. package/dist/export/handlePreview.d.ts.map +1 -0
  61. package/dist/export/handlePreview.js +163 -0
  62. package/dist/export/handlePreview.js.map +1 -0
  63. package/dist/exports/rsc.d.ts +5 -1
  64. package/dist/exports/rsc.d.ts.map +1 -1
  65. package/dist/exports/rsc.js +5 -1
  66. package/dist/exports/rsc.js.map +1 -1
  67. package/dist/import/batchProcessor.d.ts +46 -0
  68. package/dist/import/batchProcessor.d.ts.map +1 -0
  69. package/dist/import/batchProcessor.js +529 -0
  70. package/dist/import/batchProcessor.js.map +1 -0
  71. package/dist/import/createImport.d.ts +45 -0
  72. package/dist/import/createImport.d.ts.map +1 -0
  73. package/dist/import/createImport.js +175 -0
  74. package/dist/import/createImport.js.map +1 -0
  75. package/dist/import/getCreateImportCollectionTask.d.ts +13 -0
  76. package/dist/import/getCreateImportCollectionTask.d.ts.map +1 -0
  77. package/dist/import/getCreateImportCollectionTask.js +81 -0
  78. package/dist/import/getCreateImportCollectionTask.js.map +1 -0
  79. package/dist/import/getFields.d.ts +7 -0
  80. package/dist/import/getFields.d.ts.map +1 -0
  81. package/dist/import/getFields.js +150 -0
  82. package/dist/import/getFields.js.map +1 -0
  83. package/dist/import/getImportCollection.d.ts +8 -0
  84. package/dist/import/getImportCollection.d.ts.map +1 -0
  85. package/dist/import/getImportCollection.js +258 -0
  86. package/dist/import/getImportCollection.js.map +1 -0
  87. package/dist/import/handlePreview.d.ts +3 -0
  88. package/dist/import/handlePreview.d.ts.map +1 -0
  89. package/dist/import/handlePreview.js +94 -0
  90. package/dist/import/handlePreview.js.map +1 -0
  91. package/dist/index.d.ts +3 -2
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +68 -110
  94. package/dist/index.js.map +1 -1
  95. package/dist/translations/languages/ar.d.ts.map +1 -1
  96. package/dist/translations/languages/ar.js +21 -1
  97. package/dist/translations/languages/ar.js.map +1 -1
  98. package/dist/translations/languages/az.d.ts.map +1 -1
  99. package/dist/translations/languages/az.js +21 -1
  100. package/dist/translations/languages/az.js.map +1 -1
  101. package/dist/translations/languages/bg.d.ts.map +1 -1
  102. package/dist/translations/languages/bg.js +21 -1
  103. package/dist/translations/languages/bg.js.map +1 -1
  104. package/dist/translations/languages/bnBd.d.ts +4 -0
  105. package/dist/translations/languages/bnBd.d.ts.map +1 -0
  106. package/dist/translations/languages/bnBd.js +48 -0
  107. package/dist/translations/languages/bnBd.js.map +1 -0
  108. package/dist/translations/languages/bnIn.d.ts +4 -0
  109. package/dist/translations/languages/bnIn.d.ts.map +1 -0
  110. package/dist/translations/languages/bnIn.js +48 -0
  111. package/dist/translations/languages/bnIn.js.map +1 -0
  112. package/dist/translations/languages/ca.d.ts.map +1 -1
  113. package/dist/translations/languages/ca.js +21 -1
  114. package/dist/translations/languages/ca.js.map +1 -1
  115. package/dist/translations/languages/cs.d.ts.map +1 -1
  116. package/dist/translations/languages/cs.js +21 -1
  117. package/dist/translations/languages/cs.js.map +1 -1
  118. package/dist/translations/languages/da.d.ts.map +1 -1
  119. package/dist/translations/languages/da.js +21 -1
  120. package/dist/translations/languages/da.js.map +1 -1
  121. package/dist/translations/languages/de.d.ts.map +1 -1
  122. package/dist/translations/languages/de.js +21 -1
  123. package/dist/translations/languages/de.js.map +1 -1
  124. package/dist/translations/languages/en.d.ts +20 -0
  125. package/dist/translations/languages/en.d.ts.map +1 -1
  126. package/dist/translations/languages/en.js +21 -1
  127. package/dist/translations/languages/en.js.map +1 -1
  128. package/dist/translations/languages/es.d.ts.map +1 -1
  129. package/dist/translations/languages/es.js +21 -1
  130. package/dist/translations/languages/es.js.map +1 -1
  131. package/dist/translations/languages/et.d.ts.map +1 -1
  132. package/dist/translations/languages/et.js +21 -1
  133. package/dist/translations/languages/et.js.map +1 -1
  134. package/dist/translations/languages/fa.d.ts.map +1 -1
  135. package/dist/translations/languages/fa.js +21 -1
  136. package/dist/translations/languages/fa.js.map +1 -1
  137. package/dist/translations/languages/fr.d.ts.map +1 -1
  138. package/dist/translations/languages/fr.js +21 -1
  139. package/dist/translations/languages/fr.js.map +1 -1
  140. package/dist/translations/languages/he.d.ts.map +1 -1
  141. package/dist/translations/languages/he.js +21 -1
  142. package/dist/translations/languages/he.js.map +1 -1
  143. package/dist/translations/languages/hr.d.ts.map +1 -1
  144. package/dist/translations/languages/hr.js +21 -1
  145. package/dist/translations/languages/hr.js.map +1 -1
  146. package/dist/translations/languages/hu.d.ts.map +1 -1
  147. package/dist/translations/languages/hu.js +21 -1
  148. package/dist/translations/languages/hu.js.map +1 -1
  149. package/dist/translations/languages/hy.d.ts.map +1 -1
  150. package/dist/translations/languages/hy.js +21 -1
  151. package/dist/translations/languages/hy.js.map +1 -1
  152. package/dist/translations/languages/id.d.ts +4 -0
  153. package/dist/translations/languages/id.d.ts.map +1 -0
  154. package/dist/translations/languages/id.js +48 -0
  155. package/dist/translations/languages/id.js.map +1 -0
  156. package/dist/translations/languages/is.d.ts.map +1 -1
  157. package/dist/translations/languages/is.js +21 -1
  158. package/dist/translations/languages/is.js.map +1 -1
  159. package/dist/translations/languages/it.d.ts.map +1 -1
  160. package/dist/translations/languages/it.js +21 -1
  161. package/dist/translations/languages/it.js.map +1 -1
  162. package/dist/translations/languages/ja.d.ts.map +1 -1
  163. package/dist/translations/languages/ja.js +21 -1
  164. package/dist/translations/languages/ja.js.map +1 -1
  165. package/dist/translations/languages/ko.d.ts.map +1 -1
  166. package/dist/translations/languages/ko.js +21 -1
  167. package/dist/translations/languages/ko.js.map +1 -1
  168. package/dist/translations/languages/lt.d.ts.map +1 -1
  169. package/dist/translations/languages/lt.js +21 -1
  170. package/dist/translations/languages/lt.js.map +1 -1
  171. package/dist/translations/languages/lv.d.ts.map +1 -1
  172. package/dist/translations/languages/lv.js +26 -6
  173. package/dist/translations/languages/lv.js.map +1 -1
  174. package/dist/translations/languages/my.d.ts.map +1 -1
  175. package/dist/translations/languages/my.js +21 -1
  176. package/dist/translations/languages/my.js.map +1 -1
  177. package/dist/translations/languages/nb.d.ts.map +1 -1
  178. package/dist/translations/languages/nb.js +21 -1
  179. package/dist/translations/languages/nb.js.map +1 -1
  180. package/dist/translations/languages/nl.d.ts.map +1 -1
  181. package/dist/translations/languages/nl.js +21 -1
  182. package/dist/translations/languages/nl.js.map +1 -1
  183. package/dist/translations/languages/pl.d.ts.map +1 -1
  184. package/dist/translations/languages/pl.js +21 -1
  185. package/dist/translations/languages/pl.js.map +1 -1
  186. package/dist/translations/languages/pt.d.ts.map +1 -1
  187. package/dist/translations/languages/pt.js +21 -1
  188. package/dist/translations/languages/pt.js.map +1 -1
  189. package/dist/translations/languages/ro.d.ts.map +1 -1
  190. package/dist/translations/languages/ro.js +21 -1
  191. package/dist/translations/languages/ro.js.map +1 -1
  192. package/dist/translations/languages/rs.d.ts.map +1 -1
  193. package/dist/translations/languages/rs.js +21 -1
  194. package/dist/translations/languages/rs.js.map +1 -1
  195. package/dist/translations/languages/rsLatin.d.ts.map +1 -1
  196. package/dist/translations/languages/rsLatin.js +21 -1
  197. package/dist/translations/languages/rsLatin.js.map +1 -1
  198. package/dist/translations/languages/ru.d.ts.map +1 -1
  199. package/dist/translations/languages/ru.js +21 -1
  200. package/dist/translations/languages/ru.js.map +1 -1
  201. package/dist/translations/languages/sk.d.ts.map +1 -1
  202. package/dist/translations/languages/sk.js +21 -1
  203. package/dist/translations/languages/sk.js.map +1 -1
  204. package/dist/translations/languages/sl.d.ts.map +1 -1
  205. package/dist/translations/languages/sl.js +21 -1
  206. package/dist/translations/languages/sl.js.map +1 -1
  207. package/dist/translations/languages/sv.d.ts.map +1 -1
  208. package/dist/translations/languages/sv.js +21 -1
  209. package/dist/translations/languages/sv.js.map +1 -1
  210. package/dist/translations/languages/ta.d.ts.map +1 -1
  211. package/dist/translations/languages/ta.js +21 -1
  212. package/dist/translations/languages/ta.js.map +1 -1
  213. package/dist/translations/languages/th.d.ts.map +1 -1
  214. package/dist/translations/languages/th.js +21 -1
  215. package/dist/translations/languages/th.js.map +1 -1
  216. package/dist/translations/languages/tr.d.ts.map +1 -1
  217. package/dist/translations/languages/tr.js +21 -1
  218. package/dist/translations/languages/tr.js.map +1 -1
  219. package/dist/translations/languages/uk.d.ts.map +1 -1
  220. package/dist/translations/languages/uk.js +21 -1
  221. package/dist/translations/languages/uk.js.map +1 -1
  222. package/dist/translations/languages/vi.d.ts.map +1 -1
  223. package/dist/translations/languages/vi.js +21 -1
  224. package/dist/translations/languages/vi.js.map +1 -1
  225. package/dist/translations/languages/zh.d.ts.map +1 -1
  226. package/dist/translations/languages/zh.js +21 -1
  227. package/dist/translations/languages/zh.js.map +1 -1
  228. package/dist/translations/languages/zhTw.d.ts.map +1 -1
  229. package/dist/translations/languages/zhTw.js +21 -1
  230. package/dist/translations/languages/zhTw.js.map +1 -1
  231. package/dist/translations/types.d.ts +13 -0
  232. package/dist/translations/types.d.ts.map +1 -1
  233. package/dist/translations/types.js.map +1 -1
  234. package/dist/types.d.ts +166 -22
  235. package/dist/types.d.ts.map +1 -1
  236. package/dist/types.js +1 -1
  237. package/dist/types.js.map +1 -1
  238. package/dist/utilities/flattenObject.d.ts.map +1 -0
  239. package/dist/{export → utilities}/flattenObject.js +13 -6
  240. package/dist/utilities/flattenObject.js.map +1 -0
  241. package/dist/utilities/getExportFieldFunctions.d.ts +12 -0
  242. package/dist/utilities/getExportFieldFunctions.d.ts.map +1 -0
  243. package/dist/{export/getCustomFieldFunctions.js → utilities/getExportFieldFunctions.js} +18 -2
  244. package/dist/utilities/getExportFieldFunctions.js.map +1 -0
  245. package/dist/utilities/getFilename.d.ts +6 -0
  246. package/dist/utilities/getFilename.d.ts.map +1 -0
  247. package/dist/{export → utilities}/getFilename.js +4 -1
  248. package/dist/utilities/getFilename.js.map +1 -0
  249. package/dist/utilities/getFlattenedFieldKeys.d.ts +12 -1
  250. package/dist/utilities/getFlattenedFieldKeys.d.ts.map +1 -1
  251. package/dist/utilities/getFlattenedFieldKeys.js +35 -10
  252. package/dist/utilities/getFlattenedFieldKeys.js.map +1 -1
  253. package/dist/utilities/getImportFieldFunctions.d.ts +12 -0
  254. package/dist/utilities/getImportFieldFunctions.d.ts.map +1 -0
  255. package/dist/utilities/getImportFieldFunctions.js +130 -0
  256. package/dist/utilities/getImportFieldFunctions.js.map +1 -0
  257. package/dist/utilities/getPluginCollections.d.ts +39 -0
  258. package/dist/utilities/getPluginCollections.d.ts.map +1 -0
  259. package/dist/utilities/getPluginCollections.js +102 -0
  260. package/dist/utilities/getPluginCollections.js.map +1 -0
  261. package/dist/utilities/getSchemaColumns.d.ts +43 -0
  262. package/dist/utilities/getSchemaColumns.d.ts.map +1 -0
  263. package/dist/utilities/getSchemaColumns.js +163 -0
  264. package/dist/utilities/getSchemaColumns.js.map +1 -0
  265. package/dist/utilities/getSelect.d.ts +11 -0
  266. package/dist/utilities/getSelect.d.ts.map +1 -0
  267. package/dist/{export → utilities}/getSelect.js +6 -2
  268. package/dist/utilities/getSelect.js.map +1 -0
  269. package/dist/utilities/parseCSV.d.ts +11 -0
  270. package/dist/utilities/parseCSV.d.ts.map +1 -0
  271. package/dist/utilities/parseCSV.js +67 -0
  272. package/dist/utilities/parseCSV.js.map +1 -0
  273. package/dist/utilities/parseCSV.spec.js +169 -0
  274. package/dist/utilities/parseCSV.spec.js.map +1 -0
  275. package/dist/utilities/parseJSON.d.ts +11 -0
  276. package/dist/utilities/parseJSON.d.ts.map +1 -0
  277. package/dist/utilities/parseJSON.js +25 -0
  278. package/dist/utilities/parseJSON.js.map +1 -0
  279. package/dist/utilities/processRichTextField.d.ts +6 -0
  280. package/dist/utilities/processRichTextField.d.ts.map +1 -0
  281. package/dist/utilities/processRichTextField.js +45 -0
  282. package/dist/utilities/processRichTextField.js.map +1 -0
  283. package/dist/utilities/unflattenObject.d.ts +11 -0
  284. package/dist/utilities/unflattenObject.d.ts.map +1 -0
  285. package/dist/utilities/unflattenObject.js +431 -0
  286. package/dist/utilities/unflattenObject.js.map +1 -0
  287. package/dist/utilities/unflattenObject.spec.js +680 -0
  288. package/dist/utilities/unflattenObject.spec.js.map +1 -0
  289. package/dist/utilities/useBatchProcessor.d.ts +103 -0
  290. package/dist/utilities/useBatchProcessor.d.ts.map +1 -0
  291. package/dist/utilities/useBatchProcessor.js +88 -0
  292. package/dist/utilities/useBatchProcessor.js.map +1 -0
  293. package/dist/utilities/validateLimitValue.d.ts +1 -1
  294. package/dist/utilities/validateLimitValue.d.ts.map +1 -1
  295. package/dist/utilities/validateLimitValue.js +1 -4
  296. package/dist/utilities/validateLimitValue.js.map +1 -1
  297. package/package.json +9 -9
  298. package/dist/components/ExportListMenuItem/index.scss +0 -52
  299. package/dist/components/Preview/index.d.ts +0 -4
  300. package/dist/components/Preview/index.d.ts.map +0 -1
  301. package/dist/components/Preview/index.js +0 -180
  302. package/dist/components/Preview/index.js.map +0 -1
  303. package/dist/components/Preview/index.scss +0 -8
  304. package/dist/export/download.d.ts +0 -3
  305. package/dist/export/download.d.ts.map +0 -1
  306. package/dist/export/download.js.map +0 -1
  307. package/dist/export/flattenObject.d.ts.map +0 -1
  308. package/dist/export/flattenObject.js.map +0 -1
  309. package/dist/export/getCustomFieldFunctions.d.ts +0 -8
  310. package/dist/export/getCustomFieldFunctions.d.ts.map +0 -1
  311. package/dist/export/getCustomFieldFunctions.js.map +0 -1
  312. package/dist/export/getFilename.d.ts +0 -2
  313. package/dist/export/getFilename.d.ts.map +0 -1
  314. package/dist/export/getFilename.js.map +0 -1
  315. package/dist/export/getSelect.d.ts +0 -7
  316. package/dist/export/getSelect.d.ts.map +0 -1
  317. package/dist/export/getSelect.js.map +0 -1
  318. package/dist/getExportCollection.d.ts +0 -7
  319. package/dist/getExportCollection.d.ts.map +0 -1
  320. package/dist/getExportCollection.js +0 -86
  321. package/dist/getExportCollection.js.map +0 -1
  322. /package/dist/{export → utilities}/flattenObject.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/unflattenObject.spec.ts"],"sourcesContent":["import { FlattenedField, PayloadRequest } from 'payload'\n\nimport { unflattenObject } from './unflattenObject.js'\n\nimport { describe, it, expect, vi } from 'vitest'\n\ndescribe('unflattenObject', () => {\n const mockReq = {\n payload: {\n logger: {\n error: vi.fn(),\n },\n },\n } as unknown as PayloadRequest\n\n describe('hasMany number fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'hasManyNumber',\n type: 'number',\n hasMany: true,\n } as FlattenedField,\n ]\n\n it('should handle comma-separated number strings', () => {\n const data = {\n hasManyNumber: '1,2,3,5,8',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 2, 3, 5, 8],\n })\n })\n\n it('should handle comma-separated numbers with spaces', () => {\n const data = {\n hasManyNumber: ' 10 , 20 , 30 ',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [10, 20, 30],\n })\n })\n\n it('should filter out empty values in comma-separated strings', () => {\n const data = {\n hasManyNumber: '1,,3,,5',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 3, 5],\n })\n })\n\n it('should handle single number values', () => {\n const data = {\n hasManyNumber: 42,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [42],\n })\n })\n\n it('should handle single string number values', () => {\n const data = {\n hasManyNumber: '42',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [42],\n })\n })\n\n it('should handle indexed array format', () => {\n const data = {\n hasManyNumber_0: 1,\n hasManyNumber_1: 2,\n hasManyNumber_2: 3,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 2, 3],\n })\n })\n\n it('should filter out null and empty values from indexed arrays', () => {\n const data = {\n hasManyNumber_0: 1,\n hasManyNumber_1: null,\n hasManyNumber_2: '',\n hasManyNumber_3: 3,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyNumber: [1, 3],\n })\n })\n\n it('should handle empty, null, and undefined values', () => {\n // explicit null gets converted to empty array in postProcess for hasMany\n expect(unflattenObject({ data: { hasManyNumber: null }, fields, req: mockReq })).toEqual({\n hasManyNumber: [],\n })\n // undefined is skipped entirely (preserves existing data)\n expect(unflattenObject({ data: { hasManyNumber: undefined }, fields, req: mockReq })).toEqual(\n {},\n )\n })\n })\n\n describe('hasMany relationship fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'hasManyRelationship',\n type: 'relationship',\n hasMany: true,\n relationTo: 'posts',\n } as FlattenedField,\n ]\n\n it('should handle comma-separated ID strings', () => {\n const data = {\n hasManyRelationship: 'id1,id2,id3',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id2', 'id3'],\n })\n })\n\n it('should handle comma-separated IDs with spaces', () => {\n const data = {\n hasManyRelationship: ' id1 , id2 , id3 ',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id2', 'id3'],\n })\n })\n\n it('should filter out empty values in comma-separated IDs', () => {\n const data = {\n hasManyRelationship: 'id1,,id3,,id5',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id3', 'id5'],\n })\n })\n\n it('should handle single ID values', () => {\n const data = {\n hasManyRelationship: 'singleId',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['singleId'],\n })\n })\n\n it('should handle indexed array format', () => {\n const data = {\n hasManyRelationship_0: 'id1',\n hasManyRelationship_1: 'id2',\n hasManyRelationship_2: 'id3',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['id1', 'id2', 'id3'],\n })\n })\n\n it('should handle MongoDB ObjectIDs', () => {\n const data = {\n hasManyRelationship: '507f1f77bcf86cd799439011,507f191e810c19729de860ea',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n hasManyRelationship: ['507f1f77bcf86cd799439011', '507f191e810c19729de860ea'],\n })\n })\n })\n\n describe('localized fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'title',\n type: 'text',\n localized: true,\n } as FlattenedField,\n ]\n\n it('should transform locale-specific keys to nested structure', () => {\n const data = {\n title_en: 'English Title',\n title_es: 'Título en Español',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n title: {\n en: 'English Title',\n es: 'Título en Español',\n },\n })\n })\n\n it('should handle missing locales', () => {\n const data = {\n title_en: 'English Title',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n title: {\n en: 'English Title',\n },\n })\n })\n })\n\n describe('blocks fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'blocks',\n type: 'blocks',\n } as FlattenedField,\n ]\n\n it('should handle block fields with blockType', () => {\n const data = {\n blocks_0_hero_title: 'Hero Title',\n blocks_0_hero_subtitle: 'Hero Subtitle',\n blocks_0_hero_blockType: 'hero',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n blocks: [\n {\n blockType: 'hero',\n title: 'Hero Title',\n subtitle: 'Hero Subtitle',\n },\n ],\n })\n })\n\n it('should handle multiple blocks', () => {\n const data = {\n blocks_0_hero_title: 'Hero Title',\n blocks_0_hero_blockType: 'hero',\n blocks_1_text_content: 'Text Content',\n blocks_1_text_blockType: 'text',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n blocks: [\n {\n blockType: 'hero',\n title: 'Hero Title',\n },\n {\n blockType: 'text',\n content: 'Text Content',\n },\n ],\n })\n })\n })\n\n describe('array fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'items',\n type: 'array',\n } as FlattenedField,\n ]\n\n it('should handle indexed array objects', () => {\n const data = {\n items_0_name: 'Item 1',\n items_0_value: 10,\n items_1_name: 'Item 2',\n items_1_value: 20,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n items: [\n { name: 'Item 1', value: 10 },\n { name: 'Item 2', value: 20 },\n ],\n })\n })\n\n it('should handle sparse arrays', () => {\n const data = {\n items_0_name: 'Item 1',\n items_2_name: 'Item 3',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n items: [{ name: 'Item 1' }, null, { name: 'Item 3' }],\n })\n })\n })\n\n describe('group fields', () => {\n const fields: FlattenedField[] = [\n {\n name: 'group',\n type: 'group',\n } as FlattenedField,\n ]\n\n it('should handle nested group fields', () => {\n const data = {\n group_field1: 'Value 1',\n group_field2: 'Value 2',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n group: {\n field1: 'Value 1',\n field2: 'Value 2',\n },\n })\n })\n })\n\n describe('polymorphic relationships', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphic',\n type: 'relationship',\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n it('should handle polymorphic relationship with id and relationTo', () => {\n const data = {\n polymorphic_id: '123',\n polymorphic_relationTo: 'posts',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphic: {\n relationTo: 'posts',\n value: '123',\n },\n })\n })\n\n it('should handle explicitly null polymorphic relationships', () => {\n const data = {\n polymorphic_id: null,\n polymorphic_relationTo: null,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphic: null,\n })\n })\n\n it('should skip polymorphic relationships with undefined values', () => {\n const data = {\n polymorphic_id: undefined,\n polymorphic_relationTo: undefined,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n // Both undefined means field is not set (preserves existing data)\n expect(result).toEqual({})\n })\n\n it('should skip polymorphic relationship with undefined id', () => {\n const data = {\n polymorphic_id: undefined,\n polymorphic_relationTo: 'posts',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n // Undefined ID means don't update this field\n expect(result).toEqual({})\n })\n\n it('should skip polymorphic relationship with undefined relationTo', () => {\n const data = {\n polymorphic_id: '123',\n polymorphic_relationTo: undefined,\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n // Undefined relationTo means don't update this field\n expect(result).toEqual({})\n })\n\n it('should handle polymorphic hasMany relationships', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphicMany',\n type: 'relationship',\n hasMany: true,\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n const data = {\n polymorphicMany_0_id: '123',\n polymorphicMany_0_relationTo: 'posts',\n polymorphicMany_1_id: '456',\n polymorphicMany_1_relationTo: 'pages',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphicMany: [\n {\n relationTo: 'posts',\n value: '123',\n },\n {\n relationTo: 'pages',\n value: '456',\n },\n ],\n })\n })\n\n it('should filter out empty polymorphic hasMany items', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphicMany',\n type: 'relationship',\n hasMany: true,\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n const data = {\n polymorphicMany_0_id: '123',\n polymorphicMany_0_relationTo: 'posts',\n polymorphicMany_1_id: null,\n polymorphicMany_1_relationTo: null,\n polymorphicMany_2_id: '456',\n polymorphicMany_2_relationTo: 'pages',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphicMany: [\n {\n relationTo: 'posts',\n value: '123',\n },\n {\n relationTo: 'pages',\n value: '456',\n },\n ],\n })\n })\n\n it('should handle all empty polymorphic hasMany items', () => {\n const fields: FlattenedField[] = [\n {\n name: 'polymorphicMany',\n type: 'relationship',\n hasMany: true,\n relationTo: ['posts', 'pages'],\n } as FlattenedField,\n ]\n\n const data = {\n polymorphicMany_0_id: null,\n polymorphicMany_0_relationTo: null,\n polymorphicMany_1_id: '',\n polymorphicMany_1_relationTo: '',\n }\n\n const result = unflattenObject({ data, fields, req: mockReq })\n\n expect(result).toEqual({\n polymorphicMany: [],\n })\n })\n })\n\n describe('edge cases', () => {\n it('should handle empty data', () => {\n const result = unflattenObject({ data: {}, fields: [], req: mockReq })\n expect(result).toEqual({})\n })\n\n it('should handle null data', () => {\n const result = unflattenObject({ data: null as any, fields: [], req: mockReq })\n expect(result).toEqual({})\n })\n\n it('should handle undefined values', () => {\n const data = {\n field1: undefined,\n field2: 'value',\n }\n\n const result = unflattenObject({ data, fields: [], req: mockReq })\n expect(result).toEqual({ field2: 'value' })\n })\n\n it('should preserve null values for validation', () => {\n const data = {\n field1: null,\n field2: 'value',\n }\n\n const result = unflattenObject({ data, fields: [], req: mockReq })\n // null values are preserved for validation\n expect(result).toEqual({ field1: null, field2: 'value' })\n })\n })\n})\n"],"names":["unflattenObject","describe","it","expect","vi","mockReq","payload","logger","error","fn","fields","name","type","hasMany","data","hasManyNumber","result","req","toEqual","hasManyNumber_0","hasManyNumber_1","hasManyNumber_2","hasManyNumber_3","undefined","relationTo","hasManyRelationship","hasManyRelationship_0","hasManyRelationship_1","hasManyRelationship_2","localized","title_en","title_es","title","en","es","blocks_0_hero_title","blocks_0_hero_subtitle","blocks_0_hero_blockType","blocks","blockType","subtitle","blocks_1_text_content","blocks_1_text_blockType","content","items_0_name","items_0_value","items_1_name","items_1_value","items","value","items_2_name","group_field1","group_field2","group","field1","field2","polymorphic_id","polymorphic_relationTo","polymorphic","polymorphicMany_0_id","polymorphicMany_0_relationTo","polymorphicMany_1_id","polymorphicMany_1_relationTo","polymorphicMany","polymorphicMany_2_id","polymorphicMany_2_relationTo"],"mappings":"AAEA,SAASA,eAAe,QAAQ,uBAAsB;AAEtD,SAASC,QAAQ,EAAEC,EAAE,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAEjDH,SAAS,mBAAmB;IAC1B,MAAMI,UAAU;QACdC,SAAS;YACPC,QAAQ;gBACNC,OAAOJ,GAAGK,EAAE;YACd;QACF;IACF;IAEAR,SAAS,yBAAyB;QAChC,MAAMS,SAA2B;YAC/B;gBACEC,MAAM;gBACNC,MAAM;gBACNC,SAAS;YACX;SACD;QAEDX,GAAG,gDAAgD;YACjD,MAAMY,OAAO;gBACXC,eAAe;YACjB;YAEA,MAAMC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBH,eAAe;oBAAC;oBAAG;oBAAG;oBAAG;oBAAG;iBAAE;YAChC;QACF;QAEAb,GAAG,qDAAqD;YACtD,MAAMY,OAAO;gBACXC,eAAe;YACjB;YAEA,MAAMC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBH,eAAe;oBAAC;oBAAI;oBAAI;iBAAG;YAC7B;QACF;QAEAb,GAAG,6DAA6D;YAC9D,MAAMY,OAAO;gBACXC,eAAe;YACjB;YAEA,MAAMC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBH,eAAe;oBAAC;oBAAG;oBAAG;iBAAE;YAC1B;QACF;QAEAb,GAAG,sCAAsC;YACvC,MAAMY,OAAO;gBACXC,eAAe;YACjB;YAEA,MAAMC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBH,eAAe;oBAAC;iBAAG;YACrB;QACF;QAEAb,GAAG,6CAA6C;YAC9C,MAAMY,OAAO;gBACXC,eAAe;YACjB;YAEA,MAAMC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBH,eAAe;oBAAC;iBAAG;YACrB;QACF;QAEAb,GAAG,sCAAsC;YACvC,MAAMY,OAAO;gBACXK,iBAAiB;gBACjBC,iBAAiB;gBACjBC,iBAAiB;YACnB;YAEA,MAAML,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBH,eAAe;oBAAC;oBAAG;oBAAG;iBAAE;YAC1B;QACF;QAEAb,GAAG,+DAA+D;YAChE,MAAMY,OAAO;gBACXK,iBAAiB;gBACjBC,iBAAiB;gBACjBC,iBAAiB;gBACjBC,iBAAiB;YACnB;YAEA,MAAMN,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBH,eAAe;oBAAC;oBAAG;iBAAE;YACvB;QACF;QAEAb,GAAG,mDAAmD;YACpD,yEAAyE;YACzEC,OAAOH,gBAAgB;gBAAEc,MAAM;oBAAEC,eAAe;gBAAK;gBAAGL;gBAAQO,KAAKZ;YAAQ,IAAIa,OAAO,CAAC;gBACvFH,eAAe,EAAE;YACnB;YACA,0DAA0D;YAC1DZ,OAAOH,gBAAgB;gBAAEc,MAAM;oBAAEC,eAAeQ;gBAAU;gBAAGb;gBAAQO,KAAKZ;YAAQ,IAAIa,OAAO,CAC3F,CAAC;QAEL;IACF;IAEAjB,SAAS,+BAA+B;QACtC,MAAMS,SAA2B;YAC/B;gBACEC,MAAM;gBACNC,MAAM;gBACNC,SAAS;gBACTW,YAAY;YACd;SACD;QAEDtB,GAAG,4CAA4C;YAC7C,MAAMY,OAAO;gBACXW,qBAAqB;YACvB;YAEA,MAAMT,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBO,qBAAqB;oBAAC;oBAAO;oBAAO;iBAAM;YAC5C;QACF;QAEAvB,GAAG,iDAAiD;YAClD,MAAMY,OAAO;gBACXW,qBAAqB;YACvB;YAEA,MAAMT,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBO,qBAAqB;oBAAC;oBAAO;oBAAO;iBAAM;YAC5C;QACF;QAEAvB,GAAG,yDAAyD;YAC1D,MAAMY,OAAO;gBACXW,qBAAqB;YACvB;YAEA,MAAMT,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBO,qBAAqB;oBAAC;oBAAO;oBAAO;iBAAM;YAC5C;QACF;QAEAvB,GAAG,kCAAkC;YACnC,MAAMY,OAAO;gBACXW,qBAAqB;YACvB;YAEA,MAAMT,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBO,qBAAqB;oBAAC;iBAAW;YACnC;QACF;QAEAvB,GAAG,sCAAsC;YACvC,MAAMY,OAAO;gBACXY,uBAAuB;gBACvBC,uBAAuB;gBACvBC,uBAAuB;YACzB;YAEA,MAAMZ,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBO,qBAAqB;oBAAC;oBAAO;oBAAO;iBAAM;YAC5C;QACF;QAEAvB,GAAG,mCAAmC;YACpC,MAAMY,OAAO;gBACXW,qBAAqB;YACvB;YAEA,MAAMT,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBO,qBAAqB;oBAAC;oBAA4B;iBAA2B;YAC/E;QACF;IACF;IAEAxB,SAAS,oBAAoB;QAC3B,MAAMS,SAA2B;YAC/B;gBACEC,MAAM;gBACNC,MAAM;gBACNiB,WAAW;YACb;SACD;QAED3B,GAAG,6DAA6D;YAC9D,MAAMY,OAAO;gBACXgB,UAAU;gBACVC,UAAU;YACZ;YAEA,MAAMf,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBc,OAAO;oBACLC,IAAI;oBACJC,IAAI;gBACN;YACF;QACF;QAEAhC,GAAG,iCAAiC;YAClC,MAAMY,OAAO;gBACXgB,UAAU;YACZ;YAEA,MAAMd,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBc,OAAO;oBACLC,IAAI;gBACN;YACF;QACF;IACF;IAEAhC,SAAS,iBAAiB;QACxB,MAAMS,SAA2B;YAC/B;gBACEC,MAAM;gBACNC,MAAM;YACR;SACD;QAEDV,GAAG,6CAA6C;YAC9C,MAAMY,OAAO;gBACXqB,qBAAqB;gBACrBC,wBAAwB;gBACxBC,yBAAyB;YAC3B;YAEA,MAAMrB,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBoB,QAAQ;oBACN;wBACEC,WAAW;wBACXP,OAAO;wBACPQ,UAAU;oBACZ;iBACD;YACH;QACF;QAEAtC,GAAG,iCAAiC;YAClC,MAAMY,OAAO;gBACXqB,qBAAqB;gBACrBE,yBAAyB;gBACzBI,uBAAuB;gBACvBC,yBAAyB;YAC3B;YAEA,MAAM1B,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBoB,QAAQ;oBACN;wBACEC,WAAW;wBACXP,OAAO;oBACT;oBACA;wBACEO,WAAW;wBACXI,SAAS;oBACX;iBACD;YACH;QACF;IACF;IAEA1C,SAAS,gBAAgB;QACvB,MAAMS,SAA2B;YAC/B;gBACEC,MAAM;gBACNC,MAAM;YACR;SACD;QAEDV,GAAG,uCAAuC;YACxC,MAAMY,OAAO;gBACX8B,cAAc;gBACdC,eAAe;gBACfC,cAAc;gBACdC,eAAe;YACjB;YAEA,MAAM/B,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrB8B,OAAO;oBACL;wBAAErC,MAAM;wBAAUsC,OAAO;oBAAG;oBAC5B;wBAAEtC,MAAM;wBAAUsC,OAAO;oBAAG;iBAC7B;YACH;QACF;QAEA/C,GAAG,+BAA+B;YAChC,MAAMY,OAAO;gBACX8B,cAAc;gBACdM,cAAc;YAChB;YAEA,MAAMlC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrB8B,OAAO;oBAAC;wBAAErC,MAAM;oBAAS;oBAAG;oBAAM;wBAAEA,MAAM;oBAAS;iBAAE;YACvD;QACF;IACF;IAEAV,SAAS,gBAAgB;QACvB,MAAMS,SAA2B;YAC/B;gBACEC,MAAM;gBACNC,MAAM;YACR;SACD;QAEDV,GAAG,qCAAqC;YACtC,MAAMY,OAAO;gBACXqC,cAAc;gBACdC,cAAc;YAChB;YAEA,MAAMpC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBmC,OAAO;oBACLC,QAAQ;oBACRC,QAAQ;gBACV;YACF;QACF;IACF;IAEAtD,SAAS,6BAA6B;QACpC,MAAMS,SAA2B;YAC/B;gBACEC,MAAM;gBACNC,MAAM;gBACNY,YAAY;oBAAC;oBAAS;iBAAQ;YAChC;SACD;QAEDtB,GAAG,iEAAiE;YAClE,MAAMY,OAAO;gBACX0C,gBAAgB;gBAChBC,wBAAwB;YAC1B;YAEA,MAAMzC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBwC,aAAa;oBACXlC,YAAY;oBACZyB,OAAO;gBACT;YACF;QACF;QAEA/C,GAAG,2DAA2D;YAC5D,MAAMY,OAAO;gBACX0C,gBAAgB;gBAChBC,wBAAwB;YAC1B;YAEA,MAAMzC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrBwC,aAAa;YACf;QACF;QAEAxD,GAAG,+DAA+D;YAChE,MAAMY,OAAO;gBACX0C,gBAAgBjC;gBAChBkC,wBAAwBlC;YAC1B;YAEA,MAAMP,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5D,kEAAkE;YAClEF,OAAOa,QAAQE,OAAO,CAAC,CAAC;QAC1B;QAEAhB,GAAG,0DAA0D;YAC3D,MAAMY,OAAO;gBACX0C,gBAAgBjC;gBAChBkC,wBAAwB;YAC1B;YAEA,MAAMzC,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5D,6CAA6C;YAC7CF,OAAOa,QAAQE,OAAO,CAAC,CAAC;QAC1B;QAEAhB,GAAG,kEAAkE;YACnE,MAAMY,OAAO;gBACX0C,gBAAgB;gBAChBC,wBAAwBlC;YAC1B;YAEA,MAAMP,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5D,qDAAqD;YACrDF,OAAOa,QAAQE,OAAO,CAAC,CAAC;QAC1B;QAEAhB,GAAG,mDAAmD;YACpD,MAAMQ,SAA2B;gBAC/B;oBACEC,MAAM;oBACNC,MAAM;oBACNC,SAAS;oBACTW,YAAY;wBAAC;wBAAS;qBAAQ;gBAChC;aACD;YAED,MAAMV,OAAO;gBACX6C,sBAAsB;gBACtBC,8BAA8B;gBAC9BC,sBAAsB;gBACtBC,8BAA8B;YAChC;YAEA,MAAM9C,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrB6C,iBAAiB;oBACf;wBACEvC,YAAY;wBACZyB,OAAO;oBACT;oBACA;wBACEzB,YAAY;wBACZyB,OAAO;oBACT;iBACD;YACH;QACF;QAEA/C,GAAG,qDAAqD;YACtD,MAAMQ,SAA2B;gBAC/B;oBACEC,MAAM;oBACNC,MAAM;oBACNC,SAAS;oBACTW,YAAY;wBAAC;wBAAS;qBAAQ;gBAChC;aACD;YAED,MAAMV,OAAO;gBACX6C,sBAAsB;gBACtBC,8BAA8B;gBAC9BC,sBAAsB;gBACtBC,8BAA8B;gBAC9BE,sBAAsB;gBACtBC,8BAA8B;YAChC;YAEA,MAAMjD,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrB6C,iBAAiB;oBACf;wBACEvC,YAAY;wBACZyB,OAAO;oBACT;oBACA;wBACEzB,YAAY;wBACZyB,OAAO;oBACT;iBACD;YACH;QACF;QAEA/C,GAAG,qDAAqD;YACtD,MAAMQ,SAA2B;gBAC/B;oBACEC,MAAM;oBACNC,MAAM;oBACNC,SAAS;oBACTW,YAAY;wBAAC;wBAAS;qBAAQ;gBAChC;aACD;YAED,MAAMV,OAAO;gBACX6C,sBAAsB;gBACtBC,8BAA8B;gBAC9BC,sBAAsB;gBACtBC,8BAA8B;YAChC;YAEA,MAAM9C,SAAShB,gBAAgB;gBAAEc;gBAAMJ;gBAAQO,KAAKZ;YAAQ;YAE5DF,OAAOa,QAAQE,OAAO,CAAC;gBACrB6C,iBAAiB,EAAE;YACrB;QACF;IACF;IAEA9D,SAAS,cAAc;QACrBC,GAAG,4BAA4B;YAC7B,MAAMc,SAAShB,gBAAgB;gBAAEc,MAAM,CAAC;gBAAGJ,QAAQ,EAAE;gBAAEO,KAAKZ;YAAQ;YACpEF,OAAOa,QAAQE,OAAO,CAAC,CAAC;QAC1B;QAEAhB,GAAG,2BAA2B;YAC5B,MAAMc,SAAShB,gBAAgB;gBAAEc,MAAM;gBAAaJ,QAAQ,EAAE;gBAAEO,KAAKZ;YAAQ;YAC7EF,OAAOa,QAAQE,OAAO,CAAC,CAAC;QAC1B;QAEAhB,GAAG,kCAAkC;YACnC,MAAMY,OAAO;gBACXwC,QAAQ/B;gBACRgC,QAAQ;YACV;YAEA,MAAMvC,SAAShB,gBAAgB;gBAAEc;gBAAMJ,QAAQ,EAAE;gBAAEO,KAAKZ;YAAQ;YAChEF,OAAOa,QAAQE,OAAO,CAAC;gBAAEqC,QAAQ;YAAQ;QAC3C;QAEArD,GAAG,8CAA8C;YAC/C,MAAMY,OAAO;gBACXwC,QAAQ;gBACRC,QAAQ;YACV;YAEA,MAAMvC,SAAShB,gBAAgB;gBAAEc;gBAAMJ,QAAQ,EAAE;gBAAEO,KAAKZ;YAAQ;YAChE,2CAA2C;YAC3CF,OAAOa,QAAQE,OAAO,CAAC;gBAAEoC,QAAQ;gBAAMC,QAAQ;YAAQ;QACzD;IACF;AACF"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Generic batch processing utilities for import/export operations.
3
+ * This module provides reusable types and helper functions for processing
4
+ * items in batches with error handling and result aggregation.
5
+ */
6
+ /**
7
+ * Core batch processing options
8
+ */
9
+ export interface BatchProcessorOptions {
10
+ batchSize?: number;
11
+ }
12
+ /**
13
+ * Generic error type for batch operations
14
+ */
15
+ export interface BatchError<TItem = unknown> {
16
+ error: string;
17
+ item: TItem;
18
+ itemIndex: number;
19
+ type: 'custom' | 'database' | 'duplicate' | 'notFound' | 'unknown' | 'validation';
20
+ }
21
+ /**
22
+ * Generic success result for a single item
23
+ */
24
+ export interface BatchItemResult<TItem = unknown, TResult = unknown> {
25
+ index: number;
26
+ item: TItem;
27
+ operation?: string;
28
+ result: TResult;
29
+ }
30
+ /**
31
+ * Result from processing a single batch
32
+ */
33
+ export interface BatchResult<TItem = unknown, TResult = unknown> {
34
+ failed: Array<BatchError<TItem>>;
35
+ successful: Array<BatchItemResult<TItem, TResult>>;
36
+ }
37
+ /**
38
+ * Final aggregated result from processing all batches
39
+ */
40
+ export interface ProcessResult<TItem = unknown> {
41
+ errors: Array<{
42
+ error: string;
43
+ index: number;
44
+ item: TItem;
45
+ }>;
46
+ processedCount: number;
47
+ total: number;
48
+ }
49
+ /**
50
+ * Split an array of items into batches of a specified size.
51
+ *
52
+ * @param items - The array of items to split into batches
53
+ * @param batchSize - The maximum number of items per batch
54
+ * @returns An array of batches, where each batch is an array of items
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * const items = [1, 2, 3, 4, 5];
59
+ * const batches = createBatches(items, 2);
60
+ * // Result: [[1, 2], [3, 4], [5]]
61
+ * ```
62
+ */
63
+ export declare function createBatches<T>(items: T[], batchSize: number): T[][];
64
+ /**
65
+ * Extract a human-readable error message from an unknown error value.
66
+ *
67
+ * @param error - The error value to extract a message from
68
+ * @returns A string representation of the error message
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * extractErrorMessage(new Error('Something went wrong'));
73
+ * // Result: 'Something went wrong'
74
+ *
75
+ * extractErrorMessage({ message: 'Custom error' });
76
+ * // Result: 'Custom error'
77
+ *
78
+ * extractErrorMessage('String error');
79
+ * // Result: 'String error'
80
+ * ```
81
+ */
82
+ export declare function extractErrorMessage(error: unknown): string;
83
+ /**
84
+ * Categorize an error based on its message content.
85
+ * This helps provide more specific error types for better error handling.
86
+ *
87
+ * @param error - The error to categorize
88
+ * @returns The categorized error type
89
+ *
90
+ * @example
91
+ * ```ts
92
+ * categorizeError(new Error('Validation failed'));
93
+ * // Result: 'validation'
94
+ *
95
+ * categorizeError(new Error('Document not found'));
96
+ * // Result: 'notFound'
97
+ *
98
+ * categorizeError(new Error('Duplicate key error'));
99
+ * // Result: 'duplicate'
100
+ * ```
101
+ */
102
+ export declare function categorizeError(error: unknown): BatchError['type'];
103
+ //# sourceMappingURL=useBatchProcessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBatchProcessor.d.ts","sourceRoot":"","sources":["../../src/utilities/useBatchProcessor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,KAAK,GAAG,OAAO;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,KAAK,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAA;CAClF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,KAAK,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAC7D,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IAChC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,KAAK,GAAG,OAAO;IAC5C,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAA;KAAE,CAAC,CAAA;IAC5D,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAMrE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAU1D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAoBlE"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Generic batch processing utilities for import/export operations.
3
+ * This module provides reusable types and helper functions for processing
4
+ * items in batches with error handling and result aggregation.
5
+ */ /**
6
+ * Core batch processing options
7
+ */ /**
8
+ * Split an array of items into batches of a specified size.
9
+ *
10
+ * @param items - The array of items to split into batches
11
+ * @param batchSize - The maximum number of items per batch
12
+ * @returns An array of batches, where each batch is an array of items
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const items = [1, 2, 3, 4, 5];
17
+ * const batches = createBatches(items, 2);
18
+ * // Result: [[1, 2], [3, 4], [5]]
19
+ * ```
20
+ */ export function createBatches(items, batchSize) {
21
+ const batches = [];
22
+ for(let i = 0; i < items.length; i += batchSize){
23
+ batches.push(items.slice(i, i + batchSize));
24
+ }
25
+ return batches;
26
+ }
27
+ /**
28
+ * Extract a human-readable error message from an unknown error value.
29
+ *
30
+ * @param error - The error value to extract a message from
31
+ * @returns A string representation of the error message
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * extractErrorMessage(new Error('Something went wrong'));
36
+ * // Result: 'Something went wrong'
37
+ *
38
+ * extractErrorMessage({ message: 'Custom error' });
39
+ * // Result: 'Custom error'
40
+ *
41
+ * extractErrorMessage('String error');
42
+ * // Result: 'String error'
43
+ * ```
44
+ */ export function extractErrorMessage(error) {
45
+ if (error instanceof Error) {
46
+ return error.message;
47
+ }
48
+ if (error && typeof error === 'object' && 'message' in error) {
49
+ return String(error.message);
50
+ }
51
+ return String(error);
52
+ }
53
+ /**
54
+ * Categorize an error based on its message content.
55
+ * This helps provide more specific error types for better error handling.
56
+ *
57
+ * @param error - The error to categorize
58
+ * @returns The categorized error type
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * categorizeError(new Error('Validation failed'));
63
+ * // Result: 'validation'
64
+ *
65
+ * categorizeError(new Error('Document not found'));
66
+ * // Result: 'notFound'
67
+ *
68
+ * categorizeError(new Error('Duplicate key error'));
69
+ * // Result: 'duplicate'
70
+ * ```
71
+ */ export function categorizeError(error) {
72
+ const message = extractErrorMessage(error).toLowerCase();
73
+ if (message.includes('validation')) {
74
+ return 'validation';
75
+ }
76
+ if (message.includes('not found')) {
77
+ return 'notFound';
78
+ }
79
+ if (message.includes('duplicate') || message.includes('unique')) {
80
+ return 'duplicate';
81
+ }
82
+ if (message.includes('database') || message.includes('transaction')) {
83
+ return 'database';
84
+ }
85
+ return 'unknown';
86
+ }
87
+
88
+ //# sourceMappingURL=useBatchProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/useBatchProcessor.ts"],"sourcesContent":["/**\n * Generic batch processing utilities for import/export operations.\n * This module provides reusable types and helper functions for processing\n * items in batches with error handling and result aggregation.\n */\n\n/**\n * Core batch processing options\n */\nexport interface BatchProcessorOptions {\n batchSize?: number\n}\n\n/**\n * Generic error type for batch operations\n */\nexport interface BatchError<TItem = unknown> {\n error: string\n item: TItem\n itemIndex: number\n type: 'custom' | 'database' | 'duplicate' | 'notFound' | 'unknown' | 'validation'\n}\n\n/**\n * Generic success result for a single item\n */\nexport interface BatchItemResult<TItem = unknown, TResult = unknown> {\n index: number\n item: TItem\n operation?: string\n result: TResult\n}\n\n/**\n * Result from processing a single batch\n */\nexport interface BatchResult<TItem = unknown, TResult = unknown> {\n failed: Array<BatchError<TItem>>\n successful: Array<BatchItemResult<TItem, TResult>>\n}\n\n/**\n * Final aggregated result from processing all batches\n */\nexport interface ProcessResult<TItem = unknown> {\n errors: Array<{ error: string; index: number; item: TItem }>\n processedCount: number\n total: number\n}\n\n/**\n * Split an array of items into batches of a specified size.\n *\n * @param items - The array of items to split into batches\n * @param batchSize - The maximum number of items per batch\n * @returns An array of batches, where each batch is an array of items\n *\n * @example\n * ```ts\n * const items = [1, 2, 3, 4, 5];\n * const batches = createBatches(items, 2);\n * // Result: [[1, 2], [3, 4], [5]]\n * ```\n */\nexport function createBatches<T>(items: T[], batchSize: number): T[][] {\n const batches: T[][] = []\n for (let i = 0; i < items.length; i += batchSize) {\n batches.push(items.slice(i, i + batchSize))\n }\n return batches\n}\n\n/**\n * Extract a human-readable error message from an unknown error value.\n *\n * @param error - The error value to extract a message from\n * @returns A string representation of the error message\n *\n * @example\n * ```ts\n * extractErrorMessage(new Error('Something went wrong'));\n * // Result: 'Something went wrong'\n *\n * extractErrorMessage({ message: 'Custom error' });\n * // Result: 'Custom error'\n *\n * extractErrorMessage('String error');\n * // Result: 'String error'\n * ```\n */\nexport function extractErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message\n }\n\n if (error && typeof error === 'object' && 'message' in error) {\n return String(error.message)\n }\n\n return String(error)\n}\n\n/**\n * Categorize an error based on its message content.\n * This helps provide more specific error types for better error handling.\n *\n * @param error - The error to categorize\n * @returns The categorized error type\n *\n * @example\n * ```ts\n * categorizeError(new Error('Validation failed'));\n * // Result: 'validation'\n *\n * categorizeError(new Error('Document not found'));\n * // Result: 'notFound'\n *\n * categorizeError(new Error('Duplicate key error'));\n * // Result: 'duplicate'\n * ```\n */\nexport function categorizeError(error: unknown): BatchError['type'] {\n const message = extractErrorMessage(error).toLowerCase()\n\n if (message.includes('validation')) {\n return 'validation'\n }\n\n if (message.includes('not found')) {\n return 'notFound'\n }\n\n if (message.includes('duplicate') || message.includes('unique')) {\n return 'duplicate'\n }\n\n if (message.includes('database') || message.includes('transaction')) {\n return 'database'\n }\n\n return 'unknown'\n}\n"],"names":["createBatches","items","batchSize","batches","i","length","push","slice","extractErrorMessage","error","Error","message","String","categorizeError","toLowerCase","includes"],"mappings":"AAAA;;;;CAIC,GAED;;CAEC,GA0CD;;;;;;;;;;;;;CAaC,GACD,OAAO,SAASA,cAAiBC,KAAU,EAAEC,SAAiB;IAC5D,MAAMC,UAAiB,EAAE;IACzB,IAAK,IAAIC,IAAI,GAAGA,IAAIH,MAAMI,MAAM,EAAED,KAAKF,UAAW;QAChDC,QAAQG,IAAI,CAACL,MAAMM,KAAK,CAACH,GAAGA,IAAIF;IAClC;IACA,OAAOC;AACT;AAEA;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,SAASK,oBAAoBC,KAAc;IAChD,IAAIA,iBAAiBC,OAAO;QAC1B,OAAOD,MAAME,OAAO;IACtB;IAEA,IAAIF,SAAS,OAAOA,UAAU,YAAY,aAAaA,OAAO;QAC5D,OAAOG,OAAOH,MAAME,OAAO;IAC7B;IAEA,OAAOC,OAAOH;AAChB;AAEA;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,SAASI,gBAAgBJ,KAAc;IAC5C,MAAME,UAAUH,oBAAoBC,OAAOK,WAAW;IAEtD,IAAIH,QAAQI,QAAQ,CAAC,eAAe;QAClC,OAAO;IACT;IAEA,IAAIJ,QAAQI,QAAQ,CAAC,cAAc;QACjC,OAAO;IACT;IAEA,IAAIJ,QAAQI,QAAQ,CAAC,gBAAgBJ,QAAQI,QAAQ,CAAC,WAAW;QAC/D,OAAO;IACT;IAEA,IAAIJ,QAAQI,QAAQ,CAAC,eAAeJ,QAAQI,QAAQ,CAAC,gBAAgB;QACnE,OAAO;IACT;IAEA,OAAO;AACT"}
@@ -1,3 +1,3 @@
1
1
  import type { TFunction } from '@payloadcms/translations';
2
- export declare const validateLimitValue: (value: null | number | undefined, t: TFunction, step?: number) => string | undefined;
2
+ export declare const validateLimitValue: (value: null | number | undefined, t: TFunction) => string | undefined;
3
3
  //# sourceMappingURL=validateLimitValue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validateLimitValue.d.ts","sourceRoot":"","sources":["../../src/utilities/validateLimitValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEzD,eAAO,MAAM,kBAAkB,UACtB,IAAI,GAAG,MAAM,GAAG,SAAS,KAC7B,SAAS,oBAEX,MAAM,GAAG,SAUX,CAAA"}
1
+ {"version":3,"file":"validateLimitValue.d.ts","sourceRoot":"","sources":["../../src/utilities/validateLimitValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEzD,eAAO,MAAM,kBAAkB,UACtB,IAAI,GAAG,MAAM,GAAG,SAAS,KAC7B,SAAS,KACX,MAAM,GAAG,SAMX,CAAA"}
@@ -1,4 +1,4 @@
1
- export const validateLimitValue = (value, t, step = 100)=>{
1
+ export const validateLimitValue = (value, t)=>{
2
2
  if (value && value < 0) {
3
3
  return t('validation:lessThanMin', {
4
4
  label: t('general:value'),
@@ -6,9 +6,6 @@ export const validateLimitValue = (value, t, step = 100)=>{
6
6
  value
7
7
  });
8
8
  }
9
- if (value && value % step !== 0) {
10
- return `Limit must be a multiple of ${step}`;
11
- }
12
9
  return undefined;
13
10
  };
14
11
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/validateLimitValue.ts"],"sourcesContent":["import type { TFunction } from '@payloadcms/translations'\n\nexport const validateLimitValue = (\n value: null | number | undefined,\n t: TFunction,\n step = 100,\n): string | undefined => {\n if (value && value < 0) {\n return t('validation:lessThanMin', { label: t('general:value'), min: 0, value })\n }\n\n if (value && value % step !== 0) {\n return `Limit must be a multiple of ${step}`\n }\n\n return undefined\n}\n"],"names":["validateLimitValue","value","t","step","label","min","undefined"],"mappings":"AAEA,OAAO,MAAMA,qBAAqB,CAChCC,OACAC,GACAC,OAAO,GAAG;IAEV,IAAIF,SAASA,QAAQ,GAAG;QACtB,OAAOC,EAAE,0BAA0B;YAAEE,OAAOF,EAAE;YAAkBG,KAAK;YAAGJ;QAAM;IAChF;IAEA,IAAIA,SAASA,QAAQE,SAAS,GAAG;QAC/B,OAAO,CAAC,4BAA4B,EAAEA,MAAM;IAC9C;IAEA,OAAOG;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/utilities/validateLimitValue.ts"],"sourcesContent":["import type { TFunction } from '@payloadcms/translations'\n\nexport const validateLimitValue = (\n value: null | number | undefined,\n t: TFunction,\n): string | undefined => {\n if (value && value < 0) {\n return t('validation:lessThanMin', { label: t('general:value'), min: 0, value })\n }\n\n return undefined\n}\n"],"names":["validateLimitValue","value","t","label","min","undefined"],"mappings":"AAEA,OAAO,MAAMA,qBAAqB,CAChCC,OACAC;IAEA,IAAID,SAASA,QAAQ,GAAG;QACtB,OAAOC,EAAE,0BAA0B;YAAEC,OAAOD,EAAE;YAAkBE,KAAK;YAAGH;QAAM;IAChF;IAEA,OAAOI;AACT,EAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/plugin-import-export",
3
- "version": "3.71.0-internal.ef75fa0",
3
+ "version": "3.71.1",
4
4
  "description": "Import-Export plugin for Payload",
5
5
  "keywords": [
6
6
  "payload",
@@ -61,20 +61,20 @@
61
61
  ],
62
62
  "dependencies": {
63
63
  "@faceless-ui/modal": "3.0.0",
64
- "csv-parse": "^5.6.0",
65
- "csv-stringify": "^6.5.2",
64
+ "csv-parse": "5.6.0",
65
+ "csv-stringify": "6.5.2",
66
66
  "qs-esm": "7.0.2",
67
- "@payloadcms/translations": "3.71.0-internal.ef75fa0",
68
- "@payloadcms/ui": "3.71.0-internal.ef75fa0"
67
+ "@payloadcms/ui": "3.71.1",
68
+ "@payloadcms/translations": "3.71.1"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@payloadcms/eslint-config": "3.28.0",
72
- "@payloadcms/ui": "3.71.0-internal.ef75fa0",
73
- "payload": "3.71.0-internal.ef75fa0"
72
+ "@payloadcms/ui": "3.71.1",
73
+ "payload": "3.71.1"
74
74
  },
75
75
  "peerDependencies": {
76
- "@payloadcms/ui": "3.71.0-internal.ef75fa0",
77
- "payload": "3.71.0-internal.ef75fa0"
76
+ "payload": "3.71.1",
77
+ "@payloadcms/ui": "3.71.1"
78
78
  },
79
79
  "homepage:": "https://payloadcms.com",
80
80
  "scripts": {
@@ -1,52 +0,0 @@
1
- @import '~@payloadcms/ui/scss';
2
-
3
- @layer payload-default {
4
- .export-list-menu-item {
5
- .doc-drawer__toggler {
6
- height: 100%;
7
- width: 100%;
8
- text-align: left;
9
- }
10
-
11
-
12
- // TODO: is any of this css needed?
13
- &__subheader,
14
- &__header {
15
- padding: 0 var(--gutter-h);
16
- display: flex;
17
- align-items: center;
18
- justify-content: space-between;
19
- border-bottom: 1px solid var(--theme-border-color);
20
-
21
- & h2 {
22
- margin: calc(var(--gutter-h) * 0.5) 0;
23
- }
24
- }
25
-
26
- &__options,
27
- &__preview {
28
- padding: calc(var(--gutter-h) * 0.5) var(--gutter-h);
29
- }
30
-
31
- &__preview-title {
32
- display: flex;
33
- align-items: center;
34
- justify-content: space-between;
35
- margin-bottom: calc(var(--gutter-h) * 0.5);
36
- }
37
-
38
- &__close {
39
- @include btn-reset;
40
- }
41
-
42
- &__icon {
43
- width: 3rem;
44
- height: 3rem;
45
- cursor: pointer;
46
-
47
- &:hover {
48
- opacity: 0.8;
49
- }
50
- }
51
- }
52
- }
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- import './index.scss';
3
- export declare const Preview: () => React.JSX.Element;
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Preview/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,OAAO,yBAiLnB,CAAA"}
@@ -1,180 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { getTranslation } from '@payloadcms/translations';
4
- import { CodeEditorLazy, Table, Translation, useConfig, useField, useTranslation } from '@payloadcms/ui';
5
- import React from 'react';
6
- import { buildDisabledFieldRegex } from '../../utilities/buildDisabledFieldRegex.js';
7
- import './index.scss';
8
- import { useImportExport } from '../ImportExportProvider/index.js';
9
- const baseClass = 'preview';
10
- export const Preview = ()=>{
11
- const { collection } = useImportExport();
12
- const { config } = useConfig();
13
- const { value: where } = useField({
14
- path: 'where'
15
- });
16
- const { value: page } = useField({
17
- path: 'page'
18
- });
19
- const { value: limit } = useField({
20
- path: 'limit'
21
- });
22
- const { value: fields } = useField({
23
- path: 'fields'
24
- });
25
- const { value: sort } = useField({
26
- path: 'sort'
27
- });
28
- const { value: draft } = useField({
29
- path: 'drafts'
30
- });
31
- const { value: locale } = useField({
32
- path: 'locale'
33
- });
34
- const { value: format } = useField({
35
- path: 'format'
36
- });
37
- const [dataToRender, setDataToRender] = React.useState([]);
38
- const [resultCount, setResultCount] = React.useState('');
39
- const [columns, setColumns] = React.useState([]);
40
- const { i18n, t } = useTranslation();
41
- const collectionSlug = typeof collection === 'string' && collection;
42
- const collectionConfig = config.collections.find((collection)=>collection.slug === collectionSlug);
43
- const disabledFieldRegexes = React.useMemo(()=>{
44
- const disabledFieldPaths = collectionConfig?.admin?.custom?.['plugin-import-export']?.disabledFields ?? [];
45
- return disabledFieldPaths.map(buildDisabledFieldRegex);
46
- }, [
47
- collectionConfig
48
- ]);
49
- const isCSV = format === 'csv';
50
- React.useEffect(()=>{
51
- const fetchData = async ()=>{
52
- if (!collectionSlug || !collectionConfig) {
53
- return;
54
- }
55
- try {
56
- const res = await fetch('/api/preview-data', {
57
- body: JSON.stringify({
58
- collectionSlug,
59
- draft,
60
- fields,
61
- format,
62
- limit,
63
- locale,
64
- page,
65
- sort,
66
- where
67
- }),
68
- credentials: 'include',
69
- headers: {
70
- 'Content-Type': 'application/json'
71
- },
72
- method: 'POST'
73
- });
74
- if (!res.ok) {
75
- return;
76
- }
77
- const { docs, totalDocs } = await res.json();
78
- setResultCount(limit && limit < totalDocs ? limit : totalDocs);
79
- const allKeys = Array.from(new Set(docs.flatMap((doc)=>Object.keys(doc))));
80
- const defaultMetaFields = [
81
- 'createdAt',
82
- 'updatedAt',
83
- '_status',
84
- 'id'
85
- ];
86
- // Match CSV column ordering by building keys based on fields and regex
87
- const fieldToRegex = (field)=>{
88
- const parts = field.split('.').map((part)=>`${part}(?:_\\d+)?`);
89
- return new RegExp(`^${parts.join('_')}`);
90
- };
91
- // Construct final list of field keys to match field order + meta order
92
- const selectedKeys = Array.isArray(fields) && fields.length > 0 ? fields.flatMap((field)=>{
93
- const regex = fieldToRegex(field);
94
- return allKeys.filter((key)=>regex.test(key) && !disabledFieldRegexes.some((disabledRegex)=>disabledRegex.test(key)));
95
- }) : allKeys.filter((key)=>!defaultMetaFields.includes(key) && !disabledFieldRegexes.some((regex)=>regex.test(key)));
96
- const fieldKeys = Array.isArray(fields) && fields.length > 0 ? selectedKeys // strictly use selected fields only
97
- : [
98
- ...selectedKeys,
99
- ...defaultMetaFields.filter((key)=>allKeys.includes(key) && !selectedKeys.includes(key))
100
- ];
101
- // Build columns based on flattened keys
102
- const newColumns = fieldKeys.map((key)=>({
103
- accessor: key,
104
- active: true,
105
- field: {
106
- name: key
107
- },
108
- Heading: getTranslation(key, i18n),
109
- renderedCells: docs.map((doc)=>{
110
- const val = doc[key];
111
- if (val === undefined || val === null) {
112
- return null;
113
- }
114
- // Avoid ESLint warning by type-checking before calling String()
115
- if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {
116
- return String(val);
117
- }
118
- if (Array.isArray(val)) {
119
- return val.map(String).join(', ');
120
- }
121
- return JSON.stringify(val);
122
- })
123
- }));
124
- setColumns(newColumns);
125
- setDataToRender(docs);
126
- } catch (error) {
127
- console.error('Error fetching preview data:', error);
128
- }
129
- };
130
- void fetchData();
131
- }, [
132
- collectionConfig,
133
- collectionSlug,
134
- disabledFieldRegexes,
135
- draft,
136
- fields,
137
- format,
138
- i18n,
139
- limit,
140
- locale,
141
- page,
142
- sort,
143
- where
144
- ]);
145
- return /*#__PURE__*/ _jsxs("div", {
146
- className: baseClass,
147
- children: [
148
- /*#__PURE__*/ _jsxs("div", {
149
- className: `${baseClass}__header`,
150
- children: [
151
- /*#__PURE__*/ _jsx("h3", {
152
- children: /*#__PURE__*/ _jsx(Translation, {
153
- i18nKey: "version:preview",
154
- t: t
155
- })
156
- }),
157
- resultCount && /*#__PURE__*/ _jsx(Translation, {
158
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
159
- // @ts-expect-error
160
- i18nKey: "plugin-import-export:totalDocumentsCount",
161
- t: t,
162
- variables: {
163
- count: resultCount
164
- }
165
- })
166
- ]
167
- }),
168
- dataToRender && (isCSV ? /*#__PURE__*/ _jsx(Table, {
169
- columns: columns,
170
- data: dataToRender
171
- }) : /*#__PURE__*/ _jsx(CodeEditorLazy, {
172
- language: "json",
173
- readOnly: true,
174
- value: JSON.stringify(dataToRender, null, 2)
175
- }))
176
- ]
177
- });
178
- };
179
-
180
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/Preview/index.tsx"],"sourcesContent":["'use client'\nimport type { Column } from '@payloadcms/ui'\nimport type { ClientField } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n CodeEditorLazy,\n Table,\n Translation,\n useConfig,\n useField,\n useTranslation,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\n\nimport { buildDisabledFieldRegex } from '../../utilities/buildDisabledFieldRegex.js'\nimport './index.scss'\nimport { useImportExport } from '../ImportExportProvider/index.js'\n\nconst baseClass = 'preview'\n\nexport const Preview = () => {\n const { collection } = useImportExport()\n const { config } = useConfig()\n const { value: where } = useField({ path: 'where' })\n const { value: page } = useField({ path: 'page' })\n const { value: limit } = useField<number>({ path: 'limit' })\n const { value: fields } = useField<string[]>({ path: 'fields' })\n const { value: sort } = useField({ path: 'sort' })\n const { value: draft } = useField({ path: 'drafts' })\n const { value: locale } = useField({ path: 'locale' })\n const { value: format } = useField({ path: 'format' })\n const [dataToRender, setDataToRender] = React.useState<any[]>([])\n const [resultCount, setResultCount] = React.useState<any>('')\n const [columns, setColumns] = React.useState<Column[]>([])\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const collectionSlug = typeof collection === 'string' && collection\n const collectionConfig = config.collections.find(\n (collection) => collection.slug === collectionSlug,\n )\n\n const disabledFieldRegexes: RegExp[] = React.useMemo(() => {\n const disabledFieldPaths =\n collectionConfig?.admin?.custom?.['plugin-import-export']?.disabledFields ?? []\n\n return disabledFieldPaths.map(buildDisabledFieldRegex)\n }, [collectionConfig])\n\n const isCSV = format === 'csv'\n\n React.useEffect(() => {\n const fetchData = async () => {\n if (!collectionSlug || !collectionConfig) {\n return\n }\n\n try {\n const res = await fetch('/api/preview-data', {\n body: JSON.stringify({\n collectionSlug,\n draft,\n fields,\n format,\n limit,\n locale,\n page,\n sort,\n where,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n })\n\n if (!res.ok) {\n return\n }\n\n const { docs, totalDocs }: { docs: Record<string, unknown>[]; totalDocs: number } =\n await res.json()\n\n setResultCount(limit && limit < totalDocs ? limit : totalDocs)\n\n const allKeys = Array.from(new Set(docs.flatMap((doc) => Object.keys(doc))))\n const defaultMetaFields = ['createdAt', 'updatedAt', '_status', 'id']\n\n // Match CSV column ordering by building keys based on fields and regex\n const fieldToRegex = (field: string): RegExp => {\n const parts = field.split('.').map((part) => `${part}(?:_\\\\d+)?`)\n return new RegExp(`^${parts.join('_')}`)\n }\n\n // Construct final list of field keys to match field order + meta order\n const selectedKeys =\n Array.isArray(fields) && fields.length > 0\n ? fields.flatMap((field) => {\n const regex = fieldToRegex(field)\n return allKeys.filter(\n (key) =>\n regex.test(key) &&\n !disabledFieldRegexes.some((disabledRegex) => disabledRegex.test(key)),\n )\n })\n : allKeys.filter(\n (key) =>\n !defaultMetaFields.includes(key) &&\n !disabledFieldRegexes.some((regex) => regex.test(key)),\n )\n\n const fieldKeys =\n Array.isArray(fields) && fields.length > 0\n ? selectedKeys // strictly use selected fields only\n : [\n ...selectedKeys,\n ...defaultMetaFields.filter(\n (key) => allKeys.includes(key) && !selectedKeys.includes(key),\n ),\n ]\n\n // Build columns based on flattened keys\n const newColumns: Column[] = fieldKeys.map((key) => ({\n accessor: key,\n active: true,\n field: { name: key } as ClientField,\n Heading: getTranslation(key, i18n),\n renderedCells: docs.map((doc: Record<string, unknown>) => {\n const val = doc[key]\n\n if (val === undefined || val === null) {\n return null\n }\n\n // Avoid ESLint warning by type-checking before calling String()\n if (typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean') {\n return String(val)\n }\n\n if (Array.isArray(val)) {\n return val.map(String).join(', ')\n }\n\n return JSON.stringify(val)\n }),\n }))\n\n setColumns(newColumns)\n setDataToRender(docs)\n } catch (error) {\n console.error('Error fetching preview data:', error)\n }\n }\n\n void fetchData()\n }, [\n collectionConfig,\n collectionSlug,\n disabledFieldRegexes,\n draft,\n fields,\n format,\n i18n,\n limit,\n locale,\n page,\n sort,\n where,\n ])\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {resultCount && (\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:totalDocumentsCount\"\n t={t}\n variables={{\n count: resultCount,\n }}\n />\n )}\n </div>\n {dataToRender &&\n (isCSV ? (\n <Table columns={columns} data={dataToRender} />\n ) : (\n <CodeEditorLazy language=\"json\" readOnly value={JSON.stringify(dataToRender, null, 2)} />\n ))}\n </div>\n )\n}\n"],"names":["getTranslation","CodeEditorLazy","Table","Translation","useConfig","useField","useTranslation","React","buildDisabledFieldRegex","useImportExport","baseClass","Preview","collection","config","value","where","path","page","limit","fields","sort","draft","locale","format","dataToRender","setDataToRender","useState","resultCount","setResultCount","columns","setColumns","i18n","t","collectionSlug","collectionConfig","collections","find","slug","disabledFieldRegexes","useMemo","disabledFieldPaths","admin","custom","disabledFields","map","isCSV","useEffect","fetchData","res","fetch","body","JSON","stringify","credentials","headers","method","ok","docs","totalDocs","json","allKeys","Array","from","Set","flatMap","doc","Object","keys","defaultMetaFields","fieldToRegex","field","parts","split","part","RegExp","join","selectedKeys","isArray","length","regex","filter","key","test","some","disabledRegex","includes","fieldKeys","newColumns","accessor","active","name","Heading","renderedCells","val","undefined","String","error","console","div","className","h3","i18nKey","variables","count","data","language","readOnly"],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- .preview {
2
- &__header {
3
- display: flex;
4
- justify-content: space-between;
5
- align-items: flex-end;
6
- margin-bottom: 10px;
7
- }
8
- }
@@ -1,3 +0,0 @@
1
- import type { PayloadRequest } from 'payload';
2
- export declare const download: (req: PayloadRequest, debug?: boolean) => Promise<Response>;
3
- //# sourceMappingURL=download.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/export/download.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAM7C,eAAO,MAAM,QAAQ,QAAe,cAAc,uCA8BjD,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/export/download.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { APIError } from 'payload'\n\nimport { createExport } from './createExport.js'\n\nexport const download = async (req: PayloadRequest, debug = false) => {\n try {\n let body\n if (typeof req?.json === 'function') {\n body = await req.json()\n }\n\n if (!body || !body.data) {\n throw new APIError('Request data is required.')\n }\n\n const { collectionSlug } = body.data || {}\n\n req.payload.logger.info(`Download request received ${collectionSlug}`)\n\n const res = await createExport({\n download: true,\n input: { ...body.data, debug },\n req,\n user: req.user,\n })\n\n return res as Response\n } catch (err) {\n // Return JSON for front-end toast\n return new Response(\n JSON.stringify({ errors: [{ message: (err as Error).message || 'Something went wrong' }] }),\n { headers: { 'Content-Type': 'application/json' }, status: 400 },\n )\n }\n}\n"],"names":["APIError","createExport","download","req","debug","body","json","data","collectionSlug","payload","logger","info","res","input","user","err","Response","JSON","stringify","errors","message","headers","status"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,UAAS;AAElC,SAASC,YAAY,QAAQ,oBAAmB;AAEhD,OAAO,MAAMC,WAAW,OAAOC,KAAqBC,QAAQ,KAAK;IAC/D,IAAI;QACF,IAAIC;QACJ,IAAI,OAAOF,KAAKG,SAAS,YAAY;YACnCD,OAAO,MAAMF,IAAIG,IAAI;QACvB;QAEA,IAAI,CAACD,QAAQ,CAACA,KAAKE,IAAI,EAAE;YACvB,MAAM,IAAIP,SAAS;QACrB;QAEA,MAAM,EAAEQ,cAAc,EAAE,GAAGH,KAAKE,IAAI,IAAI,CAAC;QAEzCJ,IAAIM,OAAO,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,0BAA0B,EAAEH,gBAAgB;QAErE,MAAMI,MAAM,MAAMX,aAAa;YAC7BC,UAAU;YACVW,OAAO;gBAAE,GAAGR,KAAKE,IAAI;gBAAEH;YAAM;YAC7BD;YACAW,MAAMX,IAAIW,IAAI;QAChB;QAEA,OAAOF;IACT,EAAE,OAAOG,KAAK;QACZ,kCAAkC;QAClC,OAAO,IAAIC,SACTC,KAAKC,SAAS,CAAC;YAAEC,QAAQ;gBAAC;oBAAEC,SAAS,AAACL,IAAcK,OAAO,IAAI;gBAAuB;aAAE;QAAC,IACzF;YAAEC,SAAS;gBAAE,gBAAgB;YAAmB;YAAGC,QAAQ;QAAI;IAEnE;AACF,EAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"flattenObject.d.ts","sourceRoot":"","sources":["../../src/export/flattenObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,KAAK,IAAI,GAAG;IACV,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CAC9C,CAAA;AAED,eAAO,MAAM,aAAa,6CAKvB,IAAI,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAqJ/B,CAAA"}