@ruya.sa/plugin-import-export 3.71.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/components/CollectionField/index.d.ts +3 -0
- package/dist/components/CollectionField/index.d.ts.map +1 -0
- package/dist/components/CollectionField/index.js +29 -0
- package/dist/components/CollectionField/index.js.map +1 -0
- package/dist/components/ExportListMenuItem/index.d.ts +6 -0
- package/dist/components/ExportListMenuItem/index.d.ts.map +1 -0
- package/dist/components/ExportListMenuItem/index.js +44 -0
- package/dist/components/ExportListMenuItem/index.js.map +1 -0
- package/dist/components/ExportPreview/index.d.ts +4 -0
- package/dist/components/ExportPreview/index.d.ts.map +1 -0
- package/dist/components/ExportPreview/index.js +252 -0
- package/dist/components/ExportPreview/index.js.map +1 -0
- package/dist/components/ExportPreview/index.scss +36 -0
- package/dist/components/ExportSaveButton/index.d.ts +3 -0
- package/dist/components/ExportSaveButton/index.d.ts.map +1 -0
- package/dist/components/ExportSaveButton/index.js +110 -0
- package/dist/components/ExportSaveButton/index.js.map +1 -0
- package/dist/components/FieldsToExport/index.d.ts +3 -0
- package/dist/components/FieldsToExport/index.d.ts.map +1 -0
- package/dist/components/FieldsToExport/index.js +87 -0
- package/dist/components/FieldsToExport/index.js.map +1 -0
- package/dist/components/FieldsToExport/index.scss +0 -0
- package/dist/components/FieldsToExport/reduceFields.d.ts +13 -0
- package/dist/components/FieldsToExport/reduceFields.d.ts.map +1 -0
- package/dist/components/FieldsToExport/reduceFields.js +109 -0
- package/dist/components/FieldsToExport/reduceFields.js.map +1 -0
- package/dist/components/ImportCollectionField/index.d.ts +3 -0
- package/dist/components/ImportCollectionField/index.d.ts.map +1 -0
- package/dist/components/ImportCollectionField/index.js +17 -0
- package/dist/components/ImportCollectionField/index.js.map +1 -0
- package/dist/components/ImportExportProvider/index.d.ts +12 -0
- package/dist/components/ImportExportProvider/index.d.ts.map +1 -0
- package/dist/components/ImportExportProvider/index.js +20 -0
- package/dist/components/ImportExportProvider/index.js.map +1 -0
- package/dist/components/ImportListMenuItem/index.d.ts +6 -0
- package/dist/components/ImportListMenuItem/index.d.ts.map +1 -0
- package/dist/components/ImportListMenuItem/index.js +48 -0
- package/dist/components/ImportListMenuItem/index.js.map +1 -0
- package/dist/components/ImportPreview/index.d.ts +4 -0
- package/dist/components/ImportPreview/index.d.ts.map +1 -0
- package/dist/components/ImportPreview/index.js +624 -0
- package/dist/components/ImportPreview/index.js.map +1 -0
- package/dist/components/ImportPreview/index.scss +41 -0
- package/dist/components/ImportSaveButton/index.d.ts +2 -0
- package/dist/components/ImportSaveButton/index.d.ts.map +1 -0
- package/dist/components/ImportSaveButton/index.js +18 -0
- package/dist/components/ImportSaveButton/index.js.map +1 -0
- package/dist/components/Page/index.d.ts +4 -0
- package/dist/components/Page/index.d.ts.map +1 -0
- package/dist/components/Page/index.js +40 -0
- package/dist/components/Page/index.js.map +1 -0
- package/dist/components/Page/index.scss +5 -0
- package/dist/components/SelectionToUseField/index.d.ts +3 -0
- package/dist/components/SelectionToUseField/index.d.ts.map +1 -0
- package/dist/components/SelectionToUseField/index.js +128 -0
- package/dist/components/SelectionToUseField/index.js.map +1 -0
- package/dist/components/SortBy/index.d.ts +4 -0
- package/dist/components/SortBy/index.d.ts.map +1 -0
- package/dist/components/SortBy/index.js +133 -0
- package/dist/components/SortBy/index.js.map +1 -0
- package/dist/components/SortBy/index.scss +3 -0
- package/dist/components/SortOrder/index.d.ts +4 -0
- package/dist/components/SortOrder/index.d.ts.map +1 -0
- package/dist/components/SortOrder/index.js +121 -0
- package/dist/components/SortOrder/index.js.map +1 -0
- package/dist/components/SortOrder/index.scss +3 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +21 -0
- package/dist/constants.js.map +1 -0
- package/dist/export/batchProcessor.d.ts +107 -0
- package/dist/export/batchProcessor.d.ts.map +1 -0
- package/dist/export/batchProcessor.js +187 -0
- package/dist/export/batchProcessor.js.map +1 -0
- package/dist/export/createExport.d.ts +37 -0
- package/dist/export/createExport.d.ts.map +1 -0
- package/dist/export/createExport.js +385 -0
- package/dist/export/createExport.js.map +1 -0
- package/dist/export/getCreateExportCollectionTask.d.ts +16 -0
- package/dist/export/getCreateExportCollectionTask.d.ts.map +1 -0
- package/dist/export/getCreateExportCollectionTask.js +35 -0
- package/dist/export/getCreateExportCollectionTask.js.map +1 -0
- package/dist/export/getExportCollection.d.ts +8 -0
- package/dist/export/getExportCollection.d.ts.map +1 -0
- package/dist/export/getExportCollection.js +100 -0
- package/dist/export/getExportCollection.js.map +1 -0
- package/dist/export/getFields.d.ts +10 -0
- package/dist/export/getFields.d.ts.map +1 -0
- package/dist/export/getFields.js +244 -0
- package/dist/export/getFields.js.map +1 -0
- package/dist/export/handleDownload.d.ts +3 -0
- package/dist/export/handleDownload.d.ts.map +1 -0
- package/dist/export/handleDownload.js +42 -0
- package/dist/export/handleDownload.js.map +1 -0
- package/dist/export/handlePreview.d.ts +3 -0
- package/dist/export/handlePreview.d.ts.map +1 -0
- package/dist/export/handlePreview.js +163 -0
- package/dist/export/handlePreview.js.map +1 -0
- package/dist/exports/rsc.d.ts +15 -0
- package/dist/exports/rsc.d.ts.map +1 -0
- package/dist/exports/rsc.js +16 -0
- package/dist/exports/rsc.js.map +1 -0
- package/dist/exports/types.d.ts +2 -0
- package/dist/exports/types.d.ts.map +1 -0
- package/dist/exports/types.js +3 -0
- package/dist/exports/types.js.map +1 -0
- package/dist/import/batchProcessor.d.ts +46 -0
- package/dist/import/batchProcessor.d.ts.map +1 -0
- package/dist/import/batchProcessor.js +529 -0
- package/dist/import/batchProcessor.js.map +1 -0
- package/dist/import/createImport.d.ts +45 -0
- package/dist/import/createImport.d.ts.map +1 -0
- package/dist/import/createImport.js +175 -0
- package/dist/import/createImport.js.map +1 -0
- package/dist/import/getCreateImportCollectionTask.d.ts +13 -0
- package/dist/import/getCreateImportCollectionTask.d.ts.map +1 -0
- package/dist/import/getCreateImportCollectionTask.js +81 -0
- package/dist/import/getCreateImportCollectionTask.js.map +1 -0
- package/dist/import/getFields.d.ts +7 -0
- package/dist/import/getFields.d.ts.map +1 -0
- package/dist/import/getFields.js +150 -0
- package/dist/import/getFields.js.map +1 -0
- package/dist/import/getImportCollection.d.ts +8 -0
- package/dist/import/getImportCollection.d.ts.map +1 -0
- package/dist/import/getImportCollection.js +258 -0
- package/dist/import/getImportCollection.js.map +1 -0
- package/dist/import/handlePreview.d.ts +3 -0
- package/dist/import/handlePreview.d.ts.map +1 -0
- package/dist/import/handlePreview.js +94 -0
- package/dist/import/handlePreview.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +120 -0
- package/dist/index.js.map +1 -0
- package/dist/translations/index.d.ts +6 -0
- package/dist/translations/index.d.ts.map +1 -0
- package/dist/translations/index.js +84 -0
- package/dist/translations/index.js.map +1 -0
- package/dist/translations/languages/ar.d.ts +4 -0
- package/dist/translations/languages/ar.d.ts.map +1 -0
- package/dist/translations/languages/ar.js +48 -0
- package/dist/translations/languages/ar.js.map +1 -0
- package/dist/translations/languages/az.d.ts +4 -0
- package/dist/translations/languages/az.d.ts.map +1 -0
- package/dist/translations/languages/az.js +48 -0
- package/dist/translations/languages/az.js.map +1 -0
- package/dist/translations/languages/bg.d.ts +4 -0
- package/dist/translations/languages/bg.d.ts.map +1 -0
- package/dist/translations/languages/bg.js +48 -0
- package/dist/translations/languages/bg.js.map +1 -0
- package/dist/translations/languages/bnBd.d.ts +4 -0
- package/dist/translations/languages/bnBd.d.ts.map +1 -0
- package/dist/translations/languages/bnBd.js +48 -0
- package/dist/translations/languages/bnBd.js.map +1 -0
- package/dist/translations/languages/bnIn.d.ts +4 -0
- package/dist/translations/languages/bnIn.d.ts.map +1 -0
- package/dist/translations/languages/bnIn.js +48 -0
- package/dist/translations/languages/bnIn.js.map +1 -0
- package/dist/translations/languages/ca.d.ts +4 -0
- package/dist/translations/languages/ca.d.ts.map +1 -0
- package/dist/translations/languages/ca.js +48 -0
- package/dist/translations/languages/ca.js.map +1 -0
- package/dist/translations/languages/cs.d.ts +4 -0
- package/dist/translations/languages/cs.d.ts.map +1 -0
- package/dist/translations/languages/cs.js +48 -0
- package/dist/translations/languages/cs.js.map +1 -0
- package/dist/translations/languages/da.d.ts +4 -0
- package/dist/translations/languages/da.d.ts.map +1 -0
- package/dist/translations/languages/da.js +48 -0
- package/dist/translations/languages/da.js.map +1 -0
- package/dist/translations/languages/de.d.ts +4 -0
- package/dist/translations/languages/de.d.ts.map +1 -0
- package/dist/translations/languages/de.js +48 -0
- package/dist/translations/languages/de.js.map +1 -0
- package/dist/translations/languages/en.d.ts +45 -0
- package/dist/translations/languages/en.d.ts.map +1 -0
- package/dist/translations/languages/en.js +48 -0
- package/dist/translations/languages/en.js.map +1 -0
- package/dist/translations/languages/es.d.ts +4 -0
- package/dist/translations/languages/es.d.ts.map +1 -0
- package/dist/translations/languages/es.js +48 -0
- package/dist/translations/languages/es.js.map +1 -0
- package/dist/translations/languages/et.d.ts +4 -0
- package/dist/translations/languages/et.d.ts.map +1 -0
- package/dist/translations/languages/et.js +48 -0
- package/dist/translations/languages/et.js.map +1 -0
- package/dist/translations/languages/fa.d.ts +4 -0
- package/dist/translations/languages/fa.d.ts.map +1 -0
- package/dist/translations/languages/fa.js +48 -0
- package/dist/translations/languages/fa.js.map +1 -0
- package/dist/translations/languages/fr.d.ts +4 -0
- package/dist/translations/languages/fr.d.ts.map +1 -0
- package/dist/translations/languages/fr.js +48 -0
- package/dist/translations/languages/fr.js.map +1 -0
- package/dist/translations/languages/he.d.ts +4 -0
- package/dist/translations/languages/he.d.ts.map +1 -0
- package/dist/translations/languages/he.js +48 -0
- package/dist/translations/languages/he.js.map +1 -0
- package/dist/translations/languages/hr.d.ts +4 -0
- package/dist/translations/languages/hr.d.ts.map +1 -0
- package/dist/translations/languages/hr.js +48 -0
- package/dist/translations/languages/hr.js.map +1 -0
- package/dist/translations/languages/hu.d.ts +4 -0
- package/dist/translations/languages/hu.d.ts.map +1 -0
- package/dist/translations/languages/hu.js +48 -0
- package/dist/translations/languages/hu.js.map +1 -0
- package/dist/translations/languages/hy.d.ts +4 -0
- package/dist/translations/languages/hy.d.ts.map +1 -0
- package/dist/translations/languages/hy.js +48 -0
- package/dist/translations/languages/hy.js.map +1 -0
- package/dist/translations/languages/id.d.ts +4 -0
- package/dist/translations/languages/id.d.ts.map +1 -0
- package/dist/translations/languages/id.js +48 -0
- package/dist/translations/languages/id.js.map +1 -0
- package/dist/translations/languages/is.d.ts +4 -0
- package/dist/translations/languages/is.d.ts.map +1 -0
- package/dist/translations/languages/is.js +48 -0
- package/dist/translations/languages/is.js.map +1 -0
- package/dist/translations/languages/it.d.ts +4 -0
- package/dist/translations/languages/it.d.ts.map +1 -0
- package/dist/translations/languages/it.js +48 -0
- package/dist/translations/languages/it.js.map +1 -0
- package/dist/translations/languages/ja.d.ts +4 -0
- package/dist/translations/languages/ja.d.ts.map +1 -0
- package/dist/translations/languages/ja.js +48 -0
- package/dist/translations/languages/ja.js.map +1 -0
- package/dist/translations/languages/ko.d.ts +4 -0
- package/dist/translations/languages/ko.d.ts.map +1 -0
- package/dist/translations/languages/ko.js +48 -0
- package/dist/translations/languages/ko.js.map +1 -0
- package/dist/translations/languages/lt.d.ts +4 -0
- package/dist/translations/languages/lt.d.ts.map +1 -0
- package/dist/translations/languages/lt.js +48 -0
- package/dist/translations/languages/lt.js.map +1 -0
- package/dist/translations/languages/lv.d.ts +4 -0
- package/dist/translations/languages/lv.d.ts.map +1 -0
- package/dist/translations/languages/lv.js +48 -0
- package/dist/translations/languages/lv.js.map +1 -0
- package/dist/translations/languages/my.d.ts +4 -0
- package/dist/translations/languages/my.d.ts.map +1 -0
- package/dist/translations/languages/my.js +48 -0
- package/dist/translations/languages/my.js.map +1 -0
- package/dist/translations/languages/nb.d.ts +4 -0
- package/dist/translations/languages/nb.d.ts.map +1 -0
- package/dist/translations/languages/nb.js +48 -0
- package/dist/translations/languages/nb.js.map +1 -0
- package/dist/translations/languages/nl.d.ts +4 -0
- package/dist/translations/languages/nl.d.ts.map +1 -0
- package/dist/translations/languages/nl.js +48 -0
- package/dist/translations/languages/nl.js.map +1 -0
- package/dist/translations/languages/pl.d.ts +4 -0
- package/dist/translations/languages/pl.d.ts.map +1 -0
- package/dist/translations/languages/pl.js +48 -0
- package/dist/translations/languages/pl.js.map +1 -0
- package/dist/translations/languages/pt.d.ts +4 -0
- package/dist/translations/languages/pt.d.ts.map +1 -0
- package/dist/translations/languages/pt.js +48 -0
- package/dist/translations/languages/pt.js.map +1 -0
- package/dist/translations/languages/ro.d.ts +4 -0
- package/dist/translations/languages/ro.d.ts.map +1 -0
- package/dist/translations/languages/ro.js +48 -0
- package/dist/translations/languages/ro.js.map +1 -0
- package/dist/translations/languages/rs.d.ts +4 -0
- package/dist/translations/languages/rs.d.ts.map +1 -0
- package/dist/translations/languages/rs.js +48 -0
- package/dist/translations/languages/rs.js.map +1 -0
- package/dist/translations/languages/rsLatin.d.ts +4 -0
- package/dist/translations/languages/rsLatin.d.ts.map +1 -0
- package/dist/translations/languages/rsLatin.js +48 -0
- package/dist/translations/languages/rsLatin.js.map +1 -0
- package/dist/translations/languages/ru.d.ts +4 -0
- package/dist/translations/languages/ru.d.ts.map +1 -0
- package/dist/translations/languages/ru.js +48 -0
- package/dist/translations/languages/ru.js.map +1 -0
- package/dist/translations/languages/sk.d.ts +4 -0
- package/dist/translations/languages/sk.d.ts.map +1 -0
- package/dist/translations/languages/sk.js +48 -0
- package/dist/translations/languages/sk.js.map +1 -0
- package/dist/translations/languages/sl.d.ts +4 -0
- package/dist/translations/languages/sl.d.ts.map +1 -0
- package/dist/translations/languages/sl.js +48 -0
- package/dist/translations/languages/sl.js.map +1 -0
- package/dist/translations/languages/sv.d.ts +4 -0
- package/dist/translations/languages/sv.d.ts.map +1 -0
- package/dist/translations/languages/sv.js +48 -0
- package/dist/translations/languages/sv.js.map +1 -0
- package/dist/translations/languages/ta.d.ts +4 -0
- package/dist/translations/languages/ta.d.ts.map +1 -0
- package/dist/translations/languages/ta.js +48 -0
- package/dist/translations/languages/ta.js.map +1 -0
- package/dist/translations/languages/th.d.ts +4 -0
- package/dist/translations/languages/th.d.ts.map +1 -0
- package/dist/translations/languages/th.js +48 -0
- package/dist/translations/languages/th.js.map +1 -0
- package/dist/translations/languages/tr.d.ts +4 -0
- package/dist/translations/languages/tr.d.ts.map +1 -0
- package/dist/translations/languages/tr.js +48 -0
- package/dist/translations/languages/tr.js.map +1 -0
- package/dist/translations/languages/translation-schema.json +114 -0
- package/dist/translations/languages/uk.d.ts +4 -0
- package/dist/translations/languages/uk.d.ts.map +1 -0
- package/dist/translations/languages/uk.js +48 -0
- package/dist/translations/languages/uk.js.map +1 -0
- package/dist/translations/languages/vi.d.ts +4 -0
- package/dist/translations/languages/vi.d.ts.map +1 -0
- package/dist/translations/languages/vi.js +48 -0
- package/dist/translations/languages/vi.js.map +1 -0
- package/dist/translations/languages/zh.d.ts +4 -0
- package/dist/translations/languages/zh.d.ts.map +1 -0
- package/dist/translations/languages/zh.js +48 -0
- package/dist/translations/languages/zh.js.map +1 -0
- package/dist/translations/languages/zhTw.d.ts +4 -0
- package/dist/translations/languages/zhTw.d.ts.map +1 -0
- package/dist/translations/languages/zhTw.js +48 -0
- package/dist/translations/languages/zhTw.js.map +1 -0
- package/dist/translations/types.d.ts +38 -0
- package/dist/translations/types.d.ts.map +1 -0
- package/dist/translations/types.js +3 -0
- package/dist/translations/types.js.map +1 -0
- package/dist/types.d.ts +221 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utilities/buildDisabledFieldRegex.d.ts +5 -0
- package/dist/utilities/buildDisabledFieldRegex.d.ts.map +1 -0
- package/dist/utilities/buildDisabledFieldRegex.js +12 -0
- package/dist/utilities/buildDisabledFieldRegex.js.map +1 -0
- package/dist/utilities/collectDisabledFieldPaths.d.ts +15 -0
- package/dist/utilities/collectDisabledFieldPaths.d.ts.map +1 -0
- package/dist/utilities/collectDisabledFieldPaths.js +61 -0
- package/dist/utilities/collectDisabledFieldPaths.js.map +1 -0
- package/dist/utilities/flattenObject.d.ts +11 -0
- package/dist/utilities/flattenObject.d.ts.map +1 -0
- package/dist/utilities/flattenObject.js +129 -0
- package/dist/utilities/flattenObject.js.map +1 -0
- package/dist/utilities/getExportFieldFunctions.d.ts +12 -0
- package/dist/utilities/getExportFieldFunctions.d.ts.map +1 -0
- package/dist/utilities/getExportFieldFunctions.js +102 -0
- package/dist/utilities/getExportFieldFunctions.js.map +1 -0
- package/dist/utilities/getFilename.d.ts +6 -0
- package/dist/utilities/getFilename.d.ts.map +1 -0
- package/dist/utilities/getFilename.js +13 -0
- package/dist/utilities/getFilename.js.map +1 -0
- package/dist/utilities/getFlattenedFieldKeys.d.ts +24 -0
- package/dist/utilities/getFlattenedFieldKeys.d.ts.map +1 -0
- package/dist/utilities/getFlattenedFieldKeys.js +95 -0
- package/dist/utilities/getFlattenedFieldKeys.js.map +1 -0
- package/dist/utilities/getImportFieldFunctions.d.ts +12 -0
- package/dist/utilities/getImportFieldFunctions.d.ts.map +1 -0
- package/dist/utilities/getImportFieldFunctions.js +130 -0
- package/dist/utilities/getImportFieldFunctions.js.map +1 -0
- package/dist/utilities/getPluginCollections.d.ts +39 -0
- package/dist/utilities/getPluginCollections.d.ts.map +1 -0
- package/dist/utilities/getPluginCollections.js +102 -0
- package/dist/utilities/getPluginCollections.js.map +1 -0
- package/dist/utilities/getSchemaColumns.d.ts +43 -0
- package/dist/utilities/getSchemaColumns.d.ts.map +1 -0
- package/dist/utilities/getSchemaColumns.js +163 -0
- package/dist/utilities/getSchemaColumns.js.map +1 -0
- package/dist/utilities/getSelect.d.ts +11 -0
- package/dist/utilities/getSelect.d.ts.map +1 -0
- package/dist/utilities/getSelect.js +27 -0
- package/dist/utilities/getSelect.js.map +1 -0
- package/dist/utilities/getvalueAtPath.d.ts +15 -0
- package/dist/utilities/getvalueAtPath.d.ts.map +1 -0
- package/dist/utilities/getvalueAtPath.js +49 -0
- package/dist/utilities/getvalueAtPath.js.map +1 -0
- package/dist/utilities/parseCSV.d.ts +11 -0
- package/dist/utilities/parseCSV.d.ts.map +1 -0
- package/dist/utilities/parseCSV.js +67 -0
- package/dist/utilities/parseCSV.js.map +1 -0
- package/dist/utilities/parseCSV.spec.js +169 -0
- package/dist/utilities/parseCSV.spec.js.map +1 -0
- package/dist/utilities/parseJSON.d.ts +11 -0
- package/dist/utilities/parseJSON.d.ts.map +1 -0
- package/dist/utilities/parseJSON.js +25 -0
- package/dist/utilities/parseJSON.js.map +1 -0
- package/dist/utilities/processRichTextField.d.ts +6 -0
- package/dist/utilities/processRichTextField.d.ts.map +1 -0
- package/dist/utilities/processRichTextField.js +45 -0
- package/dist/utilities/processRichTextField.js.map +1 -0
- package/dist/utilities/removeDisabledFields.d.ts +15 -0
- package/dist/utilities/removeDisabledFields.d.ts.map +1 -0
- package/dist/utilities/removeDisabledFields.js +66 -0
- package/dist/utilities/removeDisabledFields.js.map +1 -0
- package/dist/utilities/setNestedValue.d.ts +19 -0
- package/dist/utilities/setNestedValue.d.ts.map +1 -0
- package/dist/utilities/setNestedValue.js +55 -0
- package/dist/utilities/setNestedValue.js.map +1 -0
- package/dist/utilities/sortHelpers.d.ts +6 -0
- package/dist/utilities/sortHelpers.d.ts.map +1 -0
- package/dist/utilities/sortHelpers.js +14 -0
- package/dist/utilities/sortHelpers.js.map +1 -0
- package/dist/utilities/unflattenObject.d.ts +11 -0
- package/dist/utilities/unflattenObject.d.ts.map +1 -0
- package/dist/utilities/unflattenObject.js +431 -0
- package/dist/utilities/unflattenObject.js.map +1 -0
- package/dist/utilities/unflattenObject.spec.js +680 -0
- package/dist/utilities/unflattenObject.spec.js.map +1 -0
- package/dist/utilities/useBatchProcessor.d.ts +103 -0
- package/dist/utilities/useBatchProcessor.d.ts.map +1 -0
- package/dist/utilities/useBatchProcessor.js +88 -0
- package/dist/utilities/useBatchProcessor.js.map +1 -0
- package/dist/utilities/validateLimitValue.d.ts +3 -0
- package/dist/utilities/validateLimitValue.d.ts.map +1 -0
- package/dist/utilities/validateLimitValue.js +12 -0
- package/dist/utilities/validateLimitValue.js.map +1 -0
- package/license.md +22 -0
- package/package.json +90 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
/* eslint-disable perfectionist/sort-objects */ import { stringify } from 'csv-stringify/sync';
|
|
2
|
+
import { APIError } from '@ruya.sa/payload';
|
|
3
|
+
import { Readable } from 'stream';
|
|
4
|
+
import { buildDisabledFieldRegex } from '../utilities/buildDisabledFieldRegex.js';
|
|
5
|
+
import { flattenObject } from '../utilities/flattenObject.js';
|
|
6
|
+
import { getExportFieldFunctions } from '../utilities/getExportFieldFunctions.js';
|
|
7
|
+
import { getFilename } from '../utilities/getFilename.js';
|
|
8
|
+
import { getSchemaColumns, mergeColumns } from '../utilities/getSchemaColumns.js';
|
|
9
|
+
import { getSelect } from '../utilities/getSelect.js';
|
|
10
|
+
import { validateLimitValue } from '../utilities/validateLimitValue.js';
|
|
11
|
+
import { createExportBatchProcessor } from './batchProcessor.js';
|
|
12
|
+
export const createExport = async (args)=>{
|
|
13
|
+
const { id, name: nameArg, batchSize = 100, collectionSlug, debug = false, download, drafts: draftsFromInput, exportsCollection, fields, format, limit: incomingLimit, locale: localeFromInput, page, req, sort, userCollection, userID, where: whereFromInput = {} } = args;
|
|
14
|
+
const { locale: localeFromReq, payload } = req;
|
|
15
|
+
if (debug) {
|
|
16
|
+
req.payload.logger.debug({
|
|
17
|
+
message: 'Starting export process with args:',
|
|
18
|
+
collectionSlug,
|
|
19
|
+
draft: draftsFromInput,
|
|
20
|
+
fields,
|
|
21
|
+
format
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const locale = localeFromInput ?? localeFromReq;
|
|
25
|
+
const collectionConfig = payload.config.collections.find(({ slug })=>slug === collectionSlug);
|
|
26
|
+
if (!collectionConfig) {
|
|
27
|
+
throw new APIError(`Collection with slug ${collectionSlug} not found.`);
|
|
28
|
+
}
|
|
29
|
+
let user;
|
|
30
|
+
if (userCollection && userID) {
|
|
31
|
+
user = await req.payload.findByID({
|
|
32
|
+
id: userID,
|
|
33
|
+
collection: userCollection,
|
|
34
|
+
overrideAccess: true
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (!user && req.user) {
|
|
38
|
+
user = req?.user?.id ? req.user : req?.user?.user;
|
|
39
|
+
}
|
|
40
|
+
if (!user) {
|
|
41
|
+
throw new APIError('User authentication is required to create exports.');
|
|
42
|
+
}
|
|
43
|
+
const draft = draftsFromInput === 'yes';
|
|
44
|
+
const hasVersions = Boolean(collectionConfig.versions);
|
|
45
|
+
// Only filter by _status for versioned collections
|
|
46
|
+
const publishedWhere = hasVersions ? {
|
|
47
|
+
_status: {
|
|
48
|
+
equals: 'published'
|
|
49
|
+
}
|
|
50
|
+
} : {};
|
|
51
|
+
const where = {
|
|
52
|
+
and: [
|
|
53
|
+
whereFromInput,
|
|
54
|
+
draft ? {} : publishedWhere
|
|
55
|
+
]
|
|
56
|
+
};
|
|
57
|
+
const name = `${nameArg ?? `${getFilename()}-${collectionSlug}`}.${format}`;
|
|
58
|
+
const isCSV = format === 'csv';
|
|
59
|
+
const select = Array.isArray(fields) && fields.length > 0 ? getSelect(fields) : undefined;
|
|
60
|
+
if (debug) {
|
|
61
|
+
req.payload.logger.debug({
|
|
62
|
+
message: 'Export configuration:',
|
|
63
|
+
name,
|
|
64
|
+
isCSV,
|
|
65
|
+
locale
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const hardLimit = typeof incomingLimit === 'number' && incomingLimit > 0 ? incomingLimit : undefined;
|
|
69
|
+
// Try to count documents - if access is denied, treat as 0 documents
|
|
70
|
+
let totalDocs = 0;
|
|
71
|
+
let accessDenied = false;
|
|
72
|
+
try {
|
|
73
|
+
const countResult = await payload.count({
|
|
74
|
+
collection: collectionSlug,
|
|
75
|
+
user,
|
|
76
|
+
locale,
|
|
77
|
+
overrideAccess: false
|
|
78
|
+
});
|
|
79
|
+
totalDocs = countResult.totalDocs;
|
|
80
|
+
} catch (error) {
|
|
81
|
+
// Access denied - user can't read from this collection
|
|
82
|
+
// We'll create an empty export file
|
|
83
|
+
accessDenied = true;
|
|
84
|
+
if (debug) {
|
|
85
|
+
req.payload.logger.debug({
|
|
86
|
+
message: 'Access denied for collection, creating empty export',
|
|
87
|
+
collectionSlug
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const totalPages = Math.max(1, Math.ceil(totalDocs / batchSize));
|
|
92
|
+
const requestedPage = page || 1;
|
|
93
|
+
const adjustedPage = requestedPage > totalPages ? 1 : requestedPage;
|
|
94
|
+
const findArgs = {
|
|
95
|
+
collection: collectionSlug,
|
|
96
|
+
depth: 1,
|
|
97
|
+
draft,
|
|
98
|
+
limit: batchSize,
|
|
99
|
+
locale,
|
|
100
|
+
overrideAccess: false,
|
|
101
|
+
page: 0,
|
|
102
|
+
select,
|
|
103
|
+
sort,
|
|
104
|
+
user,
|
|
105
|
+
where
|
|
106
|
+
};
|
|
107
|
+
if (debug) {
|
|
108
|
+
req.payload.logger.debug({
|
|
109
|
+
message: 'Find arguments:',
|
|
110
|
+
findArgs
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
const toCSVFunctions = getExportFieldFunctions({
|
|
114
|
+
fields: collectionConfig.flattenedFields
|
|
115
|
+
});
|
|
116
|
+
const disabledFields = collectionConfig.admin?.custom?.['plugin-import-export']?.disabledFields ?? [];
|
|
117
|
+
const disabledRegexes = disabledFields.map(buildDisabledFieldRegex);
|
|
118
|
+
const filterDisabledCSV = (row)=>{
|
|
119
|
+
const filtered = {};
|
|
120
|
+
for (const [key, value] of Object.entries(row)){
|
|
121
|
+
const isDisabled = disabledRegexes.some((regex)=>regex.test(key));
|
|
122
|
+
if (!isDisabled) {
|
|
123
|
+
filtered[key] = value;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return filtered;
|
|
127
|
+
};
|
|
128
|
+
const filterDisabledJSON = (doc, parentPath = '')=>{
|
|
129
|
+
if (Array.isArray(doc)) {
|
|
130
|
+
return doc.map((item)=>filterDisabledJSON(item, parentPath));
|
|
131
|
+
}
|
|
132
|
+
if (typeof doc !== 'object' || doc === null) {
|
|
133
|
+
return doc;
|
|
134
|
+
}
|
|
135
|
+
const filtered = {};
|
|
136
|
+
for (const [key, value] of Object.entries(doc)){
|
|
137
|
+
const currentPath = parentPath ? `${parentPath}.${key}` : key;
|
|
138
|
+
// Only remove if this exact path is disabled
|
|
139
|
+
const isDisabled = disabledFields.includes(currentPath);
|
|
140
|
+
if (!isDisabled) {
|
|
141
|
+
filtered[key] = filterDisabledJSON(value, currentPath);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return filtered;
|
|
145
|
+
};
|
|
146
|
+
if (download) {
|
|
147
|
+
const limitErrorMsg = validateLimitValue(incomingLimit, req.t);
|
|
148
|
+
if (limitErrorMsg) {
|
|
149
|
+
throw new APIError(limitErrorMsg);
|
|
150
|
+
}
|
|
151
|
+
// Get schema-based columns first (provides base ordering and handles empty exports)
|
|
152
|
+
let schemaColumns = [];
|
|
153
|
+
if (isCSV) {
|
|
154
|
+
const localeCodes = locale === 'all' && payload.config.localization ? payload.config.localization.localeCodes : undefined;
|
|
155
|
+
schemaColumns = getSchemaColumns({
|
|
156
|
+
collectionConfig,
|
|
157
|
+
disabledFields,
|
|
158
|
+
fields,
|
|
159
|
+
locale,
|
|
160
|
+
localeCodes
|
|
161
|
+
});
|
|
162
|
+
if (debug) {
|
|
163
|
+
req.payload.logger.debug({
|
|
164
|
+
columnCount: schemaColumns.length,
|
|
165
|
+
msg: 'Schema-based column inference complete'
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// allColumns will be finalized after first batch (schema + data columns merged)
|
|
170
|
+
let allColumns = [];
|
|
171
|
+
let columnsFinalized = false;
|
|
172
|
+
const encoder = new TextEncoder();
|
|
173
|
+
let isFirstBatch = true;
|
|
174
|
+
let streamPage = adjustedPage;
|
|
175
|
+
let fetched = 0;
|
|
176
|
+
const maxDocs = typeof hardLimit === 'number' ? hardLimit : Number.POSITIVE_INFINITY;
|
|
177
|
+
const stream = new Readable({
|
|
178
|
+
async read () {
|
|
179
|
+
const remaining = Math.max(0, maxDocs - fetched);
|
|
180
|
+
if (remaining === 0) {
|
|
181
|
+
if (!isCSV) {
|
|
182
|
+
// If first batch with no remaining, output empty array; otherwise just close
|
|
183
|
+
this.push(encoder.encode(isFirstBatch ? '[]' : ']'));
|
|
184
|
+
}
|
|
185
|
+
this.push(null);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const result = await payload.find({
|
|
189
|
+
...findArgs,
|
|
190
|
+
page: streamPage,
|
|
191
|
+
limit: Math.min(batchSize, remaining)
|
|
192
|
+
});
|
|
193
|
+
if (debug) {
|
|
194
|
+
req.payload.logger.debug(`Streaming batch ${streamPage} with ${result.docs.length} docs`);
|
|
195
|
+
}
|
|
196
|
+
if (result.docs.length === 0) {
|
|
197
|
+
// Close JSON array properly if JSON
|
|
198
|
+
if (!isCSV) {
|
|
199
|
+
// If first batch with no docs, output empty array; otherwise just close
|
|
200
|
+
this.push(encoder.encode(isFirstBatch ? '[]' : ']'));
|
|
201
|
+
}
|
|
202
|
+
this.push(null);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (isCSV) {
|
|
206
|
+
// --- CSV Streaming ---
|
|
207
|
+
const batchRows = result.docs.map((doc)=>filterDisabledCSV(flattenObject({
|
|
208
|
+
doc,
|
|
209
|
+
fields,
|
|
210
|
+
toCSVFunctions
|
|
211
|
+
})));
|
|
212
|
+
// On first batch, discover additional columns from data and merge with schema
|
|
213
|
+
if (!columnsFinalized) {
|
|
214
|
+
const dataColumns = [];
|
|
215
|
+
const seenCols = new Set();
|
|
216
|
+
for (const row of batchRows){
|
|
217
|
+
for (const key of Object.keys(row)){
|
|
218
|
+
if (!seenCols.has(key)) {
|
|
219
|
+
seenCols.add(key);
|
|
220
|
+
dataColumns.push(key);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Merge schema columns with data-discovered columns
|
|
225
|
+
allColumns = mergeColumns(schemaColumns, dataColumns);
|
|
226
|
+
columnsFinalized = true;
|
|
227
|
+
if (debug) {
|
|
228
|
+
req.payload.logger.debug({
|
|
229
|
+
dataColumnsCount: dataColumns.length,
|
|
230
|
+
finalColumnsCount: allColumns.length,
|
|
231
|
+
msg: 'Merged schema and data columns'
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const paddedRows = batchRows.map((row)=>{
|
|
236
|
+
const fullRow = {};
|
|
237
|
+
for (const col of allColumns){
|
|
238
|
+
fullRow[col] = row[col] ?? '';
|
|
239
|
+
}
|
|
240
|
+
return fullRow;
|
|
241
|
+
});
|
|
242
|
+
const csvString = stringify(paddedRows, {
|
|
243
|
+
header: isFirstBatch,
|
|
244
|
+
columns: allColumns
|
|
245
|
+
});
|
|
246
|
+
this.push(encoder.encode(csvString));
|
|
247
|
+
} else {
|
|
248
|
+
// --- JSON Streaming ---
|
|
249
|
+
const batchRows = result.docs.map((doc)=>filterDisabledJSON(doc));
|
|
250
|
+
// Convert each filtered/flattened row into JSON string
|
|
251
|
+
const batchJSON = batchRows.map((row)=>JSON.stringify(row)).join(',');
|
|
252
|
+
if (isFirstBatch) {
|
|
253
|
+
this.push(encoder.encode('[' + batchJSON));
|
|
254
|
+
} else {
|
|
255
|
+
this.push(encoder.encode(',' + batchJSON));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
fetched += result.docs.length;
|
|
259
|
+
isFirstBatch = false;
|
|
260
|
+
streamPage += 1; // Increment stream page for the next batch
|
|
261
|
+
if (!result.hasNextPage || fetched >= maxDocs) {
|
|
262
|
+
if (debug) {
|
|
263
|
+
req.payload.logger.debug('Stream complete - no more pages');
|
|
264
|
+
}
|
|
265
|
+
if (!isCSV) {
|
|
266
|
+
this.push(encoder.encode(']'));
|
|
267
|
+
}
|
|
268
|
+
this.push(null); // End the stream
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
return new Response(Readable.toWeb(stream), {
|
|
273
|
+
headers: {
|
|
274
|
+
'Content-Disposition': `attachment; filename="${name}"`,
|
|
275
|
+
'Content-Type': isCSV ? 'text/csv' : 'application/json'
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
// Non-download path (buffered export)
|
|
280
|
+
if (debug) {
|
|
281
|
+
req.payload.logger.debug('Starting file generation');
|
|
282
|
+
}
|
|
283
|
+
// Create export batch processor
|
|
284
|
+
const processor = createExportBatchProcessor({
|
|
285
|
+
batchSize,
|
|
286
|
+
debug
|
|
287
|
+
});
|
|
288
|
+
// Transform function based on format
|
|
289
|
+
const transformDoc = (doc)=>isCSV ? filterDisabledCSV(flattenObject({
|
|
290
|
+
doc,
|
|
291
|
+
fields,
|
|
292
|
+
toCSVFunctions
|
|
293
|
+
})) : filterDisabledJSON(doc);
|
|
294
|
+
// Skip fetching if access was denied - we'll create an empty export
|
|
295
|
+
let exportResult = {
|
|
296
|
+
columns: [],
|
|
297
|
+
docs: [],
|
|
298
|
+
fetchedCount: 0
|
|
299
|
+
};
|
|
300
|
+
if (!accessDenied) {
|
|
301
|
+
exportResult = await processor.processExport({
|
|
302
|
+
collectionSlug,
|
|
303
|
+
findArgs: findArgs,
|
|
304
|
+
format,
|
|
305
|
+
maxDocs: typeof hardLimit === 'number' ? hardLimit : Number.POSITIVE_INFINITY,
|
|
306
|
+
req,
|
|
307
|
+
startPage: adjustedPage,
|
|
308
|
+
transformDoc
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
const { columns: dataColumns, docs: rows } = exportResult;
|
|
312
|
+
const outputData = [];
|
|
313
|
+
// Prepare final output
|
|
314
|
+
if (isCSV) {
|
|
315
|
+
// Get schema-based columns for consistent ordering
|
|
316
|
+
const localeCodes = locale === 'all' && payload.config.localization ? payload.config.localization.localeCodes : undefined;
|
|
317
|
+
const schemaColumns = getSchemaColumns({
|
|
318
|
+
collectionConfig,
|
|
319
|
+
disabledFields,
|
|
320
|
+
fields,
|
|
321
|
+
locale,
|
|
322
|
+
localeCodes
|
|
323
|
+
});
|
|
324
|
+
// Merge schema columns with data-discovered columns
|
|
325
|
+
// Schema provides ordering, data provides additional columns (e.g., array indices > 0)
|
|
326
|
+
const finalColumns = mergeColumns(schemaColumns, dataColumns);
|
|
327
|
+
const paddedRows = rows.map((row)=>{
|
|
328
|
+
const fullRow = {};
|
|
329
|
+
for (const col of finalColumns){
|
|
330
|
+
fullRow[col] = row[col] ?? '';
|
|
331
|
+
}
|
|
332
|
+
return fullRow;
|
|
333
|
+
});
|
|
334
|
+
// Always output CSV with header, even if empty
|
|
335
|
+
outputData.push(stringify(paddedRows, {
|
|
336
|
+
header: true,
|
|
337
|
+
columns: finalColumns
|
|
338
|
+
}));
|
|
339
|
+
} else {
|
|
340
|
+
// JSON format
|
|
341
|
+
outputData.push(rows.map((doc)=>JSON.stringify(doc)).join(',\n'));
|
|
342
|
+
}
|
|
343
|
+
// Ensure we always have valid content for the file
|
|
344
|
+
// For JSON, empty exports produce "[]"
|
|
345
|
+
// For CSV, if completely empty (no columns, no rows), produce at least a newline to ensure file creation
|
|
346
|
+
const content = format === 'json' ? `[${outputData.join(',')}]` : outputData.join('');
|
|
347
|
+
const buffer = Buffer.from(content.length > 0 ? content : '\n');
|
|
348
|
+
if (debug) {
|
|
349
|
+
req.payload.logger.debug(`${format} file generation complete`);
|
|
350
|
+
}
|
|
351
|
+
if (!id) {
|
|
352
|
+
if (debug) {
|
|
353
|
+
req.payload.logger.debug('Creating new export file');
|
|
354
|
+
}
|
|
355
|
+
req.file = {
|
|
356
|
+
name,
|
|
357
|
+
data: buffer,
|
|
358
|
+
mimetype: isCSV ? 'text/csv' : 'application/json',
|
|
359
|
+
size: buffer.length
|
|
360
|
+
};
|
|
361
|
+
} else {
|
|
362
|
+
if (debug) {
|
|
363
|
+
req.payload.logger.debug(`Updating existing export with id: ${id}`);
|
|
364
|
+
}
|
|
365
|
+
await req.payload.update({
|
|
366
|
+
id,
|
|
367
|
+
collection: exportsCollection,
|
|
368
|
+
data: {},
|
|
369
|
+
file: {
|
|
370
|
+
name,
|
|
371
|
+
data: buffer,
|
|
372
|
+
mimetype: isCSV ? 'text/csv' : 'application/json',
|
|
373
|
+
size: buffer.length
|
|
374
|
+
},
|
|
375
|
+
// Override access only here so that we can be sure the export collection itself is updated as expected
|
|
376
|
+
overrideAccess: true,
|
|
377
|
+
req
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
if (debug) {
|
|
381
|
+
req.payload.logger.debug('Export process completed successfully');
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
//# sourceMappingURL=createExport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/export/createExport.ts"],"sourcesContent":["/* eslint-disable perfectionist/sort-objects */\nimport type { PayloadRequest, Sort, TypedUser, Where } from '@ruya.sa/payload'\n\nimport { stringify } from 'csv-stringify/sync'\nimport { APIError } from '@ruya.sa/payload'\nimport { Readable } from 'stream'\n\nimport { buildDisabledFieldRegex } from '../utilities/buildDisabledFieldRegex.js'\nimport { flattenObject } from '../utilities/flattenObject.js'\nimport { getExportFieldFunctions } from '../utilities/getExportFieldFunctions.js'\nimport { getFilename } from '../utilities/getFilename.js'\nimport { getSchemaColumns, mergeColumns } from '../utilities/getSchemaColumns.js'\nimport { getSelect } from '../utilities/getSelect.js'\nimport { validateLimitValue } from '../utilities/validateLimitValue.js'\nimport { createExportBatchProcessor, type ExportFindArgs } from './batchProcessor.js'\n\nexport type Export = {\n /**\n * Number of documents to process in each batch during export\n * @default 100\n */\n batchSize?: number\n collectionSlug: string\n /**\n * If true, enables debug logging\n */\n debug?: boolean\n drafts?: 'no' | 'yes'\n exportsCollection: string\n fields?: string[]\n format: 'csv' | 'json'\n globals?: string[]\n id: number | string\n limit?: number\n locale?: string\n name: string\n page?: number\n slug: string\n sort: Sort\n userCollection: string\n userID: number | string\n where?: Where\n}\n\nexport type CreateExportArgs = {\n /**\n * If true, stream the file instead of saving it\n */\n download?: boolean\n req: PayloadRequest\n} & Export\n\nexport const createExport = async (args: CreateExportArgs) => {\n const {\n id,\n name: nameArg,\n batchSize = 100,\n collectionSlug,\n debug = false,\n download,\n drafts: draftsFromInput,\n exportsCollection,\n fields,\n format,\n limit: incomingLimit,\n locale: localeFromInput,\n page,\n req,\n sort,\n userCollection,\n userID,\n where: whereFromInput = {},\n } = args\n const { locale: localeFromReq, payload } = req\n\n if (debug) {\n req.payload.logger.debug({\n message: 'Starting export process with args:',\n collectionSlug,\n draft: draftsFromInput,\n fields,\n format,\n })\n }\n\n const locale = localeFromInput ?? localeFromReq\n const collectionConfig = payload.config.collections.find(({ slug }) => slug === collectionSlug)\n\n if (!collectionConfig) {\n throw new APIError(`Collection with slug ${collectionSlug} not found.`)\n }\n\n let user: TypedUser | undefined\n\n if (userCollection && userID) {\n user = (await req.payload.findByID({\n id: userID,\n collection: userCollection,\n overrideAccess: true,\n })) as TypedUser\n }\n\n if (!user && req.user) {\n user = req?.user?.id ? req.user : req?.user?.user\n }\n\n if (!user) {\n throw new APIError('User authentication is required to create exports.')\n }\n\n const draft = draftsFromInput === 'yes'\n const hasVersions = Boolean(collectionConfig.versions)\n\n // Only filter by _status for versioned collections\n const publishedWhere: Where = hasVersions ? { _status: { equals: 'published' } } : {}\n\n const where: Where = {\n and: [whereFromInput, draft ? {} : publishedWhere],\n }\n\n const name = `${nameArg ?? `${getFilename()}-${collectionSlug}`}.${format}`\n const isCSV = format === 'csv'\n const select = Array.isArray(fields) && fields.length > 0 ? getSelect(fields) : undefined\n\n if (debug) {\n req.payload.logger.debug({ message: 'Export configuration:', name, isCSV, locale })\n }\n\n const hardLimit =\n typeof incomingLimit === 'number' && incomingLimit > 0 ? incomingLimit : undefined\n\n // Try to count documents - if access is denied, treat as 0 documents\n let totalDocs = 0\n let accessDenied = false\n try {\n const countResult = await payload.count({\n collection: collectionSlug,\n user,\n locale,\n overrideAccess: false,\n })\n totalDocs = countResult.totalDocs\n } catch (error) {\n // Access denied - user can't read from this collection\n // We'll create an empty export file\n accessDenied = true\n if (debug) {\n req.payload.logger.debug({\n message: 'Access denied for collection, creating empty export',\n collectionSlug,\n })\n }\n }\n\n const totalPages = Math.max(1, Math.ceil(totalDocs / batchSize))\n const requestedPage = page || 1\n const adjustedPage = requestedPage > totalPages ? 1 : requestedPage\n\n const findArgs = {\n collection: collectionSlug,\n depth: 1,\n draft,\n limit: batchSize,\n locale,\n overrideAccess: false,\n page: 0, // The page will be incremented manually in the loop\n select,\n sort,\n user,\n where,\n }\n\n if (debug) {\n req.payload.logger.debug({ message: 'Find arguments:', findArgs })\n }\n\n const toCSVFunctions = getExportFieldFunctions({\n fields: collectionConfig.flattenedFields,\n })\n\n const disabledFields =\n collectionConfig.admin?.custom?.['plugin-import-export']?.disabledFields ?? []\n\n const disabledRegexes: RegExp[] = disabledFields.map(buildDisabledFieldRegex)\n\n const filterDisabledCSV = (row: Record<string, unknown>): Record<string, unknown> => {\n const filtered: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(row)) {\n const isDisabled = disabledRegexes.some((regex) => regex.test(key))\n if (!isDisabled) {\n filtered[key] = value\n }\n }\n\n return filtered\n }\n\n const filterDisabledJSON = (doc: any, parentPath = ''): any => {\n if (Array.isArray(doc)) {\n return doc.map((item) => filterDisabledJSON(item, parentPath))\n }\n\n if (typeof doc !== 'object' || doc === null) {\n return doc\n }\n\n const filtered: Record<string, any> = {}\n for (const [key, value] of Object.entries(doc)) {\n const currentPath = parentPath ? `${parentPath}.${key}` : key\n\n // Only remove if this exact path is disabled\n const isDisabled = disabledFields.includes(currentPath)\n\n if (!isDisabled) {\n filtered[key] = filterDisabledJSON(value, currentPath)\n }\n }\n\n return filtered\n }\n\n if (download) {\n const limitErrorMsg = validateLimitValue(incomingLimit, req.t)\n if (limitErrorMsg) {\n throw new APIError(limitErrorMsg)\n }\n\n // Get schema-based columns first (provides base ordering and handles empty exports)\n let schemaColumns: string[] = []\n if (isCSV) {\n const localeCodes =\n locale === 'all' && payload.config.localization\n ? payload.config.localization.localeCodes\n : undefined\n\n schemaColumns = getSchemaColumns({\n collectionConfig,\n disabledFields,\n fields,\n locale,\n localeCodes,\n })\n\n if (debug) {\n req.payload.logger.debug({\n columnCount: schemaColumns.length,\n msg: 'Schema-based column inference complete',\n })\n }\n }\n\n // allColumns will be finalized after first batch (schema + data columns merged)\n let allColumns: string[] = []\n let columnsFinalized = false\n\n const encoder = new TextEncoder()\n let isFirstBatch = true\n let streamPage = adjustedPage\n let fetched = 0\n const maxDocs = typeof hardLimit === 'number' ? hardLimit : Number.POSITIVE_INFINITY\n\n const stream = new Readable({\n async read() {\n const remaining = Math.max(0, maxDocs - fetched)\n\n if (remaining === 0) {\n if (!isCSV) {\n // If first batch with no remaining, output empty array; otherwise just close\n this.push(encoder.encode(isFirstBatch ? '[]' : ']'))\n }\n this.push(null)\n return\n }\n\n const result = await payload.find({\n ...findArgs,\n page: streamPage,\n limit: Math.min(batchSize, remaining),\n })\n\n if (debug) {\n req.payload.logger.debug(`Streaming batch ${streamPage} with ${result.docs.length} docs`)\n }\n\n if (result.docs.length === 0) {\n // Close JSON array properly if JSON\n if (!isCSV) {\n // If first batch with no docs, output empty array; otherwise just close\n this.push(encoder.encode(isFirstBatch ? '[]' : ']'))\n }\n this.push(null)\n return\n }\n\n if (isCSV) {\n // --- CSV Streaming ---\n const batchRows = result.docs.map((doc) =>\n filterDisabledCSV(flattenObject({ doc, fields, toCSVFunctions })),\n )\n\n // On first batch, discover additional columns from data and merge with schema\n if (!columnsFinalized) {\n const dataColumns: string[] = []\n const seenCols = new Set<string>()\n for (const row of batchRows) {\n for (const key of Object.keys(row)) {\n if (!seenCols.has(key)) {\n seenCols.add(key)\n dataColumns.push(key)\n }\n }\n }\n // Merge schema columns with data-discovered columns\n allColumns = mergeColumns(schemaColumns, dataColumns)\n columnsFinalized = true\n\n if (debug) {\n req.payload.logger.debug({\n dataColumnsCount: dataColumns.length,\n finalColumnsCount: allColumns.length,\n msg: 'Merged schema and data columns',\n })\n }\n }\n\n const paddedRows = batchRows.map((row) => {\n const fullRow: Record<string, unknown> = {}\n for (const col of allColumns) {\n fullRow[col] = row[col] ?? ''\n }\n return fullRow\n })\n\n const csvString = stringify(paddedRows, {\n header: isFirstBatch,\n columns: allColumns,\n })\n\n this.push(encoder.encode(csvString))\n } else {\n // --- JSON Streaming ---\n const batchRows = result.docs.map((doc) => filterDisabledJSON(doc))\n\n // Convert each filtered/flattened row into JSON string\n const batchJSON = batchRows.map((row) => JSON.stringify(row)).join(',')\n\n if (isFirstBatch) {\n this.push(encoder.encode('[' + batchJSON))\n } else {\n this.push(encoder.encode(',' + batchJSON))\n }\n }\n\n fetched += result.docs.length\n isFirstBatch = false\n streamPage += 1 // Increment stream page for the next batch\n\n if (!result.hasNextPage || fetched >= maxDocs) {\n if (debug) {\n req.payload.logger.debug('Stream complete - no more pages')\n }\n if (!isCSV) {\n this.push(encoder.encode(']'))\n }\n this.push(null) // End the stream\n }\n },\n })\n\n return new Response(Readable.toWeb(stream) as ReadableStream, {\n headers: {\n 'Content-Disposition': `attachment; filename=\"${name}\"`,\n 'Content-Type': isCSV ? 'text/csv' : 'application/json',\n },\n })\n }\n\n // Non-download path (buffered export)\n if (debug) {\n req.payload.logger.debug('Starting file generation')\n }\n\n // Create export batch processor\n const processor = createExportBatchProcessor({ batchSize, debug })\n\n // Transform function based on format\n const transformDoc = (doc: unknown) =>\n isCSV\n ? filterDisabledCSV(flattenObject({ doc, fields, toCSVFunctions }))\n : filterDisabledJSON(doc)\n\n // Skip fetching if access was denied - we'll create an empty export\n let exportResult = {\n columns: [] as string[],\n docs: [] as Record<string, unknown>[],\n fetchedCount: 0,\n }\n\n if (!accessDenied) {\n exportResult = await processor.processExport({\n collectionSlug,\n findArgs: findArgs as ExportFindArgs,\n format,\n maxDocs: typeof hardLimit === 'number' ? hardLimit : Number.POSITIVE_INFINITY,\n req,\n startPage: adjustedPage,\n transformDoc,\n })\n }\n\n const { columns: dataColumns, docs: rows } = exportResult\n const outputData: string[] = []\n\n // Prepare final output\n if (isCSV) {\n // Get schema-based columns for consistent ordering\n const localeCodes =\n locale === 'all' && payload.config.localization\n ? payload.config.localization.localeCodes\n : undefined\n\n const schemaColumns = getSchemaColumns({\n collectionConfig,\n disabledFields,\n fields,\n locale,\n localeCodes,\n })\n\n // Merge schema columns with data-discovered columns\n // Schema provides ordering, data provides additional columns (e.g., array indices > 0)\n const finalColumns = mergeColumns(schemaColumns, dataColumns)\n\n const paddedRows = rows.map((row) => {\n const fullRow: Record<string, unknown> = {}\n for (const col of finalColumns) {\n fullRow[col] = row[col] ?? ''\n }\n return fullRow\n })\n\n // Always output CSV with header, even if empty\n outputData.push(\n stringify(paddedRows, {\n header: true,\n columns: finalColumns,\n }),\n )\n } else {\n // JSON format\n outputData.push(rows.map((doc) => JSON.stringify(doc)).join(',\\n'))\n }\n\n // Ensure we always have valid content for the file\n // For JSON, empty exports produce \"[]\"\n // For CSV, if completely empty (no columns, no rows), produce at least a newline to ensure file creation\n const content = format === 'json' ? `[${outputData.join(',')}]` : outputData.join('')\n const buffer = Buffer.from(content.length > 0 ? content : '\\n')\n if (debug) {\n req.payload.logger.debug(`${format} file generation complete`)\n }\n\n if (!id) {\n if (debug) {\n req.payload.logger.debug('Creating new export file')\n }\n req.file = {\n name,\n data: buffer,\n mimetype: isCSV ? 'text/csv' : 'application/json',\n size: buffer.length,\n }\n } else {\n if (debug) {\n req.payload.logger.debug(`Updating existing export with id: ${id}`)\n }\n await req.payload.update({\n id,\n collection: exportsCollection,\n data: {},\n file: {\n name,\n data: buffer,\n mimetype: isCSV ? 'text/csv' : 'application/json',\n size: buffer.length,\n },\n // Override access only here so that we can be sure the export collection itself is updated as expected\n overrideAccess: true,\n req,\n })\n }\n if (debug) {\n req.payload.logger.debug('Export process completed successfully')\n }\n}\n"],"names":["stringify","APIError","Readable","buildDisabledFieldRegex","flattenObject","getExportFieldFunctions","getFilename","getSchemaColumns","mergeColumns","getSelect","validateLimitValue","createExportBatchProcessor","createExport","args","id","name","nameArg","batchSize","collectionSlug","debug","download","drafts","draftsFromInput","exportsCollection","fields","format","limit","incomingLimit","locale","localeFromInput","page","req","sort","userCollection","userID","where","whereFromInput","localeFromReq","payload","logger","message","draft","collectionConfig","config","collections","find","slug","user","findByID","collection","overrideAccess","hasVersions","Boolean","versions","publishedWhere","_status","equals","and","isCSV","select","Array","isArray","length","undefined","hardLimit","totalDocs","accessDenied","countResult","count","error","totalPages","Math","max","ceil","requestedPage","adjustedPage","findArgs","depth","toCSVFunctions","flattenedFields","disabledFields","admin","custom","disabledRegexes","map","filterDisabledCSV","row","filtered","key","value","Object","entries","isDisabled","some","regex","test","filterDisabledJSON","doc","parentPath","item","currentPath","includes","limitErrorMsg","t","schemaColumns","localeCodes","localization","columnCount","msg","allColumns","columnsFinalized","encoder","TextEncoder","isFirstBatch","streamPage","fetched","maxDocs","Number","POSITIVE_INFINITY","stream","read","remaining","push","encode","result","min","docs","batchRows","dataColumns","seenCols","Set","keys","has","add","dataColumnsCount","finalColumnsCount","paddedRows","fullRow","col","csvString","header","columns","batchJSON","JSON","join","hasNextPage","Response","toWeb","headers","processor","transformDoc","exportResult","fetchedCount","processExport","startPage","rows","outputData","finalColumns","content","buffer","Buffer","from","file","data","mimetype","size","update"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Config, TaskConfig } from '@ruya.sa/payload';
|
|
2
|
+
import type { Export } from './createExport.js';
|
|
3
|
+
/**
|
|
4
|
+
* Export input type for job queue serialization.
|
|
5
|
+
* When exports are queued as jobs, the user must be serialized as an ID string or number
|
|
6
|
+
* along with the collection name so it can be rehydrated when the job runs.
|
|
7
|
+
*/
|
|
8
|
+
export type ExportJobInput = {
|
|
9
|
+
user: number | string;
|
|
10
|
+
userCollection: string;
|
|
11
|
+
} & Export;
|
|
12
|
+
export declare const getCreateCollectionExportTask: (config: Config) => TaskConfig<{
|
|
13
|
+
input: ExportJobInput;
|
|
14
|
+
output: object;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=getCreateExportCollectionTask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCreateExportCollectionTask.d.ts","sourceRoot":"","sources":["../../src/export/getCreateExportCollectionTask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAK/C;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;CACvB,GAAG,MAAM,CAAA;AAEV,eAAO,MAAM,6BAA6B,WAChC,MAAM,KACb,UAAU,CAAC;IACZ,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf,CAoCA,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createExport } from './createExport.js';
|
|
2
|
+
import { getFields } from './getFields.js';
|
|
3
|
+
export const getCreateCollectionExportTask = (config)=>{
|
|
4
|
+
const inputSchema = getFields(config).concat({
|
|
5
|
+
name: 'userID',
|
|
6
|
+
type: 'text'
|
|
7
|
+
}, {
|
|
8
|
+
name: 'userCollection',
|
|
9
|
+
type: 'text'
|
|
10
|
+
}, {
|
|
11
|
+
name: 'exportsCollection',
|
|
12
|
+
type: 'text'
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
slug: 'createCollectionExport',
|
|
16
|
+
handler: async ({ input, req })=>{
|
|
17
|
+
if (!input) {
|
|
18
|
+
req.payload.logger.error('No input provided to createCollectionExport task');
|
|
19
|
+
return {
|
|
20
|
+
output: {}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
await createExport({
|
|
24
|
+
...input,
|
|
25
|
+
req
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
output: {}
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
inputSchema
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=getCreateExportCollectionTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/export/getCreateExportCollectionTask.ts"],"sourcesContent":["import type { Config, TaskConfig } from '@ruya.sa/payload'\n\nimport type { Export } from './createExport.js'\n\nimport { createExport } from './createExport.js'\nimport { getFields } from './getFields.js'\n\n/**\n * Export input type for job queue serialization.\n * When exports are queued as jobs, the user must be serialized as an ID string or number\n * along with the collection name so it can be rehydrated when the job runs.\n */\nexport type ExportJobInput = {\n user: number | string\n userCollection: string\n} & Export\n\nexport const getCreateCollectionExportTask = (\n config: Config,\n): TaskConfig<{\n input: ExportJobInput\n output: object\n}> => {\n const inputSchema = getFields(config).concat(\n {\n name: 'userID',\n type: 'text',\n },\n {\n name: 'userCollection',\n type: 'text',\n },\n {\n name: 'exportsCollection',\n type: 'text',\n },\n )\n\n return {\n slug: 'createCollectionExport',\n handler: async ({ input, req }) => {\n if (!input) {\n req.payload.logger.error('No input provided to createCollectionExport task')\n\n return { output: {} }\n }\n\n await createExport({\n ...input,\n req,\n })\n\n return {\n output: {},\n }\n },\n inputSchema,\n }\n}\n"],"names":["createExport","getFields","getCreateCollectionExportTask","config","inputSchema","concat","name","type","slug","handler","input","req","payload","logger","error","output"],"mappings":"AAIA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,SAAS,QAAQ,iBAAgB;AAY1C,OAAO,MAAMC,gCAAgC,CAC3CC;IAKA,MAAMC,cAAcH,UAAUE,QAAQE,MAAM,CAC1C;QACEC,MAAM;QACNC,MAAM;IACR,GACA;QACED,MAAM;QACNC,MAAM;IACR,GACA;QACED,MAAM;QACNC,MAAM;IACR;IAGF,OAAO;QACLC,MAAM;QACNC,SAAS,OAAO,EAAEC,KAAK,EAAEC,GAAG,EAAE;YAC5B,IAAI,CAACD,OAAO;gBACVC,IAAIC,OAAO,CAACC,MAAM,CAACC,KAAK,CAAC;gBAEzB,OAAO;oBAAEC,QAAQ,CAAC;gBAAE;YACtB;YAEA,MAAMf,aAAa;gBACjB,GAAGU,KAAK;gBACRC;YACF;YAEA,OAAO;gBACLI,QAAQ,CAAC;YACX;QACF;QACAX;IACF;AACF,EAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CollectionConfig, Config } from '@ruya.sa/payload';
|
|
2
|
+
import type { ExportConfig, ImportExportPluginConfig } from '../types.js';
|
|
3
|
+
export declare const getExportCollection: ({ config, exportConfig, pluginConfig, }: {
|
|
4
|
+
config: Config;
|
|
5
|
+
exportConfig?: ExportConfig;
|
|
6
|
+
pluginConfig: ImportExportPluginConfig;
|
|
7
|
+
}) => CollectionConfig;
|
|
8
|
+
//# sourceMappingURL=getExportCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getExportCollection.d.ts","sourceRoot":"","sources":["../../src/export/getExportCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,gBAAgB,EAChB,MAAM,EACP,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAQzE,eAAO,MAAM,mBAAmB,4CAI7B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,YAAY,EAAE,wBAAwB,CAAA;CACvC,KAAG,gBAmGH,CAAA"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createExport } from './createExport.js';
|
|
2
|
+
import { getFields } from './getFields.js';
|
|
3
|
+
import { handleDownload } from './handleDownload.js';
|
|
4
|
+
import { handlePreview } from './handlePreview.js';
|
|
5
|
+
export const getExportCollection = ({ config, exportConfig, pluginConfig })=>{
|
|
6
|
+
const beforeOperation = [];
|
|
7
|
+
const afterChange = [];
|
|
8
|
+
// Extract export-specific settings
|
|
9
|
+
const disableDownload = exportConfig?.disableDownload ?? false;
|
|
10
|
+
const disableSave = exportConfig?.disableSave ?? false;
|
|
11
|
+
const disableJobsQueue = exportConfig?.disableJobsQueue ?? false;
|
|
12
|
+
const batchSize = exportConfig?.batchSize ?? 100;
|
|
13
|
+
const format = exportConfig?.format;
|
|
14
|
+
const collection = {
|
|
15
|
+
slug: 'exports',
|
|
16
|
+
access: {
|
|
17
|
+
update: ()=>false
|
|
18
|
+
},
|
|
19
|
+
admin: {
|
|
20
|
+
components: {
|
|
21
|
+
edit: {
|
|
22
|
+
SaveButton: '@ruya.sa/plugin-import-export/rsc#ExportSaveButton'
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
custom: {
|
|
26
|
+
disableDownload,
|
|
27
|
+
disableSave,
|
|
28
|
+
format
|
|
29
|
+
},
|
|
30
|
+
disableCopyToLocale: true,
|
|
31
|
+
group: false,
|
|
32
|
+
useAsTitle: 'name'
|
|
33
|
+
},
|
|
34
|
+
disableDuplicate: true,
|
|
35
|
+
endpoints: [
|
|
36
|
+
{
|
|
37
|
+
handler: (req)=>handleDownload(req, pluginConfig.debug),
|
|
38
|
+
method: 'post',
|
|
39
|
+
path: '/download'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
handler: handlePreview,
|
|
43
|
+
method: 'post',
|
|
44
|
+
path: '/export-preview'
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
fields: getFields(config, {
|
|
48
|
+
format
|
|
49
|
+
}),
|
|
50
|
+
hooks: {
|
|
51
|
+
afterChange,
|
|
52
|
+
beforeOperation
|
|
53
|
+
},
|
|
54
|
+
lockDocuments: false,
|
|
55
|
+
upload: {
|
|
56
|
+
filesRequiredOnCreate: false,
|
|
57
|
+
hideFileInputOnCreate: true,
|
|
58
|
+
hideRemoveFile: true
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
if (disableJobsQueue) {
|
|
62
|
+
beforeOperation.push(async ({ args, collection: collectionConfig, operation, req })=>{
|
|
63
|
+
if (operation !== 'create') {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const { user } = req;
|
|
67
|
+
const debug = pluginConfig.debug;
|
|
68
|
+
await createExport({
|
|
69
|
+
...args.data,
|
|
70
|
+
batchSize,
|
|
71
|
+
debug,
|
|
72
|
+
exportsCollection: collectionConfig.slug,
|
|
73
|
+
req,
|
|
74
|
+
userCollection: user?.collection || user?.user?.collection,
|
|
75
|
+
userID: user?.id || user?.user?.id
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
} else {
|
|
79
|
+
afterChange.push(async ({ collection: collectionConfig, doc, operation, req })=>{
|
|
80
|
+
if (operation !== 'create') {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const { user } = req;
|
|
84
|
+
const input = {
|
|
85
|
+
...doc,
|
|
86
|
+
batchSize,
|
|
87
|
+
exportsCollection: collectionConfig.slug,
|
|
88
|
+
userCollection: user?.collection || user?.user?.collection,
|
|
89
|
+
userID: user?.id || user?.user?.id
|
|
90
|
+
};
|
|
91
|
+
await req.payload.jobs.queue({
|
|
92
|
+
input,
|
|
93
|
+
task: 'createCollectionExport'
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return collection;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=getExportCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/export/getExportCollection.ts"],"sourcesContent":["import type {\n CollectionAfterChangeHook,\n CollectionBeforeOperationHook,\n CollectionConfig,\n Config,\n} from '@ruya.sa/payload'\n\nimport type { ExportConfig, ImportExportPluginConfig } from '../types.js'\nimport type { Export } from './createExport.js'\n\nimport { createExport } from './createExport.js'\nimport { getFields } from './getFields.js'\nimport { handleDownload } from './handleDownload.js'\nimport { handlePreview } from './handlePreview.js'\n\nexport const getExportCollection = ({\n config,\n exportConfig,\n pluginConfig,\n}: {\n config: Config\n exportConfig?: ExportConfig\n pluginConfig: ImportExportPluginConfig\n}): CollectionConfig => {\n const beforeOperation: CollectionBeforeOperationHook[] = []\n const afterChange: CollectionAfterChangeHook[] = []\n\n // Extract export-specific settings\n const disableDownload = exportConfig?.disableDownload ?? false\n const disableSave = exportConfig?.disableSave ?? false\n const disableJobsQueue = exportConfig?.disableJobsQueue ?? false\n const batchSize = exportConfig?.batchSize ?? 100\n const format = exportConfig?.format\n\n const collection: CollectionConfig = {\n slug: 'exports',\n access: {\n update: () => false,\n },\n admin: {\n components: {\n edit: {\n SaveButton: '@ruya.sa/plugin-import-export/rsc#ExportSaveButton',\n },\n },\n custom: {\n disableDownload,\n disableSave,\n format,\n },\n disableCopyToLocale: true,\n group: false,\n useAsTitle: 'name',\n },\n disableDuplicate: true,\n endpoints: [\n {\n handler: (req) => handleDownload(req, pluginConfig.debug),\n method: 'post',\n path: '/download',\n },\n {\n handler: handlePreview,\n method: 'post',\n path: '/export-preview',\n },\n ],\n fields: getFields(config, { format }),\n hooks: {\n afterChange,\n beforeOperation,\n },\n lockDocuments: false,\n upload: {\n filesRequiredOnCreate: false,\n hideFileInputOnCreate: true,\n hideRemoveFile: true,\n },\n }\n\n if (disableJobsQueue) {\n beforeOperation.push(async ({ args, collection: collectionConfig, operation, req }) => {\n if (operation !== 'create') {\n return\n }\n const { user } = req\n const debug = pluginConfig.debug\n\n await createExport({\n ...(args.data as Export),\n batchSize,\n debug,\n exportsCollection: collectionConfig.slug,\n req,\n userCollection: user?.collection || user?.user?.collection,\n userID: user?.id || user?.user?.id,\n })\n })\n } else {\n afterChange.push(async ({ collection: collectionConfig, doc, operation, req }) => {\n if (operation !== 'create') {\n return\n }\n\n const { user } = req\n\n const input: Export = {\n ...doc,\n batchSize,\n exportsCollection: collectionConfig.slug,\n userCollection: user?.collection || user?.user?.collection,\n userID: user?.id || user?.user?.id,\n }\n\n await req.payload.jobs.queue({\n input,\n task: 'createCollectionExport',\n })\n })\n }\n\n return collection\n}\n"],"names":["createExport","getFields","handleDownload","handlePreview","getExportCollection","config","exportConfig","pluginConfig","beforeOperation","afterChange","disableDownload","disableSave","disableJobsQueue","batchSize","format","collection","slug","access","update","admin","components","edit","SaveButton","custom","disableCopyToLocale","group","useAsTitle","disableDuplicate","endpoints","handler","req","debug","method","path","fields","hooks","lockDocuments","upload","filesRequiredOnCreate","hideFileInputOnCreate","hideRemoveFile","push","args","collectionConfig","operation","user","data","exportsCollection","userCollection","userID","id","doc","input","payload","jobs","queue","task"],"mappings":"AAUA,SAASA,YAAY,QAAQ,oBAAmB;AAChD,SAASC,SAAS,QAAQ,iBAAgB;AAC1C,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,aAAa,QAAQ,qBAAoB;AAElD,OAAO,MAAMC,sBAAsB,CAAC,EAClCC,MAAM,EACNC,YAAY,EACZC,YAAY,EAKb;IACC,MAAMC,kBAAmD,EAAE;IAC3D,MAAMC,cAA2C,EAAE;IAEnD,mCAAmC;IACnC,MAAMC,kBAAkBJ,cAAcI,mBAAmB;IACzD,MAAMC,cAAcL,cAAcK,eAAe;IACjD,MAAMC,mBAAmBN,cAAcM,oBAAoB;IAC3D,MAAMC,YAAYP,cAAcO,aAAa;IAC7C,MAAMC,SAASR,cAAcQ;IAE7B,MAAMC,aAA+B;QACnCC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;QAChB;QACAC,OAAO;YACLC,YAAY;gBACVC,MAAM;oBACJC,YAAY;gBACd;YACF;YACAC,QAAQ;gBACNb;gBACAC;gBACAG;YACF;YACAU,qBAAqB;YACrBC,OAAO;YACPC,YAAY;QACd;QACAC,kBAAkB;QAClBC,WAAW;YACT;gBACEC,SAAS,CAACC,MAAQ5B,eAAe4B,KAAKvB,aAAawB,KAAK;gBACxDC,QAAQ;gBACRC,MAAM;YACR;YACA;gBACEJ,SAAS1B;gBACT6B,QAAQ;gBACRC,MAAM;YACR;SACD;QACDC,QAAQjC,UAAUI,QAAQ;YAAES;QAAO;QACnCqB,OAAO;YACL1B;YACAD;QACF;QACA4B,eAAe;QACfC,QAAQ;YACNC,uBAAuB;YACvBC,uBAAuB;YACvBC,gBAAgB;QAClB;IACF;IAEA,IAAI5B,kBAAkB;QACpBJ,gBAAgBiC,IAAI,CAAC,OAAO,EAAEC,IAAI,EAAE3B,YAAY4B,gBAAgB,EAAEC,SAAS,EAAEd,GAAG,EAAE;YAChF,IAAIc,cAAc,UAAU;gBAC1B;YACF;YACA,MAAM,EAAEC,IAAI,EAAE,GAAGf;YACjB,MAAMC,QAAQxB,aAAawB,KAAK;YAEhC,MAAM/B,aAAa;gBACjB,GAAI0C,KAAKI,IAAI;gBACbjC;gBACAkB;gBACAgB,mBAAmBJ,iBAAiB3B,IAAI;gBACxCc;gBACAkB,gBAAgBH,MAAM9B,cAAc8B,MAAMA,MAAM9B;gBAChDkC,QAAQJ,MAAMK,MAAML,MAAMA,MAAMK;YAClC;QACF;IACF,OAAO;QACLzC,YAAYgC,IAAI,CAAC,OAAO,EAAE1B,YAAY4B,gBAAgB,EAAEQ,GAAG,EAAEP,SAAS,EAAEd,GAAG,EAAE;YAC3E,IAAIc,cAAc,UAAU;gBAC1B;YACF;YAEA,MAAM,EAAEC,IAAI,EAAE,GAAGf;YAEjB,MAAMsB,QAAgB;gBACpB,GAAGD,GAAG;gBACNtC;gBACAkC,mBAAmBJ,iBAAiB3B,IAAI;gBACxCgC,gBAAgBH,MAAM9B,cAAc8B,MAAMA,MAAM9B;gBAChDkC,QAAQJ,MAAMK,MAAML,MAAMA,MAAMK;YAClC;YAEA,MAAMpB,IAAIuB,OAAO,CAACC,IAAI,CAACC,KAAK,CAAC;gBAC3BH;gBACAI,MAAM;YACR;QACF;IACF;IAEA,OAAOzC;AACT,EAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Config, Field } from '@ruya.sa/payload';
|
|
2
|
+
type GetFieldsOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* Force a specific format, hiding the format dropdown
|
|
5
|
+
*/
|
|
6
|
+
format?: 'csv' | 'json';
|
|
7
|
+
};
|
|
8
|
+
export declare const getFields: (config: Config, options?: GetFieldsOptions) => Field[];
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=getFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFields.d.ts","sourceRoot":"","sources":["../../src/export/getFields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAe,MAAM,kBAAkB,CAAA;AAKlE,KAAK,gBAAgB,GAAG;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,SAAS,WAAY,MAAM,YAAY,gBAAgB,KAAG,KAAK,EAwP3E,CAAA"}
|