@payloadcms/next 3.0.0-beta.90 → 3.0.0-beta.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/withPayload.js +111 -0
- package/dist/cjs/withPayload.js.map +1 -0
- package/dist/config.js +0 -1
- package/dist/config.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +15 -9
- package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +100 -35
- package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +74 -63
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/getCustomViews.js +31 -35
- package/dist/elements/DocumentHeader/Tabs/getCustomViews.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/getViewConfig.js +15 -12
- package/dist/elements/DocumentHeader/Tabs/getViewConfig.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.js +86 -79
- package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +32 -13
- package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js +60 -52
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -1
- package/dist/elements/DocumentHeader/index.js +24 -23
- package/dist/elements/DocumentHeader/index.js.map +1 -1
- package/dist/elements/EmailAndUsername/index.js +107 -75
- package/dist/elements/EmailAndUsername/index.js.map +1 -1
- package/dist/elements/LeaveWithoutSaving/index.js +150 -83
- package/dist/elements/LeaveWithoutSaving/index.js.map +1 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.d.ts.map +1 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +119 -101
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
- package/dist/elements/Logo/index.js +36 -21
- package/dist/elements/Logo/index.js.map +1 -1
- package/dist/elements/Nav/NavHamburger/index.js +41 -13
- package/dist/elements/Nav/NavHamburger/index.js.map +1 -1
- package/dist/elements/Nav/NavWrapper/index.js +48 -16
- package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
- package/dist/elements/Nav/index.client.js +149 -76
- package/dist/elements/Nav/index.client.js.map +1 -1
- package/dist/elements/Nav/index.js +56 -50
- package/dist/elements/Nav/index.js.map +1 -1
- package/dist/exports/layouts.js +0 -1
- package/dist/exports/layouts.js.map +1 -1
- package/dist/exports/routes.js +0 -1
- package/dist/exports/routes.js.map +1 -1
- package/dist/exports/templates.js +0 -1
- package/dist/exports/templates.js.map +1 -1
- package/dist/exports/utilities.js +0 -1
- package/dist/exports/utilities.js.map +1 -1
- package/dist/exports/views.js +0 -1
- package/dist/exports/views.js.map +1 -1
- package/dist/fetchAPI-multipart/fileFactory.js +35 -34
- package/dist/fetchAPI-multipart/fileFactory.js.map +1 -1
- package/dist/fetchAPI-multipart/handlers.js +77 -78
- package/dist/fetchAPI-multipart/handlers.js.map +1 -1
- package/dist/fetchAPI-multipart/index.js +33 -31
- package/dist/fetchAPI-multipart/index.js.map +1 -1
- package/dist/fetchAPI-multipart/isEligibleRequest.js +13 -21
- package/dist/fetchAPI-multipart/isEligibleRequest.js.map +1 -1
- package/dist/fetchAPI-multipart/processMultipart.js +158 -141
- package/dist/fetchAPI-multipart/processMultipart.js.map +1 -1
- package/dist/fetchAPI-multipart/processNested.js +23 -21
- package/dist/fetchAPI-multipart/processNested.js.map +1 -1
- package/dist/fetchAPI-multipart/uploadTimer.js +16 -17
- package/dist/fetchAPI-multipart/uploadTimer.js.map +1 -1
- package/dist/fetchAPI-multipart/utilities.js +166 -166
- package/dist/fetchAPI-multipart/utilities.js.map +1 -1
- package/dist/fetchAPI-stream-file/index.js +19 -17
- package/dist/fetchAPI-stream-file/index.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/layouts/Root/index.js +118 -115
- package/dist/layouts/Root/index.js.map +1 -1
- package/dist/prod/styles.css +1 -1
- package/dist/routes/graphql/handler.js +109 -103
- package/dist/routes/graphql/handler.js.map +1 -1
- package/dist/routes/graphql/index.js +0 -1
- package/dist/routes/graphql/index.js.map +1 -1
- package/dist/routes/graphql/playground.js +23 -24
- package/dist/routes/graphql/playground.js.map +1 -1
- package/dist/routes/index.js +0 -1
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/rest/auth/access.js +22 -21
- package/dist/routes/rest/auth/access.js.map +1 -1
- package/dist/routes/rest/auth/forgotPassword.js +29 -25
- package/dist/routes/rest/auth/forgotPassword.js.map +1 -1
- package/dist/routes/rest/auth/init.js +16 -14
- package/dist/routes/rest/auth/init.js.map +1 -1
- package/dist/routes/rest/auth/login.js +43 -38
- package/dist/routes/rest/auth/login.js.map +1 -1
- package/dist/routes/rest/auth/logout.js +31 -27
- package/dist/routes/rest/auth/logout.js.map +1 -1
- package/dist/routes/rest/auth/me.js +23 -21
- package/dist/routes/rest/auth/me.js.map +1 -1
- package/dist/routes/rest/auth/refresh.js +31 -27
- package/dist/routes/rest/auth/refresh.js.map +1 -1
- package/dist/routes/rest/auth/registerFirstUser.js +43 -38
- package/dist/routes/rest/auth/registerFirstUser.js.map +1 -1
- package/dist/routes/rest/auth/resetPassword.js +38 -33
- package/dist/routes/rest/auth/resetPassword.js.map +1 -1
- package/dist/routes/rest/auth/unlock.js +27 -23
- package/dist/routes/rest/auth/unlock.js.map +1 -1
- package/dist/routes/rest/auth/verifyEmail.js +22 -17
- package/dist/routes/rest/auth/verifyEmail.js.map +1 -1
- package/dist/routes/rest/buildFormState.js +38 -37
- package/dist/routes/rest/buildFormState.js.map +1 -1
- package/dist/routes/rest/checkEndpoints.js +11 -9
- package/dist/routes/rest/checkEndpoints.js.map +1 -1
- package/dist/routes/rest/collections/count.js +15 -11
- package/dist/routes/rest/collections/count.js.map +1 -1
- package/dist/routes/rest/collections/create.js +30 -26
- package/dist/routes/rest/collections/create.js.map +1 -1
- package/dist/routes/rest/collections/delete.js +40 -35
- package/dist/routes/rest/collections/delete.js.map +1 -1
- package/dist/routes/rest/collections/deleteByID.js +36 -31
- package/dist/routes/rest/collections/deleteByID.js.map +1 -1
- package/dist/routes/rest/collections/docAccess.js +17 -14
- package/dist/routes/rest/collections/docAccess.js.map +1 -1
- package/dist/routes/rest/collections/duplicate.js +36 -31
- package/dist/routes/rest/collections/duplicate.js.map +1 -1
- package/dist/routes/rest/collections/find.js +29 -20
- package/dist/routes/rest/collections/find.js.map +1 -1
- package/dist/routes/rest/collections/findByID.js +28 -23
- package/dist/routes/rest/collections/findByID.js.map +1 -1
- package/dist/routes/rest/collections/findVersionByID.js +27 -22
- package/dist/routes/rest/collections/findVersionByID.js.map +1 -1
- package/dist/routes/rest/collections/findVersions.js +27 -19
- package/dist/routes/rest/collections/findVersions.js.map +1 -1
- package/dist/routes/rest/collections/preview.js +39 -34
- package/dist/routes/rest/collections/preview.js.map +1 -1
- package/dist/routes/rest/collections/restoreVersion.js +32 -27
- package/dist/routes/rest/collections/restoreVersion.js.map +1 -1
- package/dist/routes/rest/collections/update.js +43 -37
- package/dist/routes/rest/collections/update.js.map +1 -1
- package/dist/routes/rest/collections/updateByID.js +38 -33
- package/dist/routes/rest/collections/updateByID.js.map +1 -1
- package/dist/routes/rest/files/checkFileAccess.js +46 -44
- package/dist/routes/rest/files/checkFileAccess.js.map +1 -1
- package/dist/routes/rest/files/getFile.js +52 -49
- package/dist/routes/rest/files/getFile.js.map +1 -1
- package/dist/routes/rest/files/getFileTypeFallback.js +16 -17
- package/dist/routes/rest/files/getFileTypeFallback.js.map +1 -1
- package/dist/routes/rest/globals/docAccess.js +15 -13
- package/dist/routes/rest/globals/docAccess.js.map +1 -1
- package/dist/routes/rest/globals/findOne.js +22 -18
- package/dist/routes/rest/globals/findOne.js.map +1 -1
- package/dist/routes/rest/globals/findVersionByID.js +22 -17
- package/dist/routes/rest/globals/findVersionByID.js.map +1 -1
- package/dist/routes/rest/globals/findVersions.js +27 -19
- package/dist/routes/rest/globals/findVersions.js.map +1 -1
- package/dist/routes/rest/globals/preview.js +38 -34
- package/dist/routes/rest/globals/preview.js.map +1 -1
- package/dist/routes/rest/globals/restoreVersion.js +27 -22
- package/dist/routes/rest/globals/restoreVersion.js.map +1 -1
- package/dist/routes/rest/globals/update.js +32 -28
- package/dist/routes/rest/globals/update.js.map +1 -1
- package/dist/routes/rest/index.js +651 -626
- package/dist/routes/rest/index.js.map +1 -1
- package/dist/routes/rest/og/image.js +74 -76
- package/dist/routes/rest/og/image.js.map +1 -1
- package/dist/routes/rest/og/index.js +60 -59
- package/dist/routes/rest/og/index.js.map +1 -1
- package/dist/routes/rest/routeError.js +102 -95
- package/dist/routes/rest/routeError.js.map +1 -1
- package/dist/routes/rest/types.js +1 -2
- package/dist/routes/rest/types.js.map +1 -1
- package/dist/routes/rest/utilities/sanitizeCollectionID.js +14 -11
- package/dist/routes/rest/utilities/sanitizeCollectionID.js.map +1 -1
- package/dist/scss/app.scss +4 -4
- package/dist/scss/type.scss +4 -4
- package/dist/templates/Default/NavHamburger/index.js +18 -6
- package/dist/templates/Default/NavHamburger/index.js.map +1 -1
- package/dist/templates/Default/Wrapper/index.js +42 -13
- package/dist/templates/Default/Wrapper/index.js.map +1 -1
- package/dist/templates/Default/index.js +54 -47
- package/dist/templates/Default/index.js.map +1 -1
- package/dist/templates/Minimal/index.js +16 -16
- package/dist/templates/Minimal/index.js.map +1 -1
- package/dist/utilities/addDataAndFileToRequest.js +40 -35
- package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
- package/dist/utilities/addLocalesToRequest.js +44 -36
- package/dist/utilities/addLocalesToRequest.js.map +1 -1
- package/dist/utilities/createPayloadRequest.js +85 -74
- package/dist/utilities/createPayloadRequest.js.map +1 -1
- package/dist/utilities/getNextRequestI18n.js +13 -11
- package/dist/utilities/getNextRequestI18n.js.map +1 -1
- package/dist/utilities/getPayloadHMR.d.ts +1 -1
- package/dist/utilities/getPayloadHMR.d.ts.map +1 -1
- package/dist/utilities/getPayloadHMR.js +91 -94
- package/dist/utilities/getPayloadHMR.js.map +1 -1
- package/dist/utilities/getRequestLanguage.js +16 -13
- package/dist/utilities/getRequestLanguage.js.map +1 -1
- package/dist/utilities/getRequestLocales.js +27 -24
- package/dist/utilities/getRequestLocales.js.map +1 -1
- package/dist/utilities/getRequestTheme.js +16 -16
- package/dist/utilities/getRequestTheme.js.map +1 -1
- package/dist/utilities/headersWithCors.js +21 -30
- package/dist/utilities/headersWithCors.js.map +1 -1
- package/dist/utilities/initPage/handleAdminPage.js +46 -42
- package/dist/utilities/initPage/handleAdminPage.js.map +1 -1
- package/dist/utilities/initPage/handleAuthRedirect.js +45 -32
- package/dist/utilities/initPage/handleAuthRedirect.js.map +1 -1
- package/dist/utilities/initPage/index.js +146 -120
- package/dist/utilities/initPage/index.js.map +1 -1
- package/dist/utilities/initPage/shared.js +26 -25
- package/dist/utilities/initPage/shared.js.map +1 -1
- package/dist/utilities/initPage/types.js +1 -2
- package/dist/utilities/initPage/types.js.map +1 -1
- package/dist/utilities/mergeHeaders.js +8 -9
- package/dist/utilities/mergeHeaders.js.map +1 -1
- package/dist/utilities/meta.js +66 -68
- package/dist/utilities/meta.js.map +1 -1
- package/dist/utilities/timestamp.js +4 -5
- package/dist/utilities/timestamp.js.map +1 -1
- package/dist/views/API/LocaleSelector/index.d.ts.map +1 -1
- package/dist/views/API/LocaleSelector/index.js +38 -11
- package/dist/views/API/LocaleSelector/index.js.map +1 -1
- package/dist/views/API/RenderJSON/index.js +124 -112
- package/dist/views/API/RenderJSON/index.js.map +1 -1
- package/dist/views/API/index.client.js +190 -202
- package/dist/views/API/index.client.js.map +1 -1
- package/dist/views/API/index.js +2 -3
- package/dist/views/API/index.js.map +1 -1
- package/dist/views/API/meta.js +22 -18
- package/dist/views/API/meta.js.map +1 -1
- package/dist/views/Account/Settings/LanguageSelector.js +45 -12
- package/dist/views/Account/Settings/LanguageSelector.js.map +1 -1
- package/dist/views/Account/Settings/index.js +21 -28
- package/dist/views/Account/Settings/index.js.map +1 -1
- package/dist/views/Account/ToggleTheme/index.js +51 -30
- package/dist/views/Account/ToggleTheme/index.js.map +1 -1
- package/dist/views/Account/index.client.js +32 -16
- package/dist/views/Account/index.client.js.map +1 -1
- package/dist/views/Account/index.js +99 -68
- package/dist/views/Account/index.js.map +1 -1
- package/dist/views/Account/meta.js +12 -8
- package/dist/views/Account/meta.js.map +1 -1
- package/dist/views/CreateFirstUser/index.client.js +95 -57
- package/dist/views/CreateFirstUser/index.client.js.map +1 -1
- package/dist/views/CreateFirstUser/index.js +42 -28
- package/dist/views/CreateFirstUser/index.js.map +1 -1
- package/dist/views/CreateFirstUser/meta.js +12 -8
- package/dist/views/CreateFirstUser/meta.js.map +1 -1
- package/dist/views/Dashboard/Default/index.js +132 -115
- package/dist/views/Dashboard/Default/index.js.map +1 -1
- package/dist/views/Dashboard/index.js +61 -52
- package/dist/views/Dashboard/index.js.map +1 -1
- package/dist/views/Dashboard/meta.js +16 -12
- package/dist/views/Dashboard/meta.js.map +1 -1
- package/dist/views/Document/getCustomViewByKey.js +2 -3
- package/dist/views/Document/getCustomViewByKey.js.map +1 -1
- package/dist/views/Document/getCustomViewByRoute.js +30 -27
- package/dist/views/Document/getCustomViewByRoute.js.map +1 -1
- package/dist/views/Document/getDocumentData.js +34 -28
- package/dist/views/Document/getDocumentData.js.map +1 -1
- package/dist/views/Document/getDocumentPermissions.js +83 -74
- package/dist/views/Document/getDocumentPermissions.js.map +1 -1
- package/dist/views/Document/getMetaBySegment.js +113 -107
- package/dist/views/Document/getMetaBySegment.js.map +1 -1
- package/dist/views/Document/getViewsFromConfig.js +309 -331
- package/dist/views/Document/getViewsFromConfig.js.map +1 -1
- package/dist/views/Document/index.d.ts.map +1 -1
- package/dist/views/Document/index.js +193 -159
- package/dist/views/Document/index.js.map +1 -1
- package/dist/views/Document/meta.js +1 -2
- package/dist/views/Document/meta.js.map +1 -1
- package/dist/views/Edit/Default/Auth/APIKey.js +118 -132
- package/dist/views/Edit/Default/Auth/APIKey.js.map +1 -1
- package/dist/views/Edit/Default/Auth/index.js +293 -196
- package/dist/views/Edit/Default/Auth/index.js.map +1 -1
- package/dist/views/Edit/Default/Auth/types.js +1 -2
- package/dist/views/Edit/Default/Auth/types.js.map +1 -1
- package/dist/views/Edit/Default/SetDocumentStepNav/index.js +121 -70
- package/dist/views/Edit/Default/SetDocumentStepNav/index.js.map +1 -1
- package/dist/views/Edit/Default/SetDocumentTitle/index.js +74 -29
- package/dist/views/Edit/Default/SetDocumentTitle/index.js.map +1 -1
- package/dist/views/Edit/Default/index.js +190 -187
- package/dist/views/Edit/Default/index.js.map +1 -1
- package/dist/views/Edit/Default/types.js +1 -2
- package/dist/views/Edit/Default/types.js.map +1 -1
- package/dist/views/Edit/index.client.js +45 -21
- package/dist/views/Edit/index.client.js.map +1 -1
- package/dist/views/Edit/index.js +2 -3
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/Edit/meta.js +43 -35
- package/dist/views/Edit/meta.js.map +1 -1
- package/dist/views/Edit/sanitizeEditViewProps.js +8 -9
- package/dist/views/Edit/sanitizeEditViewProps.js.map +1 -1
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +151 -94
- package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
- package/dist/views/ForgotPassword/index.js +59 -46
- package/dist/views/ForgotPassword/index.js.map +1 -1
- package/dist/views/ForgotPassword/meta.js +12 -8
- package/dist/views/ForgotPassword/meta.js.map +1 -1
- package/dist/views/List/Default/index.js +348 -208
- package/dist/views/List/Default/index.js.map +1 -1
- package/dist/views/List/Default/types.js +1 -2
- package/dist/views/List/Default/types.js.map +1 -1
- package/dist/views/List/index.js +153 -137
- package/dist/views/List/index.js.map +1 -1
- package/dist/views/List/meta.js +20 -17
- package/dist/views/List/meta.js.map +1 -1
- package/dist/views/LivePreview/Context/collisionDetection.js +24 -21
- package/dist/views/LivePreview/Context/collisionDetection.js.map +1 -1
- package/dist/views/LivePreview/Context/context.d.ts +2 -1
- package/dist/views/LivePreview/Context/context.d.ts.map +1 -1
- package/dist/views/LivePreview/Context/context.js +39 -36
- package/dist/views/LivePreview/Context/context.js.map +1 -1
- package/dist/views/LivePreview/Context/index.js +134 -142
- package/dist/views/LivePreview/Context/index.js.map +1 -1
- package/dist/views/LivePreview/Context/sizeReducer.js +18 -19
- package/dist/views/LivePreview/Context/sizeReducer.js.map +1 -1
- package/dist/views/LivePreview/Device/index.js +78 -71
- package/dist/views/LivePreview/Device/index.js.map +1 -1
- package/dist/views/LivePreview/DeviceContainer/index.js +47 -23
- package/dist/views/LivePreview/DeviceContainer/index.js.map +1 -1
- package/dist/views/LivePreview/IFrame/index.js +21 -16
- package/dist/views/LivePreview/IFrame/index.js.map +1 -1
- package/dist/views/LivePreview/Preview/index.js +145 -92
- package/dist/views/LivePreview/Preview/index.js.map +1 -1
- package/dist/views/LivePreview/Toolbar/Controls/index.js +136 -115
- package/dist/views/LivePreview/Toolbar/Controls/index.js.map +1 -1
- package/dist/views/LivePreview/Toolbar/SizeInput/index.js +89 -51
- package/dist/views/LivePreview/Toolbar/SizeInput/index.js.map +1 -1
- package/dist/views/LivePreview/Toolbar/index.js +82 -50
- package/dist/views/LivePreview/Toolbar/index.js.map +1 -1
- package/dist/views/LivePreview/ToolbarArea/index.js +32 -10
- package/dist/views/LivePreview/ToolbarArea/index.js.map +1 -1
- package/dist/views/LivePreview/index.client.js +316 -160
- package/dist/views/LivePreview/index.client.js.map +1 -1
- package/dist/views/LivePreview/index.js +67 -55
- package/dist/views/LivePreview/index.js.map +1 -1
- package/dist/views/LivePreview/meta.js +14 -9
- package/dist/views/LivePreview/meta.js.map +1 -1
- package/dist/views/LivePreview/usePopupWindow.js +91 -94
- package/dist/views/LivePreview/usePopupWindow.js.map +1 -1
- package/dist/views/Login/LoginField/index.js +83 -39
- package/dist/views/Login/LoginField/index.js.map +1 -1
- package/dist/views/Login/LoginForm/index.js +130 -66
- package/dist/views/Login/LoginForm/index.js.map +1 -1
- package/dist/views/Login/index.js +77 -54
- package/dist/views/Login/index.js.map +1 -1
- package/dist/views/Login/meta.js +12 -8
- package/dist/views/Login/meta.js.map +1 -1
- package/dist/views/Logout/LogoutClient.js +84 -39
- package/dist/views/Logout/LogoutClient.js.map +1 -1
- package/dist/views/Logout/index.js +29 -16
- package/dist/views/Logout/index.js.map +1 -1
- package/dist/views/Logout/meta.js +11 -7
- package/dist/views/Logout/meta.js.map +1 -1
- package/dist/views/NotFound/index.client.js +78 -40
- package/dist/views/NotFound/index.client.js.map +1 -1
- package/dist/views/NotFound/index.js +47 -37
- package/dist/views/NotFound/index.js.map +1 -1
- package/dist/views/NotFound/meta.js +9 -7
- package/dist/views/NotFound/meta.js.map +1 -1
- package/dist/views/ResetPassword/index.client.js +97 -59
- package/dist/views/ResetPassword/index.client.js.map +1 -1
- package/dist/views/ResetPassword/index.js +68 -53
- package/dist/views/ResetPassword/index.js.map +1 -1
- package/dist/views/ResetPassword/meta.js +12 -8
- package/dist/views/ResetPassword/meta.js.map +1 -1
- package/dist/views/Root/generateCustomViewMetadata.js +21 -19
- package/dist/views/Root/generateCustomViewMetadata.js.map +1 -1
- package/dist/views/Root/getCustomViewByRoute.js +42 -31
- package/dist/views/Root/getCustomViewByRoute.js.map +1 -1
- package/dist/views/Root/getViewFromConfig.js +162 -156
- package/dist/views/Root/getViewFromConfig.js.map +1 -1
- package/dist/views/Root/index.js +99 -82
- package/dist/views/Root/index.js.map +1 -1
- package/dist/views/Root/isPathMatchingRoute.js +18 -13
- package/dist/views/Root/isPathMatchingRoute.js.map +1 -1
- package/dist/views/Root/meta.js +141 -136
- package/dist/views/Root/meta.js.map +1 -1
- package/dist/views/Unauthorized/index.js +32 -22
- package/dist/views/Unauthorized/index.js.map +1 -1
- package/dist/views/Unauthorized/meta.js +12 -8
- package/dist/views/Unauthorized/meta.js.map +1 -1
- package/dist/views/Verify/index.js +58 -43
- package/dist/views/Verify/index.js.map +1 -1
- package/dist/views/Verify/meta.js +12 -8
- package/dist/views/Verify/meta.js.map +1 -1
- package/dist/views/Version/Default/SetStepNav.d.ts.map +1 -1
- package/dist/views/Version/Default/SetStepNav.js +147 -103
- package/dist/views/Version/Default/SetStepNav.js.map +1 -1
- package/dist/views/Version/Default/index.js +198 -114
- package/dist/views/Version/Default/index.js.map +1 -1
- package/dist/views/Version/Default/types.js +1 -2
- package/dist/views/Version/Default/types.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/Label/index.js +6 -5
- package/dist/views/Version/RenderFieldsToDiff/Label/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +65 -69
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.js +34 -31
- package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +108 -78
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/DiffViewer/index.js +17 -11
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/DiffViewer/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +40 -38
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +42 -32
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/DiffViewer/index.js +17 -11
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/DiffViewer/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +34 -31
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/diffMethods.js +4 -5
- package/dist/views/Version/RenderFieldsToDiff/fields/diffMethods.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js +20 -21
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/styles.js +23 -24
- package/dist/views/Version/RenderFieldsToDiff/fields/styles.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/types.js +1 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/types.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/index.js +102 -97
- package/dist/views/Version/RenderFieldsToDiff/index.js.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/types.js +1 -2
- package/dist/views/Version/RenderFieldsToDiff/types.js.map +1 -1
- package/dist/views/Version/Restore/index.js +107 -110
- package/dist/views/Version/Restore/index.js.map +1 -1
- package/dist/views/Version/Restore/types.js +1 -2
- package/dist/views/Version/Restore/types.js.map +1 -1
- package/dist/views/Version/SelectComparison/index.js +130 -138
- package/dist/views/Version/SelectComparison/index.js.map +1 -1
- package/dist/views/Version/SelectComparison/types.js +1 -2
- package/dist/views/Version/SelectComparison/types.js.map +1 -1
- package/dist/views/Version/SelectLocales/index.js +58 -30
- package/dist/views/Version/SelectLocales/index.js.map +1 -1
- package/dist/views/Version/SelectLocales/types.js +1 -2
- package/dist/views/Version/SelectLocales/types.js.map +1 -1
- package/dist/views/Version/index.js +126 -105
- package/dist/views/Version/index.js.map +1 -1
- package/dist/views/Version/meta.js +49 -43
- package/dist/views/Version/meta.js.map +1 -1
- package/dist/views/Versions/buildColumns.js +87 -82
- package/dist/views/Versions/buildColumns.js.map +1 -1
- package/dist/views/Versions/cells/AutosaveCell/index.js +69 -42
- package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -1
- package/dist/views/Versions/cells/CreatedAt/index.js +70 -17
- package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -1
- package/dist/views/Versions/cells/ID/index.js +17 -5
- package/dist/views/Versions/cells/ID/index.js.map +1 -1
- package/dist/views/Versions/getLatestVersion.js +33 -29
- package/dist/views/Versions/getLatestVersion.js.map +1 -1
- package/dist/views/Versions/index.client.js +80 -77
- package/dist/views/Versions/index.client.js.map +1 -1
- package/dist/views/Versions/index.js +148 -127
- package/dist/views/Versions/index.js.map +1 -1
- package/dist/views/Versions/meta.js +43 -37
- package/dist/views/Versions/meta.js.map +1 -1
- package/dist/views/Versions/types.js +1 -2
- package/dist/views/Versions/types.js.map +1 -1
- package/dist/withPayload.js +83 -117
- package/dist/withPayload.js.map +1 -1
- package/package.json +20 -10
- package/dist/cjs/withPayload.cjs +0 -145
- package/dist/cjs/withPayload.cjs.map +0 -1
|
@@ -7,156 +7,173 @@ import { processNested } from './processNested.js';
|
|
|
7
7
|
import { createUploadTimer } from './uploadTimer.js';
|
|
8
8
|
import { buildFields, debugLog, isFunc, parseFileName } from './utilities.js';
|
|
9
9
|
const waitFlushProperty = Symbol('wait flush property symbol');
|
|
10
|
-
export const processMultipart = async ({
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
export const processMultipart = async ({
|
|
11
|
+
options,
|
|
12
|
+
request
|
|
13
|
+
}) => {
|
|
14
|
+
let parsingRequest = true;
|
|
15
|
+
let fileCount = 0;
|
|
16
|
+
let filesCompleted = 0;
|
|
17
|
+
let allFilesHaveResolved;
|
|
18
|
+
let failedResolvingFiles;
|
|
19
|
+
const allFilesComplete = new Promise((res, rej) => {
|
|
20
|
+
allFilesHaveResolved = res;
|
|
21
|
+
failedResolvingFiles = rej;
|
|
22
|
+
});
|
|
23
|
+
const result = {
|
|
24
|
+
fields: undefined,
|
|
25
|
+
files: undefined
|
|
26
|
+
};
|
|
27
|
+
const headersObject = {};
|
|
28
|
+
request.headers.forEach((value, name) => {
|
|
29
|
+
headersObject[name] = value;
|
|
30
|
+
});
|
|
31
|
+
function abortAndDestroyFile(file, err) {
|
|
32
|
+
file.destroy();
|
|
33
|
+
parsingRequest = false;
|
|
34
|
+
failedResolvingFiles(err);
|
|
35
|
+
}
|
|
36
|
+
const busboy = Busboy({
|
|
37
|
+
...options,
|
|
38
|
+
headers: headersObject
|
|
39
|
+
});
|
|
40
|
+
// Build multipart req.body fields
|
|
41
|
+
busboy.on('field', (field, val) => {
|
|
42
|
+
result.fields = buildFields(result.fields, field, val);
|
|
43
|
+
});
|
|
44
|
+
// Build req.files fields
|
|
45
|
+
busboy.on('file', (field, file, info) => {
|
|
46
|
+
fileCount += 1;
|
|
47
|
+
// Parse file name(cutting huge names, decoding, etc..).
|
|
48
|
+
const {
|
|
49
|
+
encoding,
|
|
50
|
+
filename: name,
|
|
51
|
+
mimeType: mime
|
|
52
|
+
} = info;
|
|
53
|
+
const filename = parseFileName(options, name);
|
|
54
|
+
// Define methods and handlers for upload process.
|
|
55
|
+
const {
|
|
56
|
+
cleanup,
|
|
57
|
+
complete,
|
|
58
|
+
dataHandler,
|
|
59
|
+
getFilePath,
|
|
60
|
+
getFileSize,
|
|
61
|
+
getHash,
|
|
62
|
+
getWritePromise
|
|
63
|
+
} = options.useTempFiles ? tempFileHandler(options, field, filename) // Upload into temporary file.
|
|
64
|
+
: memHandler(options, field, filename) // Upload into RAM.
|
|
65
|
+
;
|
|
66
|
+
const writePromise = options.useTempFiles ? getWritePromise().catch(err => {
|
|
67
|
+
busboy.end();
|
|
68
|
+
cleanup();
|
|
69
|
+
}) : getWritePromise();
|
|
70
|
+
const uploadTimer = createUploadTimer(options.uploadTimeout, () => {
|
|
71
|
+
return abortAndDestroyFile(file, new APIError(`Upload timeout for ${field}->${filename}, bytes:${getFileSize()}`));
|
|
19
72
|
});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
});
|
|
28
|
-
function abortAndDestroyFile(file, err) {
|
|
29
|
-
file.destroy();
|
|
30
|
-
parsingRequest = false;
|
|
31
|
-
failedResolvingFiles(err);
|
|
32
|
-
}
|
|
33
|
-
const busboy = Busboy({
|
|
34
|
-
...options,
|
|
35
|
-
headers: headersObject
|
|
36
|
-
});
|
|
37
|
-
// Build multipart req.body fields
|
|
38
|
-
busboy.on('field', (field, val)=>{
|
|
39
|
-
result.fields = buildFields(result.fields, field, val);
|
|
40
|
-
});
|
|
41
|
-
// Build req.files fields
|
|
42
|
-
busboy.on('file', (field, file, info)=>{
|
|
43
|
-
fileCount += 1;
|
|
44
|
-
// Parse file name(cutting huge names, decoding, etc..).
|
|
45
|
-
const { encoding, filename: name, mimeType: mime } = info;
|
|
46
|
-
const filename = parseFileName(options, name);
|
|
47
|
-
// Define methods and handlers for upload process.
|
|
48
|
-
const { cleanup, complete, dataHandler, getFilePath, getFileSize, getHash, getWritePromise } = options.useTempFiles ? tempFileHandler(options, field, filename) // Upload into temporary file.
|
|
49
|
-
: memHandler(options, field, filename) // Upload into RAM.
|
|
50
|
-
;
|
|
51
|
-
const writePromise = options.useTempFiles ? getWritePromise().catch((err)=>{
|
|
52
|
-
busboy.end();
|
|
53
|
-
cleanup();
|
|
54
|
-
}) : getWritePromise();
|
|
55
|
-
const uploadTimer = createUploadTimer(options.uploadTimeout, ()=>{
|
|
56
|
-
return abortAndDestroyFile(file, new APIError(`Upload timeout for ${field}->${filename}, bytes:${getFileSize()}`));
|
|
57
|
-
});
|
|
58
|
-
file.on('limit', ()=>{
|
|
59
|
-
debugLog(options, `Size limit reached for ${field}->${filename}, bytes:${getFileSize()}`);
|
|
60
|
-
uploadTimer.clear();
|
|
61
|
-
if (isFunc(options.limitHandler)) {
|
|
62
|
-
options.limitHandler({
|
|
63
|
-
request,
|
|
64
|
-
size: getFileSize()
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
// Return error and cleanup files if abortOnLimit set.
|
|
68
|
-
if (options.abortOnLimit) {
|
|
69
|
-
debugLog(options, `Upload file size limit reached ${field}->${filename}.`);
|
|
70
|
-
cleanup();
|
|
71
|
-
abortAndDestroyFile(file, new APIError(options.responseOnLimit, httpStatus.REQUEST_ENTITY_TOO_LARGE, {
|
|
72
|
-
size: getFileSize()
|
|
73
|
-
}));
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
file.on('data', (data)=>{
|
|
77
|
-
uploadTimer.set();
|
|
78
|
-
dataHandler(data);
|
|
79
|
-
});
|
|
80
|
-
file.on('end', ()=>{
|
|
81
|
-
const size = getFileSize();
|
|
82
|
-
debugLog(options, `Upload finished ${field}->${filename}, bytes:${size}`);
|
|
83
|
-
uploadTimer.clear();
|
|
84
|
-
if (!name && size === 0) {
|
|
85
|
-
fileCount -= 1;
|
|
86
|
-
if (options.useTempFiles) {
|
|
87
|
-
cleanup();
|
|
88
|
-
debugLog(options, `Removing the empty file ${field}->${filename}`);
|
|
89
|
-
}
|
|
90
|
-
return debugLog(options, `Don't add file instance if original name and size are empty`);
|
|
91
|
-
}
|
|
92
|
-
filesCompleted += 1;
|
|
93
|
-
result.files = buildFields(result.files, field, fileFactory({
|
|
94
|
-
name: filename,
|
|
95
|
-
buffer: complete(),
|
|
96
|
-
encoding,
|
|
97
|
-
hash: getHash(),
|
|
98
|
-
mimetype: mime,
|
|
99
|
-
size,
|
|
100
|
-
tempFilePath: getFilePath(),
|
|
101
|
-
truncated: Boolean('truncated' in file && file.truncated)
|
|
102
|
-
}, options));
|
|
103
|
-
if (!request[waitFlushProperty]) {
|
|
104
|
-
request[waitFlushProperty] = [];
|
|
105
|
-
}
|
|
106
|
-
request[waitFlushProperty].push(writePromise);
|
|
107
|
-
if (filesCompleted === fileCount) {
|
|
108
|
-
allFilesHaveResolved();
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
file.on('error', (err)=>{
|
|
112
|
-
uploadTimer.clear();
|
|
113
|
-
debugLog(options, `File Error: ${err.message}`);
|
|
114
|
-
cleanup();
|
|
115
|
-
failedResolvingFiles(err);
|
|
73
|
+
file.on('limit', () => {
|
|
74
|
+
debugLog(options, `Size limit reached for ${field}->${filename}, bytes:${getFileSize()}`);
|
|
75
|
+
uploadTimer.clear();
|
|
76
|
+
if (isFunc(options.limitHandler)) {
|
|
77
|
+
options.limitHandler({
|
|
78
|
+
request,
|
|
79
|
+
size: getFileSize()
|
|
116
80
|
});
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
81
|
+
}
|
|
82
|
+
// Return error and cleanup files if abortOnLimit set.
|
|
83
|
+
if (options.abortOnLimit) {
|
|
84
|
+
debugLog(options, `Upload file size limit reached ${field}->${filename}.`);
|
|
85
|
+
cleanup();
|
|
86
|
+
abortAndDestroyFile(file, new APIError(options.responseOnLimit, httpStatus.REQUEST_ENTITY_TOO_LARGE, {
|
|
87
|
+
size: getFileSize()
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
120
90
|
});
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
91
|
+
file.on('data', data => {
|
|
92
|
+
uploadTimer.set();
|
|
93
|
+
dataHandler(data);
|
|
94
|
+
});
|
|
95
|
+
file.on('end', () => {
|
|
96
|
+
const size = getFileSize();
|
|
97
|
+
debugLog(options, `Upload finished ${field}->${filename}, bytes:${size}`);
|
|
98
|
+
uploadTimer.clear();
|
|
99
|
+
if (!name && size === 0) {
|
|
100
|
+
fileCount -= 1;
|
|
101
|
+
if (options.useTempFiles) {
|
|
102
|
+
cleanup();
|
|
103
|
+
debugLog(options, `Removing the empty file ${field}->${filename}`);
|
|
135
104
|
}
|
|
136
|
-
return
|
|
105
|
+
return debugLog(options, `Don't add file instance if original name and size are empty`);
|
|
106
|
+
}
|
|
107
|
+
filesCompleted += 1;
|
|
108
|
+
result.files = buildFields(result.files, field, fileFactory({
|
|
109
|
+
name: filename,
|
|
110
|
+
buffer: complete(),
|
|
111
|
+
encoding,
|
|
112
|
+
hash: getHash(),
|
|
113
|
+
mimetype: mime,
|
|
114
|
+
size,
|
|
115
|
+
tempFilePath: getFilePath(),
|
|
116
|
+
truncated: Boolean('truncated' in file && file.truncated)
|
|
117
|
+
}, options));
|
|
118
|
+
if (!request[waitFlushProperty]) {
|
|
119
|
+
request[waitFlushProperty] = [];
|
|
120
|
+
}
|
|
121
|
+
request[waitFlushProperty].push(writePromise);
|
|
122
|
+
if (filesCompleted === fileCount) {
|
|
123
|
+
allFilesHaveResolved();
|
|
124
|
+
}
|
|
137
125
|
});
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
126
|
+
file.on('error', err => {
|
|
127
|
+
uploadTimer.clear();
|
|
128
|
+
debugLog(options, `File Error: ${err.message}`);
|
|
129
|
+
cleanup();
|
|
130
|
+
failedResolvingFiles(err);
|
|
142
131
|
});
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
132
|
+
// Start upload process.
|
|
133
|
+
debugLog(options, `New upload started ${field}->${filename}, bytes:${getFileSize()}`);
|
|
134
|
+
uploadTimer.set();
|
|
135
|
+
});
|
|
136
|
+
busboy.on('finish', async () => {
|
|
137
|
+
debugLog(options, `Busboy finished parsing request.`);
|
|
138
|
+
if (options.parseNested) {
|
|
139
|
+
result.fields = processNested(result.fields);
|
|
140
|
+
result.files = processNested(result.files);
|
|
153
141
|
}
|
|
154
|
-
if (
|
|
155
|
-
|
|
156
|
-
|
|
142
|
+
if (request[waitFlushProperty]) {
|
|
143
|
+
try {
|
|
144
|
+
await Promise.all(request[waitFlushProperty]).then(() => {
|
|
145
|
+
delete request[waitFlushProperty];
|
|
157
146
|
});
|
|
147
|
+
} catch (err) {
|
|
148
|
+
debugLog(options, `Error waiting for file write promises: ${err}`);
|
|
149
|
+
}
|
|
158
150
|
}
|
|
159
151
|
return result;
|
|
152
|
+
});
|
|
153
|
+
busboy.on('error', (err = new APIError('Busboy error parsing multipart request', httpStatus.BAD_REQUEST)) => {
|
|
154
|
+
debugLog(options, `Busboy error`);
|
|
155
|
+
parsingRequest = false;
|
|
156
|
+
throw err;
|
|
157
|
+
});
|
|
158
|
+
const reader = request.body.getReader();
|
|
159
|
+
// Start parsing request
|
|
160
|
+
while (parsingRequest) {
|
|
161
|
+
const {
|
|
162
|
+
done,
|
|
163
|
+
value
|
|
164
|
+
} = await reader.read();
|
|
165
|
+
if (done) {
|
|
166
|
+
parsingRequest = false;
|
|
167
|
+
}
|
|
168
|
+
if (value) {
|
|
169
|
+
busboy.write(value);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (fileCount !== 0) {
|
|
173
|
+
await allFilesComplete.catch(e => {
|
|
174
|
+
throw e;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return result;
|
|
160
178
|
};
|
|
161
|
-
|
|
162
179
|
//# sourceMappingURL=processMultipart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fetchAPI-multipart/processMultipart.ts"],"sourcesContent":["import type { Readable } from 'stream'\n\nimport Busboy from 'busboy'\nimport httpStatus from 'http-status'\nimport { APIError } from 'payload'\n\nimport type { FetchAPIFileUploadOptions, FetchAPIFileUploadResponse } from './index.js'\n\nimport { fileFactory } from './fileFactory.js'\nimport { memHandler, tempFileHandler } from './handlers.js'\nimport { processNested } from './processNested.js'\nimport { createUploadTimer } from './uploadTimer.js'\nimport { buildFields, debugLog, isFunc, parseFileName } from './utilities.js'\n\nconst waitFlushProperty = Symbol('wait flush property symbol')\n\ntype ProcessMultipart = (args: {\n options: FetchAPIFileUploadOptions\n request: Request\n}) => Promise<FetchAPIFileUploadResponse>\nexport const processMultipart: ProcessMultipart = async ({ options, request }) => {\n let parsingRequest = true\n\n let fileCount = 0\n let filesCompleted = 0\n let allFilesHaveResolved: (value?: unknown) => void\n let failedResolvingFiles: (err: Error) => void\n\n const allFilesComplete = new Promise((res, rej) => {\n allFilesHaveResolved = res\n failedResolvingFiles = rej\n })\n\n const result: FetchAPIFileUploadResponse = {\n fields: undefined,\n files: undefined,\n }\n\n const headersObject = {}\n request.headers.forEach((value, name) => {\n headersObject[name] = value\n })\n\n function abortAndDestroyFile(file: Readable, err: APIError) {\n file.destroy()\n parsingRequest = false\n failedResolvingFiles(err)\n }\n\n const busboy = Busboy({ ...options, headers: headersObject })\n\n // Build multipart req.body fields\n busboy.on('field', (field, val) => {\n result.fields = buildFields(result.fields, field, val)\n })\n\n // Build req.files fields\n busboy.on('file', (field, file, info) => {\n fileCount += 1\n // Parse file name(cutting huge names, decoding, etc..).\n const { encoding, filename: name, mimeType: mime } = info\n const filename = parseFileName(options, name)\n\n // Define methods and handlers for upload process.\n const { cleanup, complete, dataHandler, getFilePath, getFileSize, getHash, getWritePromise } =\n options.useTempFiles\n ? tempFileHandler(options, field, filename) // Upload into temporary file.\n : memHandler(options, field, filename) // Upload into RAM.\n\n const writePromise = options.useTempFiles\n ? getWritePromise().catch((err) => {\n busboy.end()\n cleanup()\n })\n : getWritePromise()\n\n const uploadTimer = createUploadTimer(options.uploadTimeout, () => {\n return abortAndDestroyFile(\n file,\n new APIError(`Upload timeout for ${field}->${filename}, bytes:${getFileSize()}`),\n )\n })\n\n file.on('limit', () => {\n debugLog(options, `Size limit reached for ${field}->${filename}, bytes:${getFileSize()}`)\n uploadTimer.clear()\n\n if (isFunc(options.limitHandler)) {\n options.limitHandler({ request, size: getFileSize() })\n }\n\n // Return error and cleanup files if abortOnLimit set.\n if (options.abortOnLimit) {\n debugLog(options, `Upload file size limit reached ${field}->${filename}.`)\n cleanup()\n abortAndDestroyFile(\n file,\n new APIError(options.responseOnLimit, httpStatus.REQUEST_ENTITY_TOO_LARGE, {\n size: getFileSize(),\n }),\n )\n }\n })\n\n file.on('data', (data) => {\n uploadTimer.set()\n dataHandler(data)\n })\n\n file.on('end', () => {\n const size = getFileSize()\n debugLog(options, `Upload finished ${field}->${filename}, bytes:${size}`)\n uploadTimer.clear()\n\n if (!name && size === 0) {\n fileCount -= 1\n if (options.useTempFiles) {\n cleanup()\n debugLog(options, `Removing the empty file ${field}->${filename}`)\n }\n return debugLog(options, `Don't add file instance if original name and size are empty`)\n }\n\n filesCompleted += 1\n\n result.files = buildFields(\n result.files,\n field,\n fileFactory(\n {\n name: filename,\n buffer: complete(),\n encoding,\n hash: getHash(),\n mimetype: mime,\n size,\n tempFilePath: getFilePath(),\n truncated: Boolean('truncated' in file && file.truncated),\n },\n options,\n ),\n )\n\n if (!request[waitFlushProperty]) {\n request[waitFlushProperty] = []\n }\n request[waitFlushProperty].push(writePromise)\n\n if (filesCompleted === fileCount) {\n allFilesHaveResolved()\n }\n })\n\n file.on('error', (err) => {\n uploadTimer.clear()\n debugLog(options, `File Error: ${err.message}`)\n cleanup()\n failedResolvingFiles(err)\n })\n\n // Start upload process.\n debugLog(options, `New upload started ${field}->${filename}, bytes:${getFileSize()}`)\n uploadTimer.set()\n })\n\n busboy.on('finish', async () => {\n debugLog(options, `Busboy finished parsing request.`)\n if (options.parseNested) {\n result.fields = processNested(result.fields)\n result.files = processNested(result.files)\n }\n\n if (request[waitFlushProperty]) {\n try {\n await Promise.all(request[waitFlushProperty]).then(() => {\n delete request[waitFlushProperty]\n })\n } catch (err) {\n debugLog(options, `Error waiting for file write promises: ${err}`)\n }\n }\n\n return result\n })\n\n busboy.on(\n 'error',\n (err = new APIError('Busboy error parsing multipart request', httpStatus.BAD_REQUEST)) => {\n debugLog(options, `Busboy error`)\n parsingRequest = false\n throw err\n },\n )\n\n const reader = request.body.getReader()\n\n // Start parsing request\n while (parsingRequest) {\n const { done, value } = await reader.read()\n\n if (done) {\n parsingRequest = false\n }\n\n if (value) {\n busboy.write(value)\n }\n }\n\n if (fileCount !== 0) {\n await allFilesComplete.catch((e) => {\n throw e\n })\n }\n\n return result\n}\n"],"names":["Busboy","httpStatus","APIError","fileFactory","memHandler","tempFileHandler","processNested","createUploadTimer","buildFields","debugLog","isFunc","parseFileName","waitFlushProperty","Symbol","processMultipart","options","request","parsingRequest","fileCount","filesCompleted","allFilesHaveResolved","failedResolvingFiles","allFilesComplete","Promise","res","rej","result","fields","undefined","files","headersObject","headers","forEach","value","name","abortAndDestroyFile","file","err","destroy","busboy","on","field","val","info","encoding","filename","mimeType","mime","cleanup","complete","dataHandler","getFilePath","getFileSize","getHash","getWritePromise","useTempFiles","writePromise","catch","end","uploadTimer","uploadTimeout","clear","limitHandler","size","abortOnLimit","responseOnLimit","REQUEST_ENTITY_TOO_LARGE","data","set","buffer","hash","mimetype","tempFilePath","truncated","Boolean","push","message","parseNested","all","then","BAD_REQUEST","reader","body","getReader","done","read","write","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"processMultipart.js","names":["Busboy","httpStatus","APIError","fileFactory","memHandler","tempFileHandler","processNested","createUploadTimer","buildFields","debugLog","isFunc","parseFileName","waitFlushProperty","Symbol","processMultipart","options","request","parsingRequest","fileCount","filesCompleted","allFilesHaveResolved","failedResolvingFiles","allFilesComplete","Promise","res","rej","result","fields","undefined","files","headersObject","headers","forEach","value","name","abortAndDestroyFile","file","err","destroy","busboy","on","field","val","info","encoding","filename","mimeType","mime","cleanup","complete","dataHandler","getFilePath","getFileSize","getHash","getWritePromise","useTempFiles","writePromise","catch","end","uploadTimer","uploadTimeout","clear","limitHandler","size","abortOnLimit","responseOnLimit","REQUEST_ENTITY_TOO_LARGE","data","set","buffer","hash","mimetype","tempFilePath","truncated","Boolean","push","message","parseNested","all","then","BAD_REQUEST","reader","body","getReader","done","read","write","e"],"sources":["../../src/fetchAPI-multipart/processMultipart.ts"],"sourcesContent":["import type { Readable } from 'stream'\n\nimport Busboy from 'busboy'\nimport httpStatus from 'http-status'\nimport { APIError } from 'payload'\n\nimport type { FetchAPIFileUploadOptions, FetchAPIFileUploadResponse } from './index.js'\n\nimport { fileFactory } from './fileFactory.js'\nimport { memHandler, tempFileHandler } from './handlers.js'\nimport { processNested } from './processNested.js'\nimport { createUploadTimer } from './uploadTimer.js'\nimport { buildFields, debugLog, isFunc, parseFileName } from './utilities.js'\n\nconst waitFlushProperty = Symbol('wait flush property symbol')\n\ntype ProcessMultipart = (args: {\n options: FetchAPIFileUploadOptions\n request: Request\n}) => Promise<FetchAPIFileUploadResponse>\nexport const processMultipart: ProcessMultipart = async ({ options, request }) => {\n let parsingRequest = true\n\n let fileCount = 0\n let filesCompleted = 0\n let allFilesHaveResolved: (value?: unknown) => void\n let failedResolvingFiles: (err: Error) => void\n\n const allFilesComplete = new Promise((res, rej) => {\n allFilesHaveResolved = res\n failedResolvingFiles = rej\n })\n\n const result: FetchAPIFileUploadResponse = {\n fields: undefined,\n files: undefined,\n }\n\n const headersObject = {}\n request.headers.forEach((value, name) => {\n headersObject[name] = value\n })\n\n function abortAndDestroyFile(file: Readable, err: APIError) {\n file.destroy()\n parsingRequest = false\n failedResolvingFiles(err)\n }\n\n const busboy = Busboy({ ...options, headers: headersObject })\n\n // Build multipart req.body fields\n busboy.on('field', (field, val) => {\n result.fields = buildFields(result.fields, field, val)\n })\n\n // Build req.files fields\n busboy.on('file', (field, file, info) => {\n fileCount += 1\n // Parse file name(cutting huge names, decoding, etc..).\n const { encoding, filename: name, mimeType: mime } = info\n const filename = parseFileName(options, name)\n\n // Define methods and handlers for upload process.\n const { cleanup, complete, dataHandler, getFilePath, getFileSize, getHash, getWritePromise } =\n options.useTempFiles\n ? tempFileHandler(options, field, filename) // Upload into temporary file.\n : memHandler(options, field, filename) // Upload into RAM.\n\n const writePromise = options.useTempFiles\n ? getWritePromise().catch((err) => {\n busboy.end()\n cleanup()\n })\n : getWritePromise()\n\n const uploadTimer = createUploadTimer(options.uploadTimeout, () => {\n return abortAndDestroyFile(\n file,\n new APIError(`Upload timeout for ${field}->${filename}, bytes:${getFileSize()}`),\n )\n })\n\n file.on('limit', () => {\n debugLog(options, `Size limit reached for ${field}->${filename}, bytes:${getFileSize()}`)\n uploadTimer.clear()\n\n if (isFunc(options.limitHandler)) {\n options.limitHandler({ request, size: getFileSize() })\n }\n\n // Return error and cleanup files if abortOnLimit set.\n if (options.abortOnLimit) {\n debugLog(options, `Upload file size limit reached ${field}->${filename}.`)\n cleanup()\n abortAndDestroyFile(\n file,\n new APIError(options.responseOnLimit, httpStatus.REQUEST_ENTITY_TOO_LARGE, {\n size: getFileSize(),\n }),\n )\n }\n })\n\n file.on('data', (data) => {\n uploadTimer.set()\n dataHandler(data)\n })\n\n file.on('end', () => {\n const size = getFileSize()\n debugLog(options, `Upload finished ${field}->${filename}, bytes:${size}`)\n uploadTimer.clear()\n\n if (!name && size === 0) {\n fileCount -= 1\n if (options.useTempFiles) {\n cleanup()\n debugLog(options, `Removing the empty file ${field}->${filename}`)\n }\n return debugLog(options, `Don't add file instance if original name and size are empty`)\n }\n\n filesCompleted += 1\n\n result.files = buildFields(\n result.files,\n field,\n fileFactory(\n {\n name: filename,\n buffer: complete(),\n encoding,\n hash: getHash(),\n mimetype: mime,\n size,\n tempFilePath: getFilePath(),\n truncated: Boolean('truncated' in file && file.truncated),\n },\n options,\n ),\n )\n\n if (!request[waitFlushProperty]) {\n request[waitFlushProperty] = []\n }\n request[waitFlushProperty].push(writePromise)\n\n if (filesCompleted === fileCount) {\n allFilesHaveResolved()\n }\n })\n\n file.on('error', (err) => {\n uploadTimer.clear()\n debugLog(options, `File Error: ${err.message}`)\n cleanup()\n failedResolvingFiles(err)\n })\n\n // Start upload process.\n debugLog(options, `New upload started ${field}->${filename}, bytes:${getFileSize()}`)\n uploadTimer.set()\n })\n\n busboy.on('finish', async () => {\n debugLog(options, `Busboy finished parsing request.`)\n if (options.parseNested) {\n result.fields = processNested(result.fields)\n result.files = processNested(result.files)\n }\n\n if (request[waitFlushProperty]) {\n try {\n await Promise.all(request[waitFlushProperty]).then(() => {\n delete request[waitFlushProperty]\n })\n } catch (err) {\n debugLog(options, `Error waiting for file write promises: ${err}`)\n }\n }\n\n return result\n })\n\n busboy.on(\n 'error',\n (err = new APIError('Busboy error parsing multipart request', httpStatus.BAD_REQUEST)) => {\n debugLog(options, `Busboy error`)\n parsingRequest = false\n throw err\n },\n )\n\n const reader = request.body.getReader()\n\n // Start parsing request\n while (parsingRequest) {\n const { done, value } = await reader.read()\n\n if (done) {\n parsingRequest = false\n }\n\n if (value) {\n busboy.write(value)\n }\n }\n\n if (fileCount !== 0) {\n await allFilesComplete.catch((e) => {\n throw e\n })\n }\n\n return result\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import { isSafeFromPollution } from './utilities.js';
|
|
2
|
-
export const processNested = function(data) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
2
|
+
export const processNested = function (data) {
|
|
3
|
+
if (!data || data.length < 1) return Object.create(null);
|
|
4
|
+
const d = Object.create(null),
|
|
5
|
+
keys = Object.keys(data);
|
|
6
|
+
for (let i = 0; i < keys.length; i++) {
|
|
7
|
+
const key = keys[i],
|
|
8
|
+
value = data[key],
|
|
9
|
+
keyParts = key.replace(new RegExp(/\[/g), '.').replace(new RegExp(/\]/g), '').split('.');
|
|
10
|
+
let current = d;
|
|
11
|
+
for (let index = 0; index < keyParts.length; index++) {
|
|
12
|
+
const k = keyParts[index];
|
|
13
|
+
// Ensure we don't allow prototype pollution
|
|
14
|
+
if (!isSafeFromPollution(current, k)) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
if (index >= keyParts.length - 1) {
|
|
18
|
+
current[k] = value;
|
|
19
|
+
} else {
|
|
20
|
+
if (!current[k]) current[k] = !keyParts[index + 1] ? [] : Object.create(null);
|
|
21
|
+
current = current[k];
|
|
22
|
+
}
|
|
21
23
|
}
|
|
22
|
-
|
|
24
|
+
}
|
|
25
|
+
return d;
|
|
23
26
|
};
|
|
24
|
-
|
|
25
27
|
//# sourceMappingURL=processNested.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fetchAPI-multipart/processNested.ts"],"sourcesContent":["import { isSafeFromPollution } from './utilities.js'\n\nexport const processNested = function (data) {\n if (!data || data.length < 1) return Object.create(null)\n\n const d = Object.create(null),\n keys = Object.keys(data)\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i],\n value = data[key],\n keyParts = key.replace(new RegExp(/\\[/g), '.').replace(new RegExp(/\\]/g), '').split('.')\n let current = d\n\n for (let index = 0; index < keyParts.length; index++) {\n const k = keyParts[index]\n\n // Ensure we don't allow prototype pollution\n if (!isSafeFromPollution(current, k)) {\n continue\n }\n\n if (index >= keyParts.length - 1) {\n current[k] = value\n } else {\n if (!current[k]) current[k] = !keyParts[index + 1] ? [] : Object.create(null)\n current = current[k]\n }\n }\n }\n return d\n}\n"],"
|
|
1
|
+
{"version":3,"file":"processNested.js","names":["isSafeFromPollution","processNested","data","length","Object","create","d","keys","i","key","value","keyParts","replace","RegExp","split","current","index","k"],"sources":["../../src/fetchAPI-multipart/processNested.ts"],"sourcesContent":["import { isSafeFromPollution } from './utilities.js'\n\nexport const processNested = function (data) {\n if (!data || data.length < 1) return Object.create(null)\n\n const d = Object.create(null),\n keys = Object.keys(data)\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i],\n value = data[key],\n keyParts = key.replace(new RegExp(/\\[/g), '.').replace(new RegExp(/\\]/g), '').split('.')\n let current = d\n\n for (let index = 0; index < keyParts.length; index++) {\n const k = keyParts[index]\n\n // Ensure we don't allow prototype pollution\n if (!isSafeFromPollution(current, k)) {\n continue\n }\n\n if (index >= keyParts.length - 1) {\n current[k] = value\n } else {\n if (!current[k]) current[k] = !keyParts[index + 1] ? [] : Object.create(null)\n current = current[k]\n }\n }\n }\n return d\n}\n"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ;AAEpC,OAAO,MAAMC,aAAA,GAAgB,SAAAA,CAAUC,IAAI;EACzC,IAAI,CAACA,IAAA,IAAQA,IAAA,CAAKC,MAAM,GAAG,GAAG,OAAOC,MAAA,CAAOC,MAAM,CAAC;EAEnD,MAAMC,CAAA,GAAIF,MAAA,CAAOC,MAAM,CAAC;IACtBE,IAAA,GAAOH,MAAA,CAAOG,IAAI,CAACL,IAAA;EAErB,KAAK,IAAIM,CAAA,GAAI,GAAGA,CAAA,GAAID,IAAA,CAAKJ,MAAM,EAAEK,CAAA,IAAK;IACpC,MAAMC,GAAA,GAAMF,IAAI,CAACC,CAAA,CAAE;MACjBE,KAAA,GAAQR,IAAI,CAACO,GAAA,CAAI;MACjBE,QAAA,GAAWF,GAAA,CAAIG,OAAO,CAAC,IAAIC,MAAA,CAAO,QAAQ,KAAKD,OAAO,CAAC,IAAIC,MAAA,CAAO,QAAQ,IAAIC,KAAK,CAAC;IACtF,IAAIC,OAAA,GAAUT,CAAA;IAEd,KAAK,IAAIU,KAAA,GAAQ,GAAGA,KAAA,GAAQL,QAAA,CAASR,MAAM,EAAEa,KAAA,IAAS;MACpD,MAAMC,CAAA,GAAIN,QAAQ,CAACK,KAAA,CAAM;MAEzB;MACA,IAAI,CAAChB,mBAAA,CAAoBe,OAAA,EAASE,CAAA,GAAI;QACpC;MACF;MAEA,IAAID,KAAA,IAASL,QAAA,CAASR,MAAM,GAAG,GAAG;QAChCY,OAAO,CAACE,CAAA,CAAE,GAAGP,KAAA;MACf,OAAO;QACL,IAAI,CAACK,OAAO,CAACE,CAAA,CAAE,EAAEF,OAAO,CAACE,CAAA,CAAE,GAAG,CAACN,QAAQ,CAACK,KAAA,GAAQ,EAAE,GAAG,EAAE,GAAGZ,MAAA,CAAOC,MAAM,CAAC;QACxEU,OAAA,GAAUA,OAAO,CAACE,CAAA,CAAE;MACtB;IACF;EACF;EACA,OAAOX,CAAA;AACT","ignoreList":[]}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
export const createUploadTimer = (timeout = 0, callback = ()=>{})=>{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
export const createUploadTimer = (timeout = 0, callback = () => {}) => {
|
|
2
|
+
let timer = null;
|
|
3
|
+
const clear = () => {
|
|
4
|
+
clearTimeout(timer);
|
|
5
|
+
};
|
|
6
|
+
const set = () => {
|
|
7
|
+
// Do not start a timer if zero timeout or it hasn't been set.
|
|
8
|
+
if (!timeout) return false;
|
|
9
|
+
clear();
|
|
10
|
+
timer = setTimeout(callback, timeout);
|
|
11
|
+
return true;
|
|
12
|
+
};
|
|
13
|
+
return {
|
|
14
|
+
clear,
|
|
15
|
+
set
|
|
16
|
+
};
|
|
17
17
|
};
|
|
18
|
-
|
|
19
18
|
//# sourceMappingURL=uploadTimer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fetchAPI-multipart/uploadTimer.ts"],"sourcesContent":["type CreateUploadTimer = (\n timeout?: number,\n callback?: () => void,\n) => {\n clear: () => void\n set: () => boolean\n}\n\nexport const createUploadTimer: CreateUploadTimer = (timeout = 0, callback = () => {}) => {\n let timer = null\n\n const clear = () => {\n clearTimeout(timer)\n }\n\n const set = () => {\n // Do not start a timer if zero timeout or it hasn't been set.\n if (!timeout) return false\n clear()\n timer = setTimeout(callback, timeout)\n return true\n }\n\n return { clear, set }\n}\n"],"
|
|
1
|
+
{"version":3,"file":"uploadTimer.js","names":["createUploadTimer","timeout","callback","timer","clear","clearTimeout","set","setTimeout"],"sources":["../../src/fetchAPI-multipart/uploadTimer.ts"],"sourcesContent":["type CreateUploadTimer = (\n timeout?: number,\n callback?: () => void,\n) => {\n clear: () => void\n set: () => boolean\n}\n\nexport const createUploadTimer: CreateUploadTimer = (timeout = 0, callback = () => {}) => {\n let timer = null\n\n const clear = () => {\n clearTimeout(timer)\n }\n\n const set = () => {\n // Do not start a timer if zero timeout or it hasn't been set.\n if (!timeout) return false\n clear()\n timer = setTimeout(callback, timeout)\n return true\n }\n\n return { clear, set }\n}\n"],"mappings":"AAQA,OAAO,MAAMA,iBAAA,GAAuCA,CAACC,OAAA,GAAU,CAAC,EAAEC,QAAA,GAAWA,CAAA,MAAO,CAAC;EACnF,IAAIC,KAAA,GAAQ;EAEZ,MAAMC,KAAA,GAAQA,CAAA;IACZC,YAAA,CAAaF,KAAA;EACf;EAEA,MAAMG,GAAA,GAAMA,CAAA;IACV;IACA,IAAI,CAACL,OAAA,EAAS,OAAO;IACrBG,KAAA;IACAD,KAAA,GAAQI,UAAA,CAAWL,QAAA,EAAUD,OAAA;IAC7B,OAAO;EACT;EAEA,OAAO;IAAEG,KAAA;IAAOE;EAAI;AACtB","ignoreList":[]}
|