@payloadcms/next 3.0.0-alpha.41 → 3.0.0-alpha.43
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/bin/index.js +1 -1
- package/dist/bin/index.js.map +1 -0
- package/dist/bin/install.js +1 -1
- package/dist/bin/install.js.map +1 -0
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -0
- package/dist/elements/ClearRouteCache/index.js +1 -1
- package/dist/elements/ClearRouteCache/index.js.map +1 -0
- package/dist/elements/LeaveWithoutSaving/index.js +1 -2
- package/dist/elements/LeaveWithoutSaving/index.js.map +1 -0
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +1 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -0
- package/dist/exports/index.js +1 -1
- package/dist/exports/index.js.map +1 -0
- package/dist/graphql/registerSchema.js +1 -1
- package/dist/graphql/registerSchema.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -0
- package/dist/layouts/Admin/index.js +1 -2
- package/dist/layouts/Admin/index.js.map +1 -0
- package/dist/layouts/Root/index.d.ts.map +1 -1
- package/dist/layouts/Root/index.js +2 -4
- package/dist/layouts/Root/index.js.map +1 -0
- package/dist/next-fileupload/fileFactory.js +1 -1
- package/dist/next-fileupload/fileFactory.js.map +1 -0
- package/dist/next-fileupload/handlers.js +1 -1
- package/dist/next-fileupload/handlers.js.map +1 -0
- package/dist/next-fileupload/index.js +1 -1
- package/dist/next-fileupload/index.js.map +1 -0
- package/dist/next-fileupload/isEligibleRequest.js +1 -1
- package/dist/next-fileupload/isEligibleRequest.js.map +1 -0
- package/dist/next-fileupload/processMultipart.js +1 -1
- package/dist/next-fileupload/processMultipart.js.map +1 -0
- package/dist/next-fileupload/processNested.js +1 -1
- package/dist/next-fileupload/processNested.js.map +1 -0
- package/dist/next-fileupload/uploadTimer.js +1 -1
- package/dist/next-fileupload/uploadTimer.js.map +1 -0
- package/dist/next-fileupload/utilities.js +1 -1
- package/dist/next-fileupload/utilities.js.map +1 -0
- package/dist/next-stream-file/index.js +1 -1
- package/dist/next-stream-file/index.js.map +1 -0
- package/dist/prod/payload/SuisseIntl-Bold.woff +0 -0
- package/dist/prod/payload/SuisseIntl-Bold.woff2 +0 -0
- package/dist/prod/payload/SuisseIntl-Medium.woff +0 -0
- package/dist/prod/payload/SuisseIntl-Medium.woff2 +0 -0
- package/dist/prod/payload/SuisseIntl-SemiBold.woff +0 -0
- package/dist/prod/payload/SuisseIntl-SemiBold.woff2 +0 -0
- package/dist/prod/payload/SuisseIntl.woff +0 -0
- package/dist/prod/payload/SuisseIntl.woff2 +0 -0
- package/dist/prod/payload/favicon.svg +15 -0
- package/dist/prod/payload/merriweather-v30-latin-900.woff +0 -0
- package/dist/prod/payload/merriweather-v30-latin-900.woff2 +0 -0
- package/dist/prod/payload/merriweather-v30-latin-900italic.woff +0 -0
- package/dist/prod/payload/merriweather-v30-latin-900italic.woff2 +0 -0
- package/dist/prod/payload/merriweather-v30-latin-italic.woff +0 -0
- package/dist/prod/payload/merriweather-v30-latin-italic.woff2 +0 -0
- package/dist/prod/payload/merriweather-v30-latin-regular.woff +0 -0
- package/dist/prod/payload/merriweather-v30-latin-regular.woff2 +0 -0
- package/dist/prod/payload/og-image.png +0 -0
- package/dist/prod/styles.css +1 -0
- package/dist/routes/graphql/handler.js +1 -1
- package/dist/routes/graphql/handler.js.map +1 -0
- package/dist/routes/graphql/index.js +1 -1
- package/dist/routes/graphql/index.js.map +1 -0
- package/dist/routes/graphql/playground.js +1 -1
- package/dist/routes/graphql/playground.js.map +1 -0
- package/dist/routes/index.js +1 -1
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/rest/RouteError.js +1 -1
- package/dist/routes/rest/RouteError.js.map +1 -0
- package/dist/routes/rest/auth/access.js +1 -1
- package/dist/routes/rest/auth/access.js.map +1 -0
- package/dist/routes/rest/auth/forgotPassword.js +1 -1
- package/dist/routes/rest/auth/forgotPassword.js.map +1 -0
- package/dist/routes/rest/auth/init.js +1 -1
- package/dist/routes/rest/auth/init.js.map +1 -0
- package/dist/routes/rest/auth/login.js +1 -1
- package/dist/routes/rest/auth/login.js.map +1 -0
- package/dist/routes/rest/auth/logout.js +1 -1
- package/dist/routes/rest/auth/logout.js.map +1 -0
- package/dist/routes/rest/auth/me.js +1 -1
- package/dist/routes/rest/auth/me.js.map +1 -0
- package/dist/routes/rest/auth/refresh.js +1 -1
- package/dist/routes/rest/auth/refresh.js.map +1 -0
- package/dist/routes/rest/auth/registerFirstUser.js +1 -1
- package/dist/routes/rest/auth/registerFirstUser.js.map +1 -0
- package/dist/routes/rest/auth/resetPassword.js +1 -1
- package/dist/routes/rest/auth/resetPassword.js.map +1 -0
- package/dist/routes/rest/auth/unlock.js +1 -1
- package/dist/routes/rest/auth/unlock.js.map +1 -0
- package/dist/routes/rest/auth/verifyEmail.js +1 -1
- package/dist/routes/rest/auth/verifyEmail.js.map +1 -0
- package/dist/routes/rest/buildFormState.js +1 -1
- package/dist/routes/rest/buildFormState.js.map +1 -0
- package/dist/routes/rest/checkEndpoints.js +1 -1
- package/dist/routes/rest/checkEndpoints.js.map +1 -0
- package/dist/routes/rest/collections/create.js +1 -1
- package/dist/routes/rest/collections/create.js.map +1 -0
- package/dist/routes/rest/collections/delete.js +1 -1
- package/dist/routes/rest/collections/delete.js.map +1 -0
- package/dist/routes/rest/collections/deleteByID.js +1 -1
- package/dist/routes/rest/collections/deleteByID.js.map +1 -0
- package/dist/routes/rest/collections/docAccess.js +1 -1
- package/dist/routes/rest/collections/docAccess.js.map +1 -0
- package/dist/routes/rest/collections/find.js +1 -1
- package/dist/routes/rest/collections/find.js.map +1 -0
- package/dist/routes/rest/collections/findByID.js +1 -1
- package/dist/routes/rest/collections/findByID.js.map +1 -0
- package/dist/routes/rest/collections/findVersionByID.js +1 -1
- package/dist/routes/rest/collections/findVersionByID.js.map +1 -0
- package/dist/routes/rest/collections/findVersions.js +1 -1
- package/dist/routes/rest/collections/findVersions.js.map +1 -0
- package/dist/routes/rest/collections/restoreVersion.js +1 -1
- package/dist/routes/rest/collections/restoreVersion.js.map +1 -0
- package/dist/routes/rest/collections/update.js +1 -1
- package/dist/routes/rest/collections/update.js.map +1 -0
- package/dist/routes/rest/collections/updateByID.js +1 -1
- package/dist/routes/rest/collections/updateByID.js.map +1 -0
- package/dist/routes/rest/files/checkFileAccess.js +1 -1
- package/dist/routes/rest/files/checkFileAccess.js.map +1 -0
- package/dist/routes/rest/files/getFile.js +1 -1
- package/dist/routes/rest/files/getFile.js.map +1 -0
- package/dist/routes/rest/globals/docAccess.js +1 -1
- package/dist/routes/rest/globals/docAccess.js.map +1 -0
- package/dist/routes/rest/globals/findOne.js +1 -1
- package/dist/routes/rest/globals/findOne.js.map +1 -0
- package/dist/routes/rest/globals/findVersionByID.js +1 -1
- package/dist/routes/rest/globals/findVersionByID.js.map +1 -0
- package/dist/routes/rest/globals/findVersions.js +1 -1
- package/dist/routes/rest/globals/findVersions.js.map +1 -0
- package/dist/routes/rest/globals/restoreVersion.js +1 -1
- package/dist/routes/rest/globals/restoreVersion.js.map +1 -0
- package/dist/routes/rest/globals/update.js +1 -1
- package/dist/routes/rest/globals/update.js.map +1 -0
- package/dist/routes/rest/index.js +1 -1
- package/dist/routes/rest/index.js.map +1 -0
- package/dist/routes/rest/types.js +1 -1
- package/dist/routes/rest/types.js.map +1 -0
- package/dist/scss/app.scss +2 -2
- package/dist/utilities/auth.js +1 -1
- package/dist/utilities/auth.js.map +1 -0
- package/dist/utilities/createPayloadRequest.js +1 -1
- package/dist/utilities/createPayloadRequest.js.map +1 -0
- package/dist/utilities/getDataAndFile.js +1 -1
- package/dist/utilities/getDataAndFile.js.map +1 -0
- package/dist/utilities/getNextI18n.js +1 -1
- package/dist/utilities/getNextI18n.js.map +1 -0
- package/dist/utilities/getNextT.js +1 -1
- package/dist/utilities/getNextT.js.map +1 -0
- package/dist/utilities/getPayload.d.ts.map +1 -1
- package/dist/utilities/getPayload.js +6 -2
- package/dist/utilities/getPayload.js.map +1 -0
- package/dist/utilities/getRequestLanguage.js +1 -1
- package/dist/utilities/getRequestLanguage.js.map +1 -0
- package/dist/utilities/getRequestLocales.js +1 -1
- package/dist/utilities/getRequestLocales.js.map +1 -0
- package/dist/utilities/initPage.js +1 -1
- package/dist/utilities/initPage.js.map +1 -0
- package/dist/utilities/meta.js +1 -1
- package/dist/utilities/meta.js.map +1 -0
- package/dist/utilities/timestamp.js +1 -1
- package/dist/utilities/timestamp.js.map +1 -0
- package/dist/views/API/RenderJSON/index.js +1 -2
- package/dist/views/API/RenderJSON/index.js.map +1 -0
- package/dist/views/API/index.client.js +1 -2
- package/dist/views/API/index.client.js.map +1 -0
- package/dist/views/API/index.js +1 -1
- package/dist/views/API/index.js.map +1 -0
- package/dist/views/API/meta.js +1 -1
- package/dist/views/API/meta.js.map +1 -0
- package/dist/views/Account/Settings/index.js +1 -2
- package/dist/views/Account/Settings/index.js.map +1 -0
- package/dist/views/Account/ToggleTheme/index.js +1 -1
- package/dist/views/Account/ToggleTheme/index.js.map +1 -0
- package/dist/views/Account/index.js +1 -1
- package/dist/views/Account/index.js.map +1 -0
- package/dist/views/Account/meta.js +1 -1
- package/dist/views/Account/meta.js.map +1 -0
- package/dist/views/CreateFirstUser/index.client.js +1 -1
- package/dist/views/CreateFirstUser/index.client.js.map +1 -0
- package/dist/views/CreateFirstUser/index.js +1 -2
- package/dist/views/CreateFirstUser/index.js.map +1 -0
- package/dist/views/CreateFirstUser/meta.js +1 -1
- package/dist/views/CreateFirstUser/meta.js.map +1 -0
- package/dist/views/Dashboard/Default/index.client.js +1 -2
- package/dist/views/Dashboard/Default/index.client.js.map +1 -0
- package/dist/views/Dashboard/Default/index.js +1 -2
- package/dist/views/Dashboard/Default/index.js.map +1 -0
- package/dist/views/Dashboard/index.js +1 -1
- package/dist/views/Dashboard/index.js.map +1 -0
- package/dist/views/Dashboard/meta.js +1 -1
- package/dist/views/Dashboard/meta.js.map +1 -0
- package/dist/views/Document/getCustomViewByKey.js +1 -1
- package/dist/views/Document/getCustomViewByKey.js.map +1 -0
- package/dist/views/Document/getCustomViewByPath.js +1 -1
- package/dist/views/Document/getCustomViewByPath.js.map +1 -0
- package/dist/views/Document/getMetaBySegment.js +1 -1
- package/dist/views/Document/getMetaBySegment.js.map +1 -0
- package/dist/views/Document/getViewsFromConfig.js +1 -1
- package/dist/views/Document/getViewsFromConfig.js.map +1 -0
- package/dist/views/Document/index.js +1 -1
- package/dist/views/Document/index.js.map +1 -0
- package/dist/views/Document/meta.js +1 -1
- package/dist/views/Document/meta.js.map +1 -0
- package/dist/views/Edit/Default/Auth/APIKey.js +1 -1
- package/dist/views/Edit/Default/Auth/APIKey.js.map +1 -0
- package/dist/views/Edit/Default/Auth/index.js +1 -2
- package/dist/views/Edit/Default/Auth/index.js.map +1 -0
- package/dist/views/Edit/Default/Auth/types.js +1 -1
- package/dist/views/Edit/Default/Auth/types.js.map +1 -0
- package/dist/views/Edit/Default/SetDocumentTitle/formatTitle.js +1 -1
- package/dist/views/Edit/Default/SetDocumentTitle/formatTitle.js.map +1 -0
- package/dist/views/Edit/Default/SetDocumentTitle/index.js +1 -1
- package/dist/views/Edit/Default/SetDocumentTitle/index.js.map +1 -0
- package/dist/views/Edit/Default/SetStepNav/index.js +1 -1
- package/dist/views/Edit/Default/SetStepNav/index.js.map +1 -0
- package/dist/views/Edit/Default/index.js +1 -2
- package/dist/views/Edit/Default/index.js.map +1 -0
- package/dist/views/Edit/Default/types.js +1 -1
- package/dist/views/Edit/Default/types.js.map +1 -0
- package/dist/views/Edit/index.client.js +1 -1
- package/dist/views/Edit/index.client.js.map +1 -0
- package/dist/views/Edit/index.js +1 -1
- package/dist/views/Edit/index.js.map +1 -0
- package/dist/views/Edit/meta.js +1 -1
- package/dist/views/Edit/meta.js.map +1 -0
- package/dist/views/Edit/sanitizeEditViewProps.js +1 -1
- package/dist/views/Edit/sanitizeEditViewProps.js.map +1 -0
- package/dist/views/ForgotPassword/index.js +1 -1
- package/dist/views/ForgotPassword/index.js.map +1 -0
- package/dist/views/ForgotPassword/meta.js +1 -1
- package/dist/views/ForgotPassword/meta.js.map +1 -0
- package/dist/views/List/Default/Cell/cellTypes.spec.js +1 -1
- package/dist/views/List/Default/Cell/cellTypes.spec.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/Array/index.js +1 -1
- package/dist/views/List/Default/Cell/fields/Array/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/Blocks/index.js +1 -1
- package/dist/views/List/Default/Cell/fields/Blocks/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/Checkbox/index.js +1 -2
- package/dist/views/List/Default/Cell/fields/Checkbox/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/Code/index.js +1 -2
- package/dist/views/List/Default/Cell/fields/Code/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/Date/index.js +1 -1
- package/dist/views/List/Default/Cell/fields/Date/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/File/index.js +1 -2
- package/dist/views/List/Default/Cell/fields/File/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/JSON/index.js +1 -2
- package/dist/views/List/Default/Cell/fields/JSON/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/Relationship/index.js +1 -2
- package/dist/views/List/Default/Cell/fields/Relationship/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/Select/index.js +1 -1
- package/dist/views/List/Default/Cell/fields/Select/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/Textarea/index.js +1 -1
- package/dist/views/List/Default/Cell/fields/Textarea/index.js.map +1 -0
- package/dist/views/List/Default/Cell/fields/index.js +1 -1
- package/dist/views/List/Default/Cell/fields/index.js.map +1 -0
- package/dist/views/List/Default/Cell/index.js +1 -1
- package/dist/views/List/Default/Cell/index.js.map +1 -0
- package/dist/views/List/Default/RelationshipProvider/index.js +1 -1
- package/dist/views/List/Default/RelationshipProvider/index.js.map +1 -0
- package/dist/views/List/Default/RelationshipProvider/reducer.js +1 -1
- package/dist/views/List/Default/RelationshipProvider/reducer.js.map +1 -0
- package/dist/views/List/Default/index.js +1 -2
- package/dist/views/List/Default/index.js.map +1 -0
- package/dist/views/List/Default/types.js +1 -1
- package/dist/views/List/Default/types.js.map +1 -0
- package/dist/views/List/index.js +1 -1
- package/dist/views/List/index.js.map +1 -0
- package/dist/views/List/meta.js +1 -1
- package/dist/views/List/meta.js.map +1 -0
- package/dist/views/LivePreview/Context/collisionDetection.js +1 -1
- package/dist/views/LivePreview/Context/collisionDetection.js.map +1 -0
- package/dist/views/LivePreview/Context/context.js +1 -1
- package/dist/views/LivePreview/Context/context.js.map +1 -0
- package/dist/views/LivePreview/Context/index.js +1 -1
- package/dist/views/LivePreview/Context/index.js.map +1 -0
- package/dist/views/LivePreview/Context/sizeReducer.js +1 -1
- package/dist/views/LivePreview/Context/sizeReducer.js.map +1 -0
- package/dist/views/LivePreview/Device/index.js +1 -1
- package/dist/views/LivePreview/Device/index.js.map +1 -0
- package/dist/views/LivePreview/DeviceContainer/index.js +1 -1
- package/dist/views/LivePreview/DeviceContainer/index.js.map +1 -0
- package/dist/views/LivePreview/IFrame/index.js +1 -2
- package/dist/views/LivePreview/IFrame/index.js.map +1 -0
- package/dist/views/LivePreview/Preview/index.js +1 -2
- package/dist/views/LivePreview/Preview/index.js.map +1 -0
- package/dist/views/LivePreview/Toolbar/Controls/index.js +1 -2
- package/dist/views/LivePreview/Toolbar/Controls/index.js.map +1 -0
- package/dist/views/LivePreview/Toolbar/SizeInput/index.js +1 -2
- package/dist/views/LivePreview/Toolbar/SizeInput/index.js.map +1 -0
- package/dist/views/LivePreview/Toolbar/index.js +1 -2
- package/dist/views/LivePreview/Toolbar/index.js.map +1 -0
- package/dist/views/LivePreview/ToolbarArea/index.js +1 -2
- package/dist/views/LivePreview/ToolbarArea/index.js.map +1 -0
- package/dist/views/LivePreview/index.client.js +1 -2
- package/dist/views/LivePreview/index.client.js.map +1 -0
- package/dist/views/LivePreview/index.js +1 -2
- package/dist/views/LivePreview/index.js.map +1 -0
- package/dist/views/LivePreview/meta.js +1 -1
- package/dist/views/LivePreview/meta.js.map +1 -0
- package/dist/views/LivePreview/usePopupWindow.js +1 -1
- package/dist/views/LivePreview/usePopupWindow.js.map +1 -0
- package/dist/views/Login/LoginForm/index.js +1 -2
- package/dist/views/Login/LoginForm/index.js.map +1 -0
- package/dist/views/Login/index.js +1 -2
- package/dist/views/Login/index.js.map +1 -0
- package/dist/views/Login/meta.js +1 -1
- package/dist/views/Login/meta.js.map +1 -0
- package/dist/views/Logout/LogoutClient.js +1 -1
- package/dist/views/Logout/LogoutClient.js.map +1 -0
- package/dist/views/Logout/index.js +1 -2
- package/dist/views/Logout/index.js.map +1 -0
- package/dist/views/Logout/meta.js +1 -1
- package/dist/views/Logout/meta.js.map +1 -0
- package/dist/views/NotFound/index.client.js +1 -2
- package/dist/views/NotFound/index.client.js.map +1 -0
- package/dist/views/NotFound/index.js +1 -1
- package/dist/views/NotFound/index.js.map +1 -0
- package/dist/views/NotFound/meta.js +1 -1
- package/dist/views/NotFound/meta.js.map +1 -0
- package/dist/views/ResetPassword/index.js +1 -2
- package/dist/views/ResetPassword/index.js.map +1 -0
- package/dist/views/ResetPassword/meta.js +1 -1
- package/dist/views/ResetPassword/meta.js.map +1 -0
- package/dist/views/Root/index.js +1 -1
- package/dist/views/Root/index.js.map +1 -0
- package/dist/views/Root/meta.js +1 -1
- package/dist/views/Root/meta.js.map +1 -0
- package/dist/views/Unauthorized/UnauthorizedClient.js +1 -1
- package/dist/views/Unauthorized/UnauthorizedClient.js.map +1 -0
- package/dist/views/Unauthorized/index.js +1 -1
- package/dist/views/Unauthorized/index.js.map +1 -0
- package/dist/views/Unauthorized/meta.js +1 -1
- package/dist/views/Unauthorized/meta.js.map +1 -0
- package/dist/views/Verify/index.js +1 -2
- package/dist/views/Verify/index.js.map +1 -0
- package/dist/views/Verify/meta.js +1 -1
- package/dist/views/Verify/meta.js.map +1 -0
- package/dist/views/Version/Default/SetStepNav.js +1 -1
- package/dist/views/Version/Default/SetStepNav.js.map +1 -0
- package/dist/views/Version/Default/index.js +1 -2
- package/dist/views/Version/Default/index.js.map +1 -0
- package/dist/views/Version/Default/types.js +1 -1
- package/dist/views/Version/Default/types.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/Label/index.js +1 -2
- package/dist/views/Version/RenderFieldsToDiff/Label/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +1 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.js +1 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +1 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/DiffViewer/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/DiffViewer/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +1 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/DiffViewer/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/DiffViewer/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +1 -2
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/diffMethods.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/diffMethods.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/styles.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/styles.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/fields/types.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/types.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/index.js +1 -2
- package/dist/views/Version/RenderFieldsToDiff/index.js.map +1 -0
- package/dist/views/Version/RenderFieldsToDiff/types.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/types.js.map +1 -0
- package/dist/views/Version/Restore/index.js +1 -3
- package/dist/views/Version/Restore/index.js.map +1 -0
- package/dist/views/Version/Restore/types.js +1 -1
- package/dist/views/Version/Restore/types.js.map +1 -0
- package/dist/views/Version/SelectComparison/index.js +1 -2
- package/dist/views/Version/SelectComparison/index.js.map +1 -0
- package/dist/views/Version/SelectComparison/types.js +1 -1
- package/dist/views/Version/SelectComparison/types.js.map +1 -0
- package/dist/views/Version/SelectLocales/index.js +1 -2
- package/dist/views/Version/SelectLocales/index.js.map +1 -0
- package/dist/views/Version/SelectLocales/types.js +1 -1
- package/dist/views/Version/SelectLocales/types.js.map +1 -0
- package/dist/views/Version/index.js +1 -1
- package/dist/views/Version/index.js.map +1 -0
- package/dist/views/Version/meta.js +1 -1
- package/dist/views/Version/meta.js.map +1 -0
- package/dist/views/Version/shared.js +1 -1
- package/dist/views/Version/shared.js.map +1 -0
- package/dist/views/Versions/buildColumns.js +1 -1
- package/dist/views/Versions/buildColumns.js.map +1 -0
- package/dist/views/Versions/cells/AutosaveCell/index.js +1 -1
- package/dist/views/Versions/cells/AutosaveCell/index.js.map +1 -0
- package/dist/views/Versions/cells/CreatedAt/index.js +1 -1
- package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -0
- package/dist/views/Versions/cells/ID/index.js +1 -1
- package/dist/views/Versions/cells/ID/index.js.map +1 -0
- package/dist/views/Versions/index.client.js +1 -1
- package/dist/views/Versions/index.client.js.map +1 -0
- package/dist/views/Versions/index.js +1 -2
- package/dist/views/Versions/index.js.map +1 -0
- package/dist/views/Versions/meta.js +1 -1
- package/dist/views/Versions/meta.js.map +1 -0
- package/dist/views/Versions/types.js +1 -1
- package/dist/views/Versions/types.js.map +1 -0
- package/dist/withPayload.d.ts.map +1 -1
- package/dist/withPayload.js +1 -3
- package/dist/withPayload.js.map +1 -0
- package/package.json +24 -7
package/dist/bin/index.js
CHANGED
|
@@ -25,4 +25,4 @@ async function main() {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
//# sourceMappingURL=
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/bin/index.ts"],"sourcesContent":["import minimist from 'minimist'\n\nconst args = minimist(process.argv.slice(2))\nconst scriptIndex = args._.findIndex((x) => x === 'install')\nconst script = scriptIndex === -1 ? args._[0] : args._[scriptIndex]\n\nconst { debug } = args\n\nimport { install } from './install.js'\n\nmain()\n\nasync function main() {\n if (debug) console.log({ debug, pwd: process.cwd() })\n switch (script.toLowerCase()) {\n case 'install': {\n if (debug) console.log('Running install')\n await install({ debug })\n break\n }\n\n default:\n console.log(`Unknown script \"${script}\".`)\n break\n }\n}\n"],"names":["minimist","args","process","argv","slice","scriptIndex","_","findIndex","x","script","debug","install","main","console","log","pwd","cwd","toLowerCase"],"mappings":"AAAA,OAAOA,cAAc,WAAU;AAE/B,MAAMC,OAAOD,SAASE,QAAQC,IAAI,CAACC,KAAK,CAAC;AACzC,MAAMC,cAAcJ,KAAKK,CAAC,CAACC,SAAS,CAAC,CAACC,IAAMA,MAAM;AAClD,MAAMC,SAASJ,gBAAgB,CAAC,IAAIJ,KAAKK,CAAC,CAAC,EAAE,GAAGL,KAAKK,CAAC,CAACD,YAAY;AAEnE,MAAM,EAAEK,KAAK,EAAE,GAAGT;AAElB,SAASU,OAAO,QAAQ,eAAc;AAEtCC;AAEA,eAAeA;IACb,IAAIF,OAAOG,QAAQC,GAAG,CAAC;QAAEJ;QAAOK,KAAKb,QAAQc,GAAG;IAAG;IACnD,OAAQP,OAAOQ,WAAW;QACxB,KAAK;YAAW;gBACd,IAAIP,OAAOG,QAAQC,GAAG,CAAC;gBACvB,MAAMH,QAAQ;oBAAED;gBAAM;gBACtB;YACF;QAEA;YACEG,QAAQC,GAAG,CAAC,CAAC,gBAAgB,EAAEL,OAAO,EAAE,CAAC;YACzC;IACJ;AACF"}
|
package/dist/bin/install.js
CHANGED
|
@@ -59,4 +59,4 @@ if (require.main === module) {
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
//# sourceMappingURL=
|
|
62
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/bin/install.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\n\nexport const install = (args?: { debug?: boolean }): Promise<void> => {\n const debug = args?.debug\n\n const nextConfigPath = path.resolve(process.cwd(), 'next.config.js')\n if (!fs.existsSync(nextConfigPath)) {\n console.log(`No next.config.js found at ${nextConfigPath}`)\n process.exit(1)\n }\n\n const apiTemplateDir = path.resolve(__dirname, '../..', 'dist', 'template/app/(payload)')\n const userProjectDir = process.cwd()\n\n if (!fs.existsSync(apiTemplateDir)) {\n console.log(`Could not find template source files from ${apiTemplateDir}`)\n process.exit(1)\n }\n\n if (!fs.existsSync(path.resolve(userProjectDir, 'app'))) {\n console.log(`Could not find user app directory at ${userProjectDir}/app`)\n process.exit(1)\n }\n\n const templateFileDest = path.resolve(userProjectDir, 'app/(payload)')\n\n if (debug) {\n console.log({\n cwd: process.cwd(),\n\n // Paths\n apiTemplateDir,\n templateFileDest,\n userProjectDir,\n })\n }\n\n // Merge api dir into user's app/api, user's files take precedence\n copyRecursiveSync(apiTemplateDir, templateFileDest, debug)\n process.exit(0)\n}\n\n/**\n * Recursively copy files from src to dest\n */\nfunction copyRecursiveSync(src: string, dest: string, debug?: boolean) {\n const exists = fs.existsSync(src)\n const stats = exists && fs.statSync(src)\n const isDirectory = exists && stats.isDirectory()\n if (isDirectory) {\n if (debug) console.log(`Dir: ${src}\\n--Dest: ${dest}`)\n fs.mkdirSync(dest, { recursive: true })\n fs.readdirSync(src).forEach((childItemName) => {\n copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName))\n })\n } else {\n if (debug) console.log(`File: ${src}\\n--Dest: ${dest}`)\n fs.copyFileSync(src, dest)\n }\n}\n\nif (require.main === module) {\n install({ debug: true }).catch((e) => {\n console.error(e)\n process.exit(1)\n })\n}\n"],"names":["fs","path","install","args","debug","nextConfigPath","resolve","process","cwd","existsSync","console","log","exit","apiTemplateDir","__dirname","userProjectDir","templateFileDest","copyRecursiveSync","src","dest","exists","stats","statSync","isDirectory","mkdirSync","recursive","readdirSync","forEach","childItemName","join","copyFileSync","require","main","module","catch","e","error"],"mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,OAAOC,UAAU,OAAM;AAEvB,OAAO,MAAMC,UAAU,CAACC;IACtB,MAAMC,QAAQD,MAAMC;IAEpB,MAAMC,iBAAiBJ,KAAKK,OAAO,CAACC,QAAQC,GAAG,IAAI;IACnD,IAAI,CAACR,GAAGS,UAAU,CAACJ,iBAAiB;QAClCK,QAAQC,GAAG,CAAC,CAAC,2BAA2B,EAAEN,eAAe,CAAC;QAC1DE,QAAQK,IAAI,CAAC;IACf;IAEA,MAAMC,iBAAiBZ,KAAKK,OAAO,CAACQ,WAAW,SAAS,QAAQ;IAChE,MAAMC,iBAAiBR,QAAQC,GAAG;IAElC,IAAI,CAACR,GAAGS,UAAU,CAACI,iBAAiB;QAClCH,QAAQC,GAAG,CAAC,CAAC,0CAA0C,EAAEE,eAAe,CAAC;QACzEN,QAAQK,IAAI,CAAC;IACf;IAEA,IAAI,CAACZ,GAAGS,UAAU,CAACR,KAAKK,OAAO,CAACS,gBAAgB,SAAS;QACvDL,QAAQC,GAAG,CAAC,CAAC,qCAAqC,EAAEI,eAAe,IAAI,CAAC;QACxER,QAAQK,IAAI,CAAC;IACf;IAEA,MAAMI,mBAAmBf,KAAKK,OAAO,CAACS,gBAAgB;IAEtD,IAAIX,OAAO;QACTM,QAAQC,GAAG,CAAC;YACVH,KAAKD,QAAQC,GAAG;YAEhB,QAAQ;YACRK;YACAG;YACAD;QACF;IACF;IAEA,kEAAkE;IAClEE,kBAAkBJ,gBAAgBG,kBAAkBZ;IACpDG,QAAQK,IAAI,CAAC;AACf,EAAC;AAED;;CAEC,GACD,SAASK,kBAAkBC,GAAW,EAAEC,IAAY,EAAEf,KAAe;IACnE,MAAMgB,SAASpB,GAAGS,UAAU,CAACS;IAC7B,MAAMG,QAAQD,UAAUpB,GAAGsB,QAAQ,CAACJ;IACpC,MAAMK,cAAcH,UAAUC,MAAME,WAAW;IAC/C,IAAIA,aAAa;QACf,IAAInB,OAAOM,QAAQC,GAAG,CAAC,CAAC,KAAK,EAAEO,IAAI,UAAU,EAAEC,KAAK,CAAC;QACrDnB,GAAGwB,SAAS,CAACL,MAAM;YAAEM,WAAW;QAAK;QACrCzB,GAAG0B,WAAW,CAACR,KAAKS,OAAO,CAAC,CAACC;YAC3BX,kBAAkBhB,KAAK4B,IAAI,CAACX,KAAKU,gBAAgB3B,KAAK4B,IAAI,CAACV,MAAMS;QACnE;IACF,OAAO;QACL,IAAIxB,OAAOM,QAAQC,GAAG,CAAC,CAAC,MAAM,EAAEO,IAAI,UAAU,EAAEC,KAAK,CAAC;QACtDnB,GAAG8B,YAAY,CAACZ,KAAKC;IACvB;AACF;AAEA,IAAIY,QAAQC,IAAI,KAAKC,QAAQ;IAC3B/B,QAAQ;QAAEE,OAAO;IAAK,GAAG8B,KAAK,CAAC,CAACC;QAC9BzB,QAAQ0B,KAAK,CAACD;QACd5B,QAAQK,IAAI,CAAC;IACf;AACF"}
|
package/dist/config.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export default {};
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import type { SanitizedConfig } from 'payload/config'\n\nexport default {} as Promise<SanitizedConfig>\n"],"names":[],"mappings":"AAEA,eAAe,CAAC,EAA6B"}
|
|
@@ -13,4 +13,4 @@ export const ClearRouteCache = ()=>{
|
|
|
13
13
|
return null;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/ClearRouteCache/index.tsx"],"sourcesContent":["'use client'\n\nimport type React from 'react'\n\nimport { usePathname, useRouter } from 'next/navigation.js'\nimport { useEffect } from 'react'\n\nexport const ClearRouteCache: React.FC = () => {\n const pathname = usePathname()\n const router = useRouter()\n\n useEffect(() => {\n router.refresh()\n }, [pathname, router])\n\n return null\n}\n"],"names":["usePathname","useRouter","useEffect","ClearRouteCache","pathname","router","refresh"],"mappings":"AAAA;AAIA,SAASA,WAAW,EAAEC,SAAS,QAAQ,qBAAoB;AAC3D,SAASC,SAAS,QAAQ,QAAO;AAEjC,OAAO,MAAMC,kBAA4B;IACvC,MAAMC,WAAWJ;IACjB,MAAMK,SAASJ;IAEfC,UAAU;QACRG,OAAOC,OAAO;IAChB,GAAG;QAACF;QAAUC;KAAO;IAErB,OAAO;AACT,EAAC"}
|
|
@@ -5,7 +5,6 @@ import { useFormModified } from '@payloadcms/ui/forms';
|
|
|
5
5
|
import { useAuth } from '@payloadcms/ui/providers';
|
|
6
6
|
import { useTranslation } from '@payloadcms/ui/providers';
|
|
7
7
|
import React, { useCallback, useEffect } from 'react';
|
|
8
|
-
import './index.scss';
|
|
9
8
|
import { usePreventLeave } from './usePreventLeave.js';
|
|
10
9
|
const modalSlug = 'leave-without-saving';
|
|
11
10
|
const baseClass = 'leave-without-saving';
|
|
@@ -68,4 +67,4 @@ export const LeaveWithoutSaving = ()=>{
|
|
|
68
67
|
});
|
|
69
68
|
};
|
|
70
69
|
|
|
71
|
-
//# sourceMappingURL=
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/LeaveWithoutSaving/index.tsx"],"sourcesContent":["'use client'\nimport { Modal, useModal } from '@payloadcms/ui'\nimport { Button } from '@payloadcms/ui/elements'\nimport { useFormModified } from '@payloadcms/ui/forms'\nimport { useAuth } from '@payloadcms/ui/providers'\nimport { useTranslation } from '@payloadcms/ui/providers'\nimport React, { useCallback, useEffect } from 'react'\n\nimport './index.scss'\nimport { usePreventLeave } from './usePreventLeave.js'\n\nconst modalSlug = 'leave-without-saving'\n\nconst baseClass = 'leave-without-saving'\n\nconst Component: React.FC<{\n isActive: boolean\n onCancel: () => void\n onConfirm: () => void\n}> = ({ isActive, onCancel, onConfirm }) => {\n const { closeModal, modalState, openModal } = useModal()\n const { t } = useTranslation()\n\n // Manually check for modal state as 'esc' key will not trigger the nav inactivity\n // useEffect(() => {\n // if (!modalState?.[modalSlug]?.isOpen && isActive) {\n // onCancel()\n // }\n // }, [modalState, isActive, onCancel])\n\n useEffect(() => {\n if (isActive) openModal(modalSlug)\n else closeModal(modalSlug)\n }, [isActive, openModal, closeModal])\n\n return (\n <Modal className={baseClass} onClose={onCancel} slug={modalSlug}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <h1>{t('general:leaveWithoutSaving')}</h1>\n <p>{t('general:changesNotSaved')}</p>\n </div>\n <div className={`${baseClass}__controls`}>\n <Button buttonStyle=\"secondary\" onClick={onCancel}>\n {t('general:stayOnThisPage')}\n </Button>\n <Button onClick={onConfirm}>{t('general:leaveAnyway')}</Button>\n </div>\n </div>\n </Modal>\n )\n}\n\nexport const LeaveWithoutSaving: React.FC = () => {\n const modified = useFormModified()\n const { user } = useAuth()\n const [show, setShow] = React.useState(false)\n const [hasAccepted, setHasAccepted] = React.useState(false)\n\n const prevent = Boolean(modified && user)\n\n const onPrevent = useCallback(() => {\n setShow(true)\n }, [])\n\n usePreventLeave({ hasAccepted, onPrevent, prevent })\n\n return (\n <Component\n isActive={show}\n onCancel={() => {\n setShow(false)\n }}\n onConfirm={() => {\n setHasAccepted(true)\n }}\n />\n )\n}\n"],"names":["Modal","useModal","Button","useFormModified","useAuth","useTranslation","React","useCallback","useEffect","usePreventLeave","modalSlug","baseClass","Component","isActive","onCancel","onConfirm","closeModal","modalState","openModal","t","className","onClose","slug","div","h1","p","buttonStyle","onClick","LeaveWithoutSaving","modified","user","show","setShow","useState","hasAccepted","setHasAccepted","prevent","Boolean","onPrevent"],"mappings":"AAAA;AACA,SAASA,KAAK,EAAEC,QAAQ,QAAQ,iBAAgB;AAChD,SAASC,MAAM,QAAQ,0BAAyB;AAChD,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,OAAO,QAAQ,2BAA0B;AAClD,SAASC,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,SAASC,WAAW,EAAEC,SAAS,QAAQ,QAAO;AAGrD,SAASC,eAAe,QAAQ,uBAAsB;AAEtD,MAAMC,YAAY;AAElB,MAAMC,YAAY;AAElB,MAAMC,YAID,CAAC,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,EAAE;IACrC,MAAM,EAAEC,UAAU,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGjB;IAC9C,MAAM,EAAEkB,CAAC,EAAE,GAAGd;IAEd,kFAAkF;IAClF,oBAAoB;IACpB,wDAAwD;IACxD,iBAAiB;IACjB,MAAM;IACN,uCAAuC;IAEvCG,UAAU;QACR,IAAIK,UAAUK,UAAUR;aACnBM,WAAWN;IAClB,GAAG;QAACG;QAAUK;QAAWF;KAAW;IAEpC,qBACE,oBAAChB;QAAMoB,WAAWT;QAAWU,SAASP;QAAUQ,MAAMZ;qBACpD,oBAACa;QAAIH,WAAW,CAAC,EAAET,UAAU,SAAS,CAAC;qBACrC,oBAACY;QAAIH,WAAW,CAAC,EAAET,UAAU,SAAS,CAAC;qBACrC,oBAACa,YAAIL,EAAE,8CACP,oBAACM,WAAGN,EAAE,4CAER,oBAACI;QAAIH,WAAW,CAAC,EAAET,UAAU,UAAU,CAAC;qBACtC,oBAACT;QAAOwB,aAAY;QAAYC,SAASb;OACtCK,EAAE,0CAEL,oBAACjB;QAAOyB,SAASZ;OAAYI,EAAE;AAKzC;AAEA,OAAO,MAAMS,qBAA+B;IAC1C,MAAMC,WAAW1B;IACjB,MAAM,EAAE2B,IAAI,EAAE,GAAG1B;IACjB,MAAM,CAAC2B,MAAMC,QAAQ,GAAG1B,MAAM2B,QAAQ,CAAC;IACvC,MAAM,CAACC,aAAaC,eAAe,GAAG7B,MAAM2B,QAAQ,CAAC;IAErD,MAAMG,UAAUC,QAAQR,YAAYC;IAEpC,MAAMQ,YAAY/B,YAAY;QAC5ByB,QAAQ;IACV,GAAG,EAAE;IAELvB,gBAAgB;QAAEyB;QAAaI;QAAWF;IAAQ;IAElD,qBACE,oBAACxB;QACCC,UAAUkB;QACVjB,UAAU;YACRkB,QAAQ;QACV;QACAjB,WAAW;YACToB,eAAe;QACjB;;AAGN,EAAC"}
|
|
@@ -111,4 +111,4 @@ export const usePreventLeave = ({ hasAccepted = false, message = 'Are you sure w
|
|
|
111
111
|
]);
|
|
112
112
|
};
|
|
113
113
|
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9MZWF2ZVdpdGhvdXRTYXZpbmcvdXNlUHJldmVudExlYXZlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVkaXQ6IEBUYWlraTkyNzc3XG4vLyAgICAtIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2Rpc2N1c3Npb25zLzMyMjMxI2Rpc2N1c3Npb25jb21tZW50LTcyODQzODZcbi8vIENyZWRpdDogYHJlYWN0LXVzZWAgbWFpbnRhaW5lcnNcbi8vICAgIC0gIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL3N0cmVhbWljaC9yZWFjdC11c2UvYmxvYi9hZGU4ZDM5MDVmNTQ0MzA1NTE1ZDAxMDczN2I0YWU2MDRjYzUxMDI0L3NyYy91c2VCZWZvcmVVbmxvYWQudHMjTDJcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuXG5mdW5jdGlvbiBvbjxUIGV4dGVuZHMgRG9jdW1lbnQgfCBFdmVudFRhcmdldCB8IEhUTUxFbGVtZW50IHwgV2luZG93PihcbiAgb2JqOiBUIHwgbnVsbCxcbiAgLi4uYXJnczogW3N0cmluZywgRnVuY3Rpb24gfCBudWxsLCAuLi5hbnldIHwgUGFyYW1ldGVyczxUWydhZGRFdmVudExpc3RlbmVyJ10+XG4pOiB2b2lkIHtcbiAgaWYgKG9iaiAmJiBvYmouYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iai5hZGRFdmVudExpc3RlbmVyKC4uLihhcmdzIGFzIFBhcmFtZXRlcnM8SFRNTEVsZW1lbnRbJ2FkZEV2ZW50TGlzdGVuZXInXT4pKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9mZjxUIGV4dGVuZHMgRG9jdW1lbnQgfCBFdmVudFRhcmdldCB8IEhUTUxFbGVtZW50IHwgV2luZG93PihcbiAgb2JqOiBUIHwgbnVsbCxcbiAgLi4uYXJnczogW3N0cmluZywgRnVuY3Rpb24gfCBudWxsLCAuLi5hbnldIHwgUGFyYW1ldGVyczxUWydyZW1vdmVFdmVudExpc3RlbmVyJ10+XG4pOiB2b2lkIHtcbiAgaWYgKG9iaiAmJiBvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iai5yZW1vdmVFdmVudExpc3RlbmVyKC4uLihhcmdzIGFzIFBhcmFtZXRlcnM8SFRNTEVsZW1lbnRbJ3JlbW92ZUV2ZW50TGlzdGVuZXInXT4pKVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VCZWZvcmVVbmxvYWQgPSAoZW5hYmxlZDogKCgpID0+IGJvb2xlYW4pIHwgYm9vbGVhbiA9IHRydWUsIG1lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaGFuZGxlciA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGZpbmFsRW5hYmxlZCA9IHR5cGVvZiBlbmFibGVkID09PSAnZnVuY3Rpb24nID8gZW5hYmxlZCgpIDogdHJ1ZVxuXG4gICAgICBpZiAoIWZpbmFsRW5hYmxlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IG1lc3NhZ2VcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICB9LFxuICAgIFtlbmFibGVkLCBtZXNzYWdlXSxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBvbih3aW5kb3csICdiZWZvcmV1bmxvYWQnLCBoYW5kbGVyKVxuXG4gICAgcmV0dXJuICgpID0+IG9mZih3aW5kb3csICdiZWZvcmV1bmxvYWQnLCBoYW5kbGVyKVxuICB9LCBbZW5hYmxlZCwgaGFuZGxlcl0pXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcmV2ZW50TGVhdmUgPSAoe1xuICBoYXNBY2NlcHRlZCA9IGZhbHNlLFxuICBtZXNzYWdlID0gJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIGxlYXZlIHRoaXMgcGFnZT8nLFxuICBvblByZXZlbnQsXG4gIHByZXZlbnQgPSB0cnVlLFxufToge1xuICBoYXNBY2NlcHRlZDogYm9vbGVhblxuICAvLyBpZiBubyBgb25QcmV2ZW50YCBpcyBwcm92aWRlZCwgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgaW4gYSBjb25maXJtIGRpYWxvZ1xuICBtZXNzYWdlPzogc3RyaW5nXG4gIC8vIHRvIHVzZSBhIGN1c3RvbSBjb25maXJtYXRpb24gZGlhbG9nLCBwcm92aWRlIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgYm9vbGVhblxuICBvblByZXZlbnQ/OiAoKSA9PiB2b2lkXG4gIHByZXZlbnQ6IGJvb2xlYW5cbn0pID0+IHtcbiAgLy8gY2hlY2sgd2hlbiBwYWdlIGlzIGFib3V0IHRvIGJlIHJlbG9hZGVkXG4gIHVzZUJlZm9yZVVubG9hZChwcmV2ZW50LCBtZXNzYWdlKVxuXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIGNvbnN0IGNhbmNlbGxlZFVSTCA9IHVzZVJlZjxzdHJpbmc+KCcnKVxuXG4gIC8vIGNoZWNrIHdoZW4gcGFnZSBpcyBhYm91dCB0byBiZSBjaGFuZ2VkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZnVuY3Rpb24gaXNBbmNob3JPZkN1cnJlbnRVcmwoY3VycmVudFVybDogc3RyaW5nLCBuZXdVcmw6IHN0cmluZykge1xuICAgICAgY29uc3QgY3VycmVudFVybE9iaiA9IG5ldyBVUkwoY3VycmVudFVybClcbiAgICAgIGNvbnN0IG5ld1VybE9iaiA9IG5ldyBVUkwobmV3VXJsKVxuICAgICAgLy8gQ29tcGFyZSBob3N0bmFtZSwgcGF0aG5hbWUsIGFuZCBzZWFyY2ggcGFyYW1ldGVyc1xuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50VXJsT2JqLmhvc3RuYW1lID09PSBuZXdVcmxPYmouaG9zdG5hbWUgJiZcbiAgICAgICAgY3VycmVudFVybE9iai5wYXRobmFtZSA9PT0gbmV3VXJsT2JqLnBhdGhuYW1lICYmXG4gICAgICAgIGN1cnJlbnRVcmxPYmouc2VhcmNoID09PSBuZXdVcmxPYmouc2VhcmNoXG4gICAgICApIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG5ldyBVUkwgaXMganVzdCBhbiBhbmNob3Igb2YgdGhlIGN1cnJlbnQgVVJMIHBhZ2VcbiAgICAgICAgY29uc3QgY3VycmVudEhhc2ggPSBjdXJyZW50VXJsT2JqLmhhc2hcbiAgICAgICAgY29uc3QgbmV3SGFzaCA9IG5ld1VybE9iai5oYXNoXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY3VycmVudEhhc2ggIT09IG5ld0hhc2ggJiZcbiAgICAgICAgICBjdXJyZW50VXJsT2JqLmhyZWYucmVwbGFjZShjdXJyZW50SGFzaCwgJycpID09PSBuZXdVcmxPYmouaHJlZi5yZXBsYWNlKG5ld0hhc2gsICcnKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kQ2xvc2VzdEFuY2hvcihlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpOiBIVE1MQW5jaG9yRWxlbWVudCB8IG51bGwge1xuICAgICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdhJykge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudCBhcyBIVE1MQW5jaG9yRWxlbWVudFxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IGZpbmRDbG9zZXN0QW5jaG9yKHRhcmdldClcbiAgICAgICAgaWYgKGFuY2hvcikge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgICAgICAgIGNvbnN0IG5ld1VybCA9IGFuY2hvci5ocmVmXG4gICAgICAgICAgY29uc3QgaXNBbmNob3IgPSBpc0FuY2hvck9mQ3VycmVudFVybChjdXJyZW50VXJsLCBuZXdVcmwpXG4gICAgICAgICAgY29uc3QgaXNEb3dubG9hZExpbmsgPSBhbmNob3IuZG93bmxvYWQgIT09ICcnXG5cbiAgICAgICAgICBjb25zdCBpc1BhZ2VMZWF2aW5nID0gIShuZXdVcmwgPT09IGN1cnJlbnRVcmwgfHwgaXNBbmNob3IgfHwgaXNEb3dubG9hZExpbmspXG5cbiAgICAgICAgICBpZiAoaXNQYWdlTGVhdmluZyAmJiBwcmV2ZW50ICYmICghb25QcmV2ZW50ID8gIXdpbmRvdy5jb25maXJtKG1lc3NhZ2UpIDogdHJ1ZSkpIHtcbiAgICAgICAgICAgIC8vIEtlZXAgYSByZWZlcmVuY2Ugb2YgdGhlIGhyZWZcbiAgICAgICAgICAgIGNhbmNlbGxlZFVSTC5jdXJyZW50ID0gbmV3VXJsXG5cbiAgICAgICAgICAgIC8vIENhbmNlbCB0aGUgcm91dGUgY2hhbmdlXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9uUHJldmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBvblByZXZlbnQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGFsZXJ0KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGdsb2JhbCBjbGljayBldmVudCBsaXN0ZW5lclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2ssIHRydWUpXG5cbiAgICAvLyBDbGVhbiB1cCB0aGUgZ2xvYmFsIGNsaWNrIGV2ZW50IGxpc3RlbmVyIHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bm1vdW50ZWRcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGljaywgdHJ1ZSlcbiAgICB9XG4gIH0sIFtvblByZXZlbnQsIHByZXZlbnQsIG1lc3NhZ2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhhc0FjY2VwdGVkICYmIGNhbmNlbGxlZFVSTC5jdXJyZW50KSB7XG4gICAgICByb3V0ZXIucHVzaChjYW5jZWxsZWRVUkwuY3VycmVudClcbiAgICB9XG4gIH0sIFtoYXNBY2NlcHRlZCwgcm91dGVyXSlcbn1cbiJdLCJuYW1lcyI6WyJ1c2VSb3V0ZXIiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsIm9uIiwib2JqIiwiYXJncyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvZmYiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXNlQmVmb3JlVW5sb2FkIiwiZW5hYmxlZCIsIm1lc3NhZ2UiLCJoYW5kbGVyIiwiZXZlbnQiLCJmaW5hbEVuYWJsZWQiLCJwcmV2ZW50RGVmYXVsdCIsInJldHVyblZhbHVlIiwid2luZG93IiwidXNlUHJldmVudExlYXZlIiwiaGFzQWNjZXB0ZWQiLCJvblByZXZlbnQiLCJwcmV2ZW50Iiwicm91dGVyIiwiY2FuY2VsbGVkVVJMIiwiaXNBbmNob3JPZkN1cnJlbnRVcmwiLCJjdXJyZW50VXJsIiwibmV3VXJsIiwiY3VycmVudFVybE9iaiIsIlVSTCIsIm5ld1VybE9iaiIsImhvc3RuYW1lIiwicGF0aG5hbWUiLCJzZWFyY2giLCJjdXJyZW50SGFzaCIsImhhc2giLCJuZXdIYXNoIiwiaHJlZiIsInJlcGxhY2UiLCJmaW5kQ2xvc2VzdEFuY2hvciIsImVsZW1lbnQiLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJwYXJlbnRFbGVtZW50IiwiaGFuZGxlQ2xpY2siLCJ0YXJnZXQiLCJhbmNob3IiLCJsb2NhdGlvbiIsImlzQW5jaG9yIiwiaXNEb3dubG9hZExpbmsiLCJkb3dubG9hZCIsImlzUGFnZUxlYXZpbmciLCJjb25maXJtIiwiY3VycmVudCIsInN0b3BQcm9wYWdhdGlvbiIsImVyciIsImFsZXJ0IiwiZG9jdW1lbnQiLCJwdXNoIl0sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsNkZBQTZGO0FBQzdGLGtDQUFrQztBQUNsQywrSEFBK0g7QUFDL0gsU0FBU0EsU0FBUyxRQUFRLHFCQUFvQjtBQUM5QyxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxRQUFRLFFBQU87QUFFdEQsU0FBU0MsR0FDUEMsR0FBYSxFQUNiLEdBQUdDLElBQTJFO0lBRTlFLElBQUlELE9BQU9BLElBQUlFLGdCQUFnQixFQUFFO1FBQy9CRixJQUFJRSxnQkFBZ0IsSUFBS0Q7SUFDM0I7QUFDRjtBQUVBLFNBQVNFLElBQ1BILEdBQWEsRUFDYixHQUFHQyxJQUE4RTtJQUVqRixJQUFJRCxPQUFPQSxJQUFJSSxtQkFBbUIsRUFBRTtRQUNsQ0osSUFBSUksbUJBQW1CLElBQUtIO0lBQzlCO0FBQ0Y7QUFFQSxPQUFPLE1BQU1JLGtCQUFrQixDQUFDQyxVQUFxQyxJQUFJLEVBQUVDO0lBQ3pFLE1BQU1DLFVBQVVaLFlBQ2QsQ0FBQ2E7UUFDQyxNQUFNQyxlQUFlLE9BQU9KLFlBQVksYUFBYUEsWUFBWTtRQUVqRSxJQUFJLENBQUNJLGNBQWM7WUFDakI7UUFDRjtRQUVBRCxNQUFNRSxjQUFjO1FBRXBCLElBQUlKLFNBQVM7WUFDWEUsTUFBTUcsV0FBVyxHQUFHTDtRQUN0QjtRQUVBLE9BQU9BO0lBQ1QsR0FDQTtRQUFDRDtRQUFTQztLQUFRO0lBR3BCVixVQUFVO1FBQ1IsSUFBSSxDQUFDUyxTQUFTO1lBQ1o7UUFDRjtRQUVBUCxHQUFHYyxRQUFRLGdCQUFn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
|
|
114
|
+
//# sourceMappingURL=usePreventLeave.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/LeaveWithoutSaving/usePreventLeave.tsx"],"sourcesContent":["// Credit: @Taiki92777\n// - Source: https://github.com/vercel/next.js/discussions/32231#discussioncomment-7284386\n// Credit: `react-use` maintainers\n// - Source: https://github.com/streamich/react-use/blob/ade8d3905f544305515d010737b4ae604cc51024/src/useBeforeUnload.ts#L2\nimport { useRouter } from 'next/navigation.js'\nimport { useCallback, useEffect, useRef } from 'react'\n\nfunction on<T extends Document | EventTarget | HTMLElement | Window>(\n obj: T | null,\n ...args: [string, Function | null, ...any] | Parameters<T['addEventListener']>\n): void {\n if (obj && obj.addEventListener) {\n obj.addEventListener(...(args as Parameters<HTMLElement['addEventListener']>))\n }\n}\n\nfunction off<T extends Document | EventTarget | HTMLElement | Window>(\n obj: T | null,\n ...args: [string, Function | null, ...any] | Parameters<T['removeEventListener']>\n): void {\n if (obj && obj.removeEventListener) {\n obj.removeEventListener(...(args as Parameters<HTMLElement['removeEventListener']>))\n }\n}\n\nexport const useBeforeUnload = (enabled: (() => boolean) | boolean = true, message?: string) => {\n const handler = useCallback(\n (event: BeforeUnloadEvent) => {\n const finalEnabled = typeof enabled === 'function' ? enabled() : true\n\n if (!finalEnabled) {\n return\n }\n\n event.preventDefault()\n\n if (message) {\n event.returnValue = message\n }\n\n return message\n },\n [enabled, message],\n )\n\n useEffect(() => {\n if (!enabled) {\n return\n }\n\n on(window, 'beforeunload', handler)\n\n return () => off(window, 'beforeunload', handler)\n }, [enabled, handler])\n}\n\nexport const usePreventLeave = ({\n hasAccepted = false,\n message = 'Are you sure want to leave this page?',\n onPrevent,\n prevent = true,\n}: {\n hasAccepted: boolean\n // if no `onPrevent` is provided, the message will be displayed in a confirm dialog\n message?: string\n // to use a custom confirmation dialog, provide a function that returns a boolean\n onPrevent?: () => void\n prevent: boolean\n}) => {\n // check when page is about to be reloaded\n useBeforeUnload(prevent, message)\n\n const router = useRouter()\n const cancelledURL = useRef<string>('')\n\n // check when page is about to be changed\n useEffect(() => {\n function isAnchorOfCurrentUrl(currentUrl: string, newUrl: string) {\n const currentUrlObj = new URL(currentUrl)\n const newUrlObj = new URL(newUrl)\n // Compare hostname, pathname, and search parameters\n if (\n currentUrlObj.hostname === newUrlObj.hostname &&\n currentUrlObj.pathname === newUrlObj.pathname &&\n currentUrlObj.search === newUrlObj.search\n ) {\n // Check if the new URL is just an anchor of the current URL page\n const currentHash = currentUrlObj.hash\n const newHash = newUrlObj.hash\n return (\n currentHash !== newHash &&\n currentUrlObj.href.replace(currentHash, '') === newUrlObj.href.replace(newHash, '')\n )\n }\n return false\n }\n\n function findClosestAnchor(element: HTMLElement | null): HTMLAnchorElement | null {\n while (element && element.tagName.toLowerCase() !== 'a') {\n element = element.parentElement\n }\n return element as HTMLAnchorElement\n }\n function handleClick(event: MouseEvent) {\n try {\n const target = event.target as HTMLElement\n const anchor = findClosestAnchor(target)\n if (anchor) {\n const currentUrl = window.location.href\n const newUrl = anchor.href\n const isAnchor = isAnchorOfCurrentUrl(currentUrl, newUrl)\n const isDownloadLink = anchor.download !== ''\n\n const isPageLeaving = !(newUrl === currentUrl || isAnchor || isDownloadLink)\n\n if (isPageLeaving && prevent && (!onPrevent ? !window.confirm(message) : true)) {\n // Keep a reference of the href\n cancelledURL.current = newUrl\n\n // Cancel the route change\n event.preventDefault()\n event.stopPropagation()\n\n if (typeof onPrevent === 'function') {\n onPrevent()\n }\n }\n }\n } catch (err) {\n alert(err)\n }\n }\n\n // Add the global click event listener\n document.addEventListener('click', handleClick, true)\n\n // Clean up the global click event listener when the component is unmounted\n return () => {\n document.removeEventListener('click', handleClick, true)\n }\n }, [onPrevent, prevent, message])\n\n useEffect(() => {\n if (hasAccepted && cancelledURL.current) {\n router.push(cancelledURL.current)\n }\n }, [hasAccepted, router])\n}\n"],"names":["useRouter","useCallback","useEffect","useRef","on","obj","args","addEventListener","off","removeEventListener","useBeforeUnload","enabled","message","handler","event","finalEnabled","preventDefault","returnValue","window","usePreventLeave","hasAccepted","onPrevent","prevent","router","cancelledURL","isAnchorOfCurrentUrl","currentUrl","newUrl","currentUrlObj","URL","newUrlObj","hostname","pathname","search","currentHash","hash","newHash","href","replace","findClosestAnchor","element","tagName","toLowerCase","parentElement","handleClick","target","anchor","location","isAnchor","isDownloadLink","download","isPageLeaving","confirm","current","stopPropagation","err","alert","document","push"],"mappings":"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"}
|
package/dist/exports/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { default as withPayload } from '../withPayload.js';
|
|
2
2
|
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/exports/index.ts"],"sourcesContent":["export { default as withPayload } from '../withPayload.js'\n"],"names":["default","withPayload"],"mappings":"AAAA,SAASA,WAAWC,WAAW,QAAQ,oBAAmB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=registerSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/graphql/registerSchema.ts"],"names":[],"mappings":""}
|
package/dist/index.js
CHANGED
|
@@ -4,4 +4,4 @@ export { Dashboard as DashboardPage } from './views/Dashboard/index.js';
|
|
|
4
4
|
export { Login } from './views/Login/index.js';
|
|
5
5
|
export { RootPage } from './views/Root/index.js';
|
|
6
6
|
|
|
7
|
-
//# sourceMappingURL=
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { AdminLayout } from './layouts/Admin/index.js'\nexport { RootLayout } from './layouts/Root/index.js'\nexport { Dashboard as DashboardPage } from './views/Dashboard/index.js'\nexport { Login } from './views/Login/index.js'\nexport { RootPage } from './views/Root/index.js'\n"],"names":["AdminLayout","RootLayout","Dashboard","DashboardPage","Login","RootPage"],"mappings":"AAAA,SAASA,WAAW,QAAQ,2BAA0B;AACtD,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,aAAaC,aAAa,QAAQ,6BAA4B;AACvE,SAASC,KAAK,QAAQ,yBAAwB;AAC9C,SAASC,QAAQ,QAAQ,wBAAuB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { DefaultTemplate } from '@payloadcms/ui';
|
|
2
|
-
import '@payloadcms/ui/scss/app.scss';
|
|
3
2
|
import React from 'react';
|
|
4
3
|
import { initPage } from '../../utilities/initPage.js';
|
|
5
4
|
export const metadata = {
|
|
@@ -18,4 +17,4 @@ export const AdminLayout = async ({ children, config })=>{
|
|
|
18
17
|
}, children);
|
|
19
18
|
};
|
|
20
19
|
|
|
21
|
-
//# sourceMappingURL=
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/layouts/Admin/index.tsx"],"sourcesContent":["import type { SanitizedConfig } from 'payload/types'\n\nimport { DefaultTemplate } from '@payloadcms/ui'\nimport '@payloadcms/ui/scss/app.scss'\nimport React from 'react'\n\nimport { initPage } from '../../utilities/initPage.js'\n\nexport const metadata = {\n description: 'Generated by Next.js',\n title: 'Next.js',\n}\n\nexport const AdminLayout = async ({\n children,\n config,\n}: {\n children: React.ReactNode\n config: Promise<SanitizedConfig> | SanitizedConfig\n}) => {\n const { permissions, req } = await initPage({ config })\n\n return (\n <DefaultTemplate config={config} i18n={req.i18n} permissions={permissions} user={req.user}>\n {children}\n </DefaultTemplate>\n )\n}\n"],"names":["DefaultTemplate","React","initPage","metadata","description","title","AdminLayout","children","config","permissions","req","i18n","user"],"mappings":"AAEA,SAASA,eAAe,QAAQ,iBAAgB;AAEhD,OAAOC,WAAW,QAAO;AAEzB,SAASC,QAAQ,QAAQ,8BAA6B;AAEtD,OAAO,MAAMC,WAAW;IACtBC,aAAa;IACbC,OAAO;AACT,EAAC;AAED,OAAO,MAAMC,cAAc,OAAO,EAChCC,QAAQ,EACRC,MAAM,EAIP;IACC,MAAM,EAAEC,WAAW,EAAEC,GAAG,EAAE,GAAG,MAAMR,SAAS;QAAEM;IAAO;IAErD,qBACE,oBAACR;QAAgBQ,QAAQA;QAAQG,MAAMD,IAAIC,IAAI;QAAEF,aAAaA;QAAaG,MAAMF,IAAIE,IAAI;OACtFL;AAGP,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/Root/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/Root/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAIpD,OAAO,8BAA8B,CAAA;AAIrC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,uCAAuC,CAAA;AAU9C,eAAO,MAAM,QAAQ;;;CAGpB,CAAA;AAID,eAAO,MAAM,UAAU;cAIX,MAAM,SAAS;YACjB,QAAQ,eAAe,CAAC;gCAwDjC,CAAA"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { auth } from '@payloadcms/next/utilities/auth';
|
|
2
1
|
import { translations } from '@payloadcms/translations/client';
|
|
3
2
|
import { RootProvider, buildComponentMap } from '@payloadcms/ui';
|
|
4
|
-
import '@payloadcms/ui/scss/app.scss';
|
|
5
3
|
import { headers as getHeaders } from 'next/headers.js';
|
|
6
4
|
import { createClientConfig } from 'payload/config';
|
|
7
5
|
import { deepMerge } from 'payload/utilities';
|
|
8
6
|
import React from 'react';
|
|
9
|
-
import 'react-toastify/dist/ReactToastify.css';
|
|
10
7
|
import { ClearRouteCache } from '../../elements/ClearRouteCache/index.js';
|
|
8
|
+
import { auth } from '../../utilities/auth.js';
|
|
11
9
|
import { getPayload } from '../../utilities/getPayload.js';
|
|
12
10
|
import { getRequestLanguage } from '../../utilities/getRequestLanguage.js';
|
|
13
11
|
import { DefaultEditView } from '../../views/Edit/Default/index.js';
|
|
@@ -74,4 +72,4 @@ export const RootLayout = async ({ children, config: configPromise })=>{
|
|
|
74
72
|
})));
|
|
75
73
|
};
|
|
76
74
|
|
|
77
|
-
//# sourceMappingURL=
|
|
75
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/layouts/Root/index.tsx"],"sourcesContent":["import type { SanitizedConfig } from 'payload/types'\n\nimport { translations } from '@payloadcms/translations/client'\nimport { RootProvider, buildComponentMap } from '@payloadcms/ui'\nimport '@payloadcms/ui/scss/app.scss'\nimport { headers as getHeaders } from 'next/headers.js'\nimport { createClientConfig } from 'payload/config'\nimport { deepMerge } from 'payload/utilities'\nimport React from 'react'\nimport 'react-toastify/dist/ReactToastify.css'\n\nimport { ClearRouteCache } from '../../elements/ClearRouteCache/index.js'\nimport { auth } from '../../utilities/auth.js'\nimport { getPayload } from '../../utilities/getPayload.js'\nimport { getRequestLanguage } from '../../utilities/getRequestLanguage.js'\nimport { DefaultEditView } from '../../views/Edit/Default/index.js'\nimport { DefaultCell } from '../../views/List/Default/Cell/index.js'\nimport { DefaultListView } from '../../views/List/Default/index.js'\n\nexport const metadata = {\n description: 'Generated by Next.js',\n title: 'Next.js',\n}\n\nconst rtlLanguages = ['ar', 'fa', 'ha', 'ku', 'ur', 'ps', 'dv', 'ks', 'khw', 'he', 'yi']\n\nexport const RootLayout = async ({\n children,\n config: configPromise,\n}: {\n children: React.ReactNode\n config: Promise<SanitizedConfig>\n}) => {\n const config = await configPromise\n const clientConfig = await createClientConfig(config)\n\n const headers = getHeaders()\n\n const payload = await getPayload({ config: configPromise })\n\n const { cookies, permissions, user } = await auth({\n headers,\n payload,\n })\n\n const lang =\n getRequestLanguage({\n cookies,\n headers,\n }) ?? clientConfig.i18n.fallbackLanguage\n\n const dir = rtlLanguages.includes(lang) ? 'RTL' : 'LTR'\n\n const mergedTranslations = deepMerge(translations, clientConfig.i18n.translations)\n\n const languageOptions = Object.entries(translations || {}).map(([language, translations]) => ({\n label: translations.general.thisLanguage,\n value: language,\n }))\n\n const { componentMap, wrappedChildren } = buildComponentMap({\n DefaultCell,\n DefaultEditView,\n DefaultListView,\n children,\n config,\n permissions,\n })\n\n return (\n <html dir={dir} lang={lang}>\n <body>\n <ClearRouteCache />\n <RootProvider\n componentMap={componentMap}\n config={clientConfig}\n fallbackLang={clientConfig.i18n.fallbackLanguage}\n lang={lang}\n languageOptions={languageOptions}\n translations={mergedTranslations[lang]}\n >\n {wrappedChildren}\n </RootProvider>\n <div id=\"portal\" />\n </body>\n </html>\n )\n}\n"],"names":["translations","RootProvider","buildComponentMap","headers","getHeaders","createClientConfig","deepMerge","React","ClearRouteCache","auth","getPayload","getRequestLanguage","DefaultEditView","DefaultCell","DefaultListView","metadata","description","title","rtlLanguages","RootLayout","children","config","configPromise","clientConfig","payload","cookies","permissions","user","lang","i18n","fallbackLanguage","dir","includes","mergedTranslations","languageOptions","Object","entries","map","language","label","general","thisLanguage","value","componentMap","wrappedChildren","html","body","fallbackLang","div","id"],"mappings":"AAEA,SAASA,YAAY,QAAQ,kCAAiC;AAC9D,SAASC,YAAY,EAAEC,iBAAiB,QAAQ,iBAAgB;AAEhE,SAASC,WAAWC,UAAU,QAAQ,kBAAiB;AACvD,SAASC,kBAAkB,QAAQ,iBAAgB;AACnD,SAASC,SAAS,QAAQ,oBAAmB;AAC7C,OAAOC,WAAW,QAAO;AAGzB,SAASC,eAAe,QAAQ,0CAAyC;AACzE,SAASC,IAAI,QAAQ,0BAAyB;AAC9C,SAASC,UAAU,QAAQ,gCAA+B;AAC1D,SAASC,kBAAkB,QAAQ,wCAAuC;AAC1E,SAASC,eAAe,QAAQ,oCAAmC;AACnE,SAASC,WAAW,QAAQ,yCAAwC;AACpE,SAASC,eAAe,QAAQ,oCAAmC;AAEnE,OAAO,MAAMC,WAAW;IACtBC,aAAa;IACbC,OAAO;AACT,EAAC;AAED,MAAMC,eAAe;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAAM;IAAO;IAAM;CAAK;AAExF,OAAO,MAAMC,aAAa,OAAO,EAC/BC,QAAQ,EACRC,QAAQC,aAAa,EAItB;IACC,MAAMD,SAAS,MAAMC;IACrB,MAAMC,eAAe,MAAMlB,mBAAmBgB;IAE9C,MAAMlB,UAAUC;IAEhB,MAAMoB,UAAU,MAAMd,WAAW;QAAEW,QAAQC;IAAc;IAEzD,MAAM,EAAEG,OAAO,EAAEC,WAAW,EAAEC,IAAI,EAAE,GAAG,MAAMlB,KAAK;QAChDN;QACAqB;IACF;IAEA,MAAMI,OACJjB,mBAAmB;QACjBc;QACAtB;IACF,MAAMoB,aAAaM,IAAI,CAACC,gBAAgB;IAE1C,MAAMC,MAAMb,aAAac,QAAQ,CAACJ,QAAQ,QAAQ;IAElD,MAAMK,qBAAqB3B,UAAUN,cAAcuB,aAAaM,IAAI,CAAC7B,YAAY;IAEjF,MAAMkC,kBAAkBC,OAAOC,OAAO,CAACpC,gBAAgB,CAAC,GAAGqC,GAAG,CAAC,CAAC,CAACC,UAAUtC,aAAa,GAAM,CAAA;YAC5FuC,OAAOvC,aAAawC,OAAO,CAACC,YAAY;YACxCC,OAAOJ;QACT,CAAA;IAEA,MAAM,EAAEK,YAAY,EAAEC,eAAe,EAAE,GAAG1C,kBAAkB;QAC1DW;QACAD;QACAE;QACAM;QACAC;QACAK;IACF;IAEA,qBACE,oBAACmB;QAAKd,KAAKA;QAAKH,MAAMA;qBACpB,oBAACkB,4BACC,oBAACtC,sCACD,oBAACP;QACC0C,cAAcA;QACdtB,QAAQE;QACRwB,cAAcxB,aAAaM,IAAI,CAACC,gBAAgB;QAChDF,MAAMA;QACNM,iBAAiBA;QACjBlC,cAAciC,kBAAkB,CAACL,KAAK;OAErCgB,gCAEH,oBAACI;QAAIC,IAAG;;AAIhB,EAAC"}
|
|
@@ -40,4 +40,4 @@ export const fileFactory = (options, fileUploadOptions)=>{
|
|
|
40
40
|
};
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
//# sourceMappingURL=
|
|
43
|
+
//# sourceMappingURL=fileFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next-fileupload/fileFactory.ts"],"sourcesContent":["import type { FileShape, NextFileUploadOptions } from './index.js'\n\nimport {\n checkAndMakeDir,\n debugLog,\n isFunc,\n moveFile,\n promiseCallback,\n saveBufferToFile,\n} from './utilities.js'\n\ntype MoveFile = (\n filePath: string,\n options: FileFactoryOptions,\n fileUploadOptions: NextFileUploadOptions,\n) => (resolve: () => void, reject: () => void) => void\n\n/**\n * Returns Local function that moves the file to a different location on the filesystem\n * which takes two function arguments to make it compatible w/ Promise or Callback APIs\n */\nconst moveFromTemp: MoveFile = (filePath, options, fileUploadOptions) => (resolve, reject) => {\n debugLog(fileUploadOptions, `Moving temporary file ${options.tempFilePath} to ${filePath}`)\n moveFile(options.tempFilePath, filePath, promiseCallback(resolve, reject))\n}\n\n/**\n * Returns Local function that moves the file from buffer to a different location on the filesystem\n * which takes two function arguments to make it compatible w/ Promise or Callback APIs\n */\nconst moveFromBuffer: MoveFile = (filePath, options, fileUploadOptions) => (resolve, reject) => {\n debugLog(fileUploadOptions, `Moving uploaded buffer to ${filePath}`)\n saveBufferToFile(options.buffer, filePath, promiseCallback(resolve, reject))\n}\n\ntype FileFactoryOptions = {\n buffer: Buffer\n encoding: string\n hash: Buffer | string\n mimetype: string\n name: string\n size: number\n tempFilePath: string\n truncated: boolean\n}\ntype FileFactory = (\n options: FileFactoryOptions,\n fileUploadOptions: NextFileUploadOptions,\n) => FileShape\nexport const fileFactory: FileFactory = (options, fileUploadOptions) => {\n // see: https://github.com/richardgirges/express-fileupload/issues/14\n // firefox uploads empty file in case of cache miss when f5ing page.\n // resulting in unexpected behavior. if there is no file data, the file is invalid.\n // if (!fileUploadOptions.useTempFiles && !options.buffer.length) return;\n\n // Create and return file object.\n return {\n name: options.name,\n data: options.buffer,\n encoding: options.encoding,\n md5: options.hash,\n mimetype: options.mimetype,\n mv: (filePath: string, callback) => {\n // Define a proper move function.\n const moveFunc = fileUploadOptions.useTempFiles\n ? moveFromTemp(filePath, options, fileUploadOptions)\n : moveFromBuffer(filePath, options, fileUploadOptions)\n // Create a folder for a file.\n checkAndMakeDir(fileUploadOptions, filePath)\n // If callback is passed in, use the callback API, otherwise return a promise.\n const defaultReject = () => undefined\n return isFunc(callback) ? moveFunc(callback, defaultReject) : new Promise(moveFunc)\n },\n size: options.size,\n tempFilePath: options.tempFilePath,\n truncated: options.truncated,\n }\n}\n"],"names":["checkAndMakeDir","debugLog","isFunc","moveFile","promiseCallback","saveBufferToFile","moveFromTemp","filePath","options","fileUploadOptions","resolve","reject","tempFilePath","moveFromBuffer","buffer","fileFactory","name","data","encoding","md5","hash","mimetype","mv","callback","moveFunc","useTempFiles","defaultReject","undefined","Promise","size","truncated"],"mappings":"AAEA,SACEA,eAAe,EACfC,QAAQ,EACRC,MAAM,EACNC,QAAQ,EACRC,eAAe,EACfC,gBAAgB,QACX,iBAAgB;AAQvB;;;CAGC,GACD,MAAMC,eAAyB,CAACC,UAAUC,SAASC,oBAAsB,CAACC,SAASC;QACjFV,SAASQ,mBAAmB,CAAC,sBAAsB,EAAED,QAAQI,YAAY,CAAC,IAAI,EAAEL,SAAS,CAAC;QAC1FJ,SAASK,QAAQI,YAAY,EAAEL,UAAUH,gBAAgBM,SAASC;IACpE;AAEA;;;CAGC,GACD,MAAME,iBAA2B,CAACN,UAAUC,SAASC,oBAAsB,CAACC,SAASC;QACnFV,SAASQ,mBAAmB,CAAC,0BAA0B,EAAEF,SAAS,CAAC;QACnEF,iBAAiBG,QAAQM,MAAM,EAAEP,UAAUH,gBAAgBM,SAASC;IACtE;AAgBA,OAAO,MAAMI,cAA2B,CAACP,SAASC;IAChD,qEAAqE;IACrE,oEAAoE;IACpE,mFAAmF;IACnF,yEAAyE;IAEzE,iCAAiC;IACjC,OAAO;QACLO,MAAMR,QAAQQ,IAAI;QAClBC,MAAMT,QAAQM,MAAM;QACpBI,UAAUV,QAAQU,QAAQ;QAC1BC,KAAKX,QAAQY,IAAI;QACjBC,UAAUb,QAAQa,QAAQ;QAC1BC,IAAI,CAACf,UAAkBgB;YACrB,iCAAiC;YACjC,MAAMC,WAAWf,kBAAkBgB,YAAY,GAC3CnB,aAAaC,UAAUC,SAASC,qBAChCI,eAAeN,UAAUC,SAASC;YACtC,8BAA8B;YAC9BT,gBAAgBS,mBAAmBF;YACnC,8EAA8E;YAC9E,MAAMmB,gBAAgB,IAAMC;YAC5B,OAAOzB,OAAOqB,YAAYC,SAASD,UAAUG,iBAAiB,IAAIE,QAAQJ;QAC5E;QACAK,MAAMrB,QAAQqB,IAAI;QAClBjB,cAAcJ,QAAQI,YAAY;QAClCkB,WAAWtB,QAAQsB,SAAS;IAC9B;AACF,EAAC"}
|
|
@@ -83,4 +83,4 @@ export const memHandler = (options, fieldname, filename)=>{
|
|
|
83
83
|
};
|
|
84
84
|
};
|
|
85
85
|
|
|
86
|
-
//# sourceMappingURL=
|
|
86
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next-fileupload/handlers.ts"],"sourcesContent":["import crypto from 'crypto'\nimport fs, { WriteStream } from 'fs'\nimport path from 'path'\n\nimport type { NextFileUploadOptions } from './index.js'\n\nimport { checkAndMakeDir, debugLog, deleteFile, getTempFilename } from './utilities.js'\n\ntype Handler = (\n options: NextFileUploadOptions,\n fieldname: string,\n filename: string,\n) => {\n cleanup: () => void\n complete: () => Buffer\n dataHandler: (data: Buffer) => void\n getFilePath: () => string\n getFileSize: () => number\n getHash: () => string\n getWritePromise: () => Promise<boolean>\n}\n\nexport const tempFileHandler: Handler = (options, fieldname, filename) => {\n const dir = path.normalize(options.tempFileDir)\n const tempFilePath = path.join(process.cwd(), dir, getTempFilename())\n checkAndMakeDir({ createParentPath: true }, tempFilePath)\n\n debugLog(options, `Temporary file path is ${tempFilePath}`)\n\n const hash = crypto.createHash('md5')\n let fileSize = 0\n let completed = false\n\n debugLog(options, `Opening write stream for ${fieldname}->${filename}...`)\n const writeStream = fs.createWriteStream(tempFilePath)\n const writePromise = new Promise<boolean>((resolve, reject) => {\n writeStream.on('finish', () => resolve(true))\n writeStream.on('error', (err) => {\n debugLog(options, `Error write temp file: ${err}`)\n reject(err)\n })\n })\n\n return {\n cleanup: () => {\n completed = true\n debugLog(options, `Cleaning up temporary file ${tempFilePath}...`)\n writeStream.end()\n deleteFile(tempFilePath, (err) =>\n err\n ? debugLog(options, `Cleaning up temporary file ${tempFilePath} failed: ${err}`)\n : debugLog(options, `Cleaning up temporary file ${tempFilePath} done.`),\n )\n },\n complete: () => {\n completed = true\n debugLog(options, `Upload ${fieldname}->${filename} completed, bytes:${fileSize}.`)\n if (writeStream instanceof WriteStream) writeStream.end()\n // Return empty buff since data was uploaded into a temp file.\n return Buffer.concat([])\n },\n dataHandler: (data) => {\n if (completed === true) {\n debugLog(options, `Error: got ${fieldname}->${filename} data chunk for completed upload!`)\n return\n }\n writeStream.write(data)\n hash.update(data)\n fileSize += data.length\n debugLog(options, `Uploading ${fieldname}->${filename}, bytes:${fileSize}...`)\n },\n getFilePath: () => tempFilePath,\n getFileSize: () => fileSize,\n getHash: () => hash.digest('hex'),\n getWritePromise: () => writePromise,\n }\n}\n\nexport const memHandler: Handler = (options, fieldname, filename) => {\n const buffers = []\n const hash = crypto.createHash('md5')\n let fileSize = 0\n let completed = false\n\n const getBuffer = () => Buffer.concat(buffers, fileSize)\n\n return {\n cleanup: () => {\n completed = true\n },\n complete: () => {\n debugLog(options, `Upload ${fieldname}->${filename} completed, bytes:${fileSize}.`)\n completed = true\n return getBuffer()\n },\n dataHandler: (data) => {\n if (completed === true) {\n debugLog(options, `Error: got ${fieldname}->${filename} data chunk for completed upload!`)\n return\n }\n buffers.push(data)\n hash.update(data)\n fileSize += data.length\n debugLog(options, `Uploading ${fieldname}->${filename}, bytes:${fileSize}...`)\n },\n getFilePath: () => '',\n getFileSize: () => fileSize,\n getHash: () => hash.digest('hex'),\n getWritePromise: () => Promise.resolve(true),\n }\n}\n"],"names":["crypto","fs","WriteStream","path","checkAndMakeDir","debugLog","deleteFile","getTempFilename","tempFileHandler","options","fieldname","filename","dir","normalize","tempFileDir","tempFilePath","join","process","cwd","createParentPath","hash","createHash","fileSize","completed","writeStream","createWriteStream","writePromise","Promise","resolve","reject","on","err","cleanup","end","complete","Buffer","concat","dataHandler","data","write","update","length","getFilePath","getFileSize","getHash","digest","getWritePromise","memHandler","buffers","getBuffer","push"],"mappings":"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"}
|
|
@@ -40,4 +40,4 @@ export const nextFileUpload = async ({ options, request })=>{
|
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
//# sourceMappingURL=
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next-fileupload/index.ts"],"sourcesContent":["import type { BusboyConfig } from 'busboy'\n\nimport path from 'path'\n\nimport { isEligibleRequest } from './isEligibleRequest.js'\nimport { processMultipart } from './processMultipart.js'\nimport { debugLog } from './utilities.js'\n\nconst DEFAULT_OPTIONS = {\n abortOnLimit: false,\n createParentPath: false,\n debug: false,\n fileHandler: false,\n limitHandler: false,\n parseNested: false,\n preserveExtension: false,\n responseOnLimit: 'File size limit has been reached',\n safeFileNames: false,\n tempFileDir: path.join(process.cwd(), 'tmp'),\n uploadTimeout: 60000,\n uriDecodeFileNames: false,\n useTempFiles: false,\n}\n\nexport type FileShape = {\n data: Buffer\n encoding: string\n md5: Buffer | string\n mimetype: string\n mv: (filePath: string, callback: () => void) => Promise<void> | void\n name: string\n size: number\n tempFilePath: string\n truncated: boolean\n}\n\nexport type NextFileUploadOptions = {\n /**\n * Returns a HTTP 413 when the file is bigger than the size limit if `true`.\n * Otherwise, it will add a `truncated = true` to the resulting file structure.\n * @default false\n */\n abortOnLimit?: boolean | undefined\n /**\n * Automatically creates the directory path specified in `.mv(filePathName)`\n * @default false\n */\n createParentPath?: boolean | undefined\n /**\n * Turn on/off upload process logging. Can be useful for troubleshooting.\n * @default false\n */\n debug?: boolean | undefined\n /**\n * User defined limit handler which will be invoked if the file is bigger than configured limits.\n * @default false\n */\n limitHandler?: ((args: { request: Request; size: number }) => void) | boolean | undefined\n /**\n * By default, `req.body` and `req.files` are flattened like this:\n * `{'name': 'John', 'hobbies[0]': 'Cinema', 'hobbies[1]': 'Bike'}\n *\n * When this option is enabled they are parsed in order to be nested like this:\n * `{'name': 'John', 'hobbies': ['Cinema', 'Bike']}`\n * @default false\n */\n parseNested?: boolean | undefined\n /**\n * Preserves filename extension when using `safeFileNames` option.\n * If set to `true`, will default to an extension length of `3`.\n * If set to `number`, this will be the max allowable extension length.\n * If an extension is smaller than the extension length, it remains untouched. If the extension is longer,\n * it is shifted.\n * @default false\n *\n * @example\n * // true\n * app.use(fileUpload({ safeFileNames: true, preserveExtension: true }));\n * // myFileName.ext --> myFileName.ext\n *\n * @example\n * // max extension length 2, extension shifted\n * app.use(fileUpload({ safeFileNames: true, preserveExtension: 2 }));\n * // myFileName.ext --> myFileNamee.xt\n */\n preserveExtension?: boolean | number | undefined\n /**\n * Response which will be send to client if file size limit exceeded when `abortOnLimit` set to `true`.\n * @default 'File size limit has been reached'\n */\n responseOnLimit?: string | undefined\n /**\n * Strips characters from the upload's filename.\n * You can use custom regex to determine what to strip.\n * If set to `true`, non-alphanumeric characters _except_ dashes and underscores will be stripped.\n * This option is off by default.\n * @default false\n *\n * @example\n * // strip slashes from file names\n * app.use(fileUpload({ safeFileNames: /\\\\/g }))\n *\n * @example\n * app.use(fileUpload({ safeFileNames: true }))\n */\n safeFileNames?: RegExp | boolean | undefined\n /**\n * Path to store temporary files.\n * Used along with the `useTempFiles` option. By default this module uses `'tmp'` folder\n * in the current working directory.\n * You can use trailing slash, but it is not necessary.\n * @default './tmp'\n */\n tempFileDir?: string | undefined\n /**\n * This defines how long to wait for data before aborting. Set to `0` if you want to turn off timeout checks.\n * @default 60_000\n */\n uploadTimeout?: number | undefined\n /**\n * Applies uri decoding to file names if set `true`.\n * @default false\n */\n uriDecodeFileNames?: boolean | undefined\n /**\n * By default this module uploads files into RAM.\n * Setting this option to `true` turns on using temporary files instead of utilising RAM.\n * This avoids memory overflow issues when uploading large files or in case of uploading\n * lots of files at same time.\n * @default false\n */\n useTempFiles?: boolean | undefined\n} & Partial<BusboyConfig>\n\ntype NextFileUploadResponseFile = {\n data: Buffer\n mimetype: string\n name: string\n size: number\n tempFilePath?: string\n}\n\nexport type NextFileUploadResponse = {\n error?: {\n code: number\n message: string\n }\n fields: Record<string, string>\n files: Record<string, NextFileUploadResponseFile>\n}\n\ntype NextFileUpload = (args: {\n options?: NextFileUploadOptions\n request: Request\n}) => Promise<NextFileUploadResponse>\nexport const nextFileUpload: NextFileUpload = async ({ options, request }) => {\n const uploadOptions = { ...DEFAULT_OPTIONS, ...options }\n if (!isEligibleRequest(request)) {\n debugLog(uploadOptions, 'Request is not eligible for file upload!')\n return {\n error: {\n code: 500,\n message: 'Request is not eligible for file upload',\n },\n fields: undefined,\n files: undefined,\n }\n } else {\n return processMultipart({ options: uploadOptions, request })\n }\n}\n"],"names":["path","isEligibleRequest","processMultipart","debugLog","DEFAULT_OPTIONS","abortOnLimit","createParentPath","debug","fileHandler","limitHandler","parseNested","preserveExtension","responseOnLimit","safeFileNames","tempFileDir","join","process","cwd","uploadTimeout","uriDecodeFileNames","useTempFiles","nextFileUpload","options","request","uploadOptions","error","code","message","fields","undefined","files"],"mappings":"AAEA,OAAOA,UAAU,OAAM;AAEvB,SAASC,iBAAiB,QAAQ,yBAAwB;AAC1D,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,QAAQ,QAAQ,iBAAgB;AAEzC,MAAMC,kBAAkB;IACtBC,cAAc;IACdC,kBAAkB;IAClBC,OAAO;IACPC,aAAa;IACbC,cAAc;IACdC,aAAa;IACbC,mBAAmB;IACnBC,iBAAiB;IACjBC,eAAe;IACfC,aAAad,KAAKe,IAAI,CAACC,QAAQC,GAAG,IAAI;IACtCC,eAAe;IACfC,oBAAoB;IACpBC,cAAc;AAChB;AAqIA,OAAO,MAAMC,iBAAiC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAE;IACvE,MAAMC,gBAAgB;QAAE,GAAGpB,eAAe;QAAE,GAAGkB,OAAO;IAAC;IACvD,IAAI,CAACrB,kBAAkBsB,UAAU;QAC/BpB,SAASqB,eAAe;QACxB,OAAO;YACLC,OAAO;gBACLC,MAAM;gBACNC,SAAS;YACX;YACAC,QAAQC;YACRC,OAAOD;QACT;IACF,OAAO;QACL,OAAO3B,iBAAiB;YAAEoB,SAASE;YAAeD;QAAQ;IAC5D;AACF,EAAC"}
|
|
@@ -23,4 +23,4 @@ export const isEligibleRequest = (req)=>{
|
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
//# sourceMappingURL=
|
|
26
|
+
//# sourceMappingURL=isEligibleRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next-fileupload/isEligibleRequest.ts"],"sourcesContent":["const ACCEPTABLE_CONTENT_TYPE = /^multipart\\/['\"()+-_]+(?:; ?['\"()+-_]*)+$/i\nconst UNACCEPTABLE_METHODS = new Set(['GET', 'HEAD', 'DELETE', 'OPTIONS', 'CONNECT', 'TRACE'])\n\nconst hasBody = (req: Request): boolean => {\n return Boolean(\n req.headers.get('transfer-encoding') ||\n (req.headers.get('content-length') && req.headers.get('content-length') !== '0'),\n )\n}\n\nconst hasAcceptableMethod = (req: Request): boolean => !UNACCEPTABLE_METHODS.has(req.method)\n\nconst hasAcceptableContentType = (req: Request): boolean => {\n const contType = req.headers.get('content-type')\n return contType.includes('boundary=') && ACCEPTABLE_CONTENT_TYPE.test(contType)\n}\n\nexport const isEligibleRequest = (req: Request): boolean => {\n try {\n return hasBody(req) && hasAcceptableMethod(req) && hasAcceptableContentType(req)\n } catch (e) {\n return false\n }\n}\n"],"names":["ACCEPTABLE_CONTENT_TYPE","UNACCEPTABLE_METHODS","Set","hasBody","req","Boolean","headers","get","hasAcceptableMethod","has","method","hasAcceptableContentType","contType","includes","test","isEligibleRequest","e"],"mappings":"AAAA,MAAMA,0BAA0B;AAChC,MAAMC,uBAAuB,IAAIC,IAAI;IAAC;IAAO;IAAQ;IAAU;IAAW;IAAW;CAAQ;AAE7F,MAAMC,UAAU,CAACC;IACf,OAAOC,QACLD,IAAIE,OAAO,CAACC,GAAG,CAAC,wBACbH,IAAIE,OAAO,CAACC,GAAG,CAAC,qBAAqBH,IAAIE,OAAO,CAACC,GAAG,CAAC,sBAAsB;AAElF;AAEA,MAAMC,sBAAsB,CAACJ,MAA0B,CAACH,qBAAqBQ,GAAG,CAACL,IAAIM,MAAM;AAE3F,MAAMC,2BAA2B,CAACP;IAChC,MAAMQ,WAAWR,IAAIE,OAAO,CAACC,GAAG,CAAC;IACjC,OAAOK,SAASC,QAAQ,CAAC,gBAAgBb,wBAAwBc,IAAI,CAACF;AACxE;AAEA,OAAO,MAAMG,oBAAoB,CAACX;IAChC,IAAI;QACF,OAAOD,QAAQC,QAAQI,oBAAoBJ,QAAQO,yBAAyBP;IAC9E,EAAE,OAAOY,GAAG;QACV,OAAO;IACT;AACF,EAAC"}
|
|
@@ -130,4 +130,4 @@ export const processMultipart = async ({ options, request })=>{
|
|
|
130
130
|
return result;
|
|
131
131
|
};
|
|
132
132
|
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uZXh0LWZpbGV1cGxvYWQvcHJvY2Vzc011bHRpcGFydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVzYm95IGZyb20gJ2J1c2JveSdcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5cbmltcG9ydCB0eXBlIHsgTmV4dEZpbGVVcGxvYWRPcHRpb25zLCBOZXh0RmlsZVVwbG9hZFJlc3BvbnNlIH0gZnJvbSAnLi9pbmRleC5qcydcblxuaW1wb3J0IHsgZmlsZUZhY3RvcnkgfSBmcm9tICcuL2ZpbGVGYWN0b3J5LmpzJ1xuaW1wb3J0IHsgbWVtSGFuZGxlciwgdGVtcEZpbGVIYW5kbGVyIH0gZnJvbSAnLi9oYW5kbGVycy5qcydcbmltcG9ydCB7IHByb2Nlc3NOZXN0ZWQgfSBmcm9tICcuL3Byb2Nlc3NOZXN0ZWQuanMnXG5pbXBvcnQgeyBjcmVhdGVVcGxvYWRUaW1lciB9IGZyb20gJy4vdXBsb2FkVGltZXIuanMnXG5pbXBvcnQgeyBidWlsZEZpZWxkcywgZGVidWdMb2csIGlzRnVuYywgcGFyc2VGaWxlTmFtZSB9IGZyb20gJy4vdXRpbGl0aWVzLmpzJ1xuXG5jb25zdCB3YWl0Rmx1c2hQcm9wZXJ0eSA9IFN5bWJvbCgnd2FpdCBmbHVzaCBwcm9wZXJ0eSBzeW1ib2wnKVxuXG50eXBlIFByb2Nlc3NNdWx0aXBhcnQgPSAoYXJnczoge1xuICBvcHRpb25zOiBOZXh0RmlsZVVwbG9hZE9wdGlvbnNcbiAgcmVxdWVzdDogUmVxdWVzdFxufSkgPT4gUHJvbWlzZTxOZXh0RmlsZVVwbG9hZFJlc3BvbnNlPlxuZXhwb3J0IGNvbnN0IHByb2Nlc3NNdWx0aXBhcnQ6IFByb2Nlc3NNdWx0aXBhcnQgPSBhc3luYyAoeyBvcHRpb25zLCByZXF1ZXN0IH0pID0+IHtcbiAgbGV0IHBhcnNpbmdSZXF1ZXN0ID0gdHJ1ZVxuICBjb25zdCByZXN1bHQ6IE5leHRGaWxlVXBsb2FkUmVzcG9uc2UgPSB7XG4gICAgZmllbGRzOiB1bmRlZmluZWQsXG4gICAgZmlsZXM6IHVuZGVmaW5lZCxcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnNPYmplY3QgPSB7fVxuICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIG5hbWUpID0+IHtcbiAgICBoZWFkZXJzT2JqZWN0W25hbWVdID0gdmFsdWVcbiAgfSlcblxuICBjb25zdCBidXNib3kgPSBCdXNib3koeyAuLi5vcHRpb25zLCBoZWFkZXJzOiBoZWFkZXJzT2JqZWN0IH0pXG5cbiAgLy8gQnVpbGQgbXVsdGlwYXJ0IHJlcS5ib2R5IGZpZWxkc1xuICBidXNib3kub24oJ2ZpZWxkJywgKGZpZWxkLCB2YWwpID0+IHtcbiAgICByZXN1bHQuZmllbGRzID0gYnVpbGRGaWVsZHMocmVzdWx0LmZpZWxkcywgZmllbGQsIHZhbClcbiAgfSlcblxuICAvLyBCdWlsZCByZXEuZmlsZXMgZmllbGRzXG4gIGJ1c2JveS5vbignZmlsZScsIChmaWVsZCwgZmlsZSwgaW5mbykgPT4ge1xuICAgIC8vIFBhcnNlIGZpbGUgbmFtZShjdXR0aW5nIGh1Z2UgbmFtZXMsIGRlY29kaW5nLCBldGMuLikuXG4gICAgY29uc3QgeyBlbmNvZGluZywgZmlsZW5hbWU6IG5hbWUsIG1pbWVUeXBlOiBtaW1lIH0gPSBpbmZvXG4gICAgY29uc3QgZmlsZW5hbWUgPSBwYXJzZUZpbGVOYW1lKG9wdGlvbnMsIG5hbWUpXG5cbiAgICAvLyBEZWZpbmUgbWV0aG9kcyBhbmQgaGFuZGxlcnMgZm9yIHVwbG9hZCBwcm9jZXNzLlxuICAgIGNvbnN0IHsgY2xlYW51cCwgY29tcGxldGUsIGRhdGFIYW5kbGVyLCBnZXRGaWxlUGF0aCwgZ2V0RmlsZVNpemUsIGdldEhhc2gsIGdldFdyaXRlUHJvbWlzZSB9ID1cbiAgICAgIG9wdGlvbnMudXNlVGVtcEZpbGVzXG4gICAgICAgID8gdGVtcEZpbGVIYW5kbGVyKG9wdGlvbnMsIGZpZWxkLCBmaWxlbmFtZSkgLy8gVXBsb2FkIGludG8gdGVtcG9yYXJ5IGZpbGUuXG4gICAgICAgIDogbWVtSGFuZGxlcihvcHRpb25zLCBmaWVsZCwgZmlsZW5hbWUpIC8vIFVwbG9hZCBpbnRvIFJBTS5cblxuICAgIGNvbnN0IHdyaXRlUHJvbWlzZSA9IG9wdGlvbnMudXNlVGVtcEZpbGVzXG4gICAgICA/IGdldFdyaXRlUHJvbWlzZSgpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgICBjbGVhbnVwKClcbiAgICAgICAgfSlcbiAgICAgIDogZ2V0V3JpdGVQcm9taXNlKClcblxuICAgIGNvbnN0IHVwbG9hZFRpbWVyID0gY3JlYXRlVXBsb2FkVGltZXIob3B0aW9ucy51cGxvYWRUaW1lb3V0LCAoKSA9PiB7XG4gICAgICBmaWxlLnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpXG4gICAgICBmaWxlLnJlc3VtZSgpXG4gICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVwbG9hZCB0aW1lb3V0IGZvciAke2ZpZWxkfS0+JHtmaWxlbmFtZX0sIGJ5dGVzOiR7Z2V0RmlsZVNpemUoKX1gKVxuICAgICAgcmV0dXJuIGZpbGUuZGVzdHJveShlcnIpXG4gICAgfSlcblxuICAgIGZpbGUub24oJ2xpbWl0JywgKCkgPT4ge1xuICAgICAgZGVidWdMb2cob3B0aW9ucywgYFNpemUgbGltaXQgcmVhY2hlZCBmb3IgJHtmaWVsZH0tPiR7ZmlsZW5hbWV9LCBieXRlczoke2dldEZpbGVTaXplKCl9YClcbiAgICAgIHVwbG9hZFRpbWVyLmNsZWFyKClcblxuICAgICAgaWYgKGlzRnVuYyhvcHRpb25zLmxpbWl0SGFuZGxlcikpIHtcbiAgICAgICAgb3B0aW9ucy5saW1pdEhhbmRsZXIoeyByZXF1ZXN0LCBzaXplOiBnZXRGaWxlU2l6ZSgpIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIFJldHVybiBlcnJvciBhbmQgY2xlYW51cCBmaWxlcyBpZiBhYm9ydE9uTGltaXQgc2V0LlxuICAgICAgaWYgKG9wdGlvbnMuYWJvcnRPbkxpbWl0KSB7XG4gICAgICAgIGRlYnVnTG9nKG9wdGlvbnMsIGBBYm9ydGluZyB1cGxvYWQgYmVjYXVzZSBvZiBzaXplIGxpbWl0ICR7ZmllbGR9LT4ke2ZpbGVuYW1lfS5gKVxuICAgICAgICBjbGVhbnVwKClcbiAgICAgICAgcGFyc2luZ1JlcXVlc3QgPSBmYWxzZVxuICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3Iob3B0aW9ucy5yZXNwb25zZU9uTGltaXQsIDQxMywgeyBzaXplOiBnZXRGaWxlU2l6ZSgpIH0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIGZpbGUub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgdXBsb2FkVGltZXIuc2V0KClcbiAgICAgIGRhdGFIYW5kbGVyKGRhdGEpXG4gICAgfSlcblxuICAgIGZpbGUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNpemUgPSBnZXRGaWxlU2l6ZSgpXG4gICAgICBkZWJ1Z0xvZyhvcHRpb25zLCBgVXBsb2FkIGZpbmlzaGVkICR7ZmllbGR9LT4ke2ZpbGVuYW1lfSwgYnl0ZXM6JHtzaXplfWApXG4gICAgICB1cGxvYWRUaW1lci5jbGVhcigpXG5cbiAgICAgIGlmICghbmFtZSAmJiBzaXplID09PSAwKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZVRlbXBGaWxlcykge1xuICAgICAgICAgIGNsZWFudXAoKVxuICAgICAgICAgIGRlYnVnTG9nKG9wdGlvbnMsIGBSZW1vdmluZyB0aGUgZW1wdHkgZmlsZSAke2ZpZWxkfS0+JHtmaWxlbmFtZX1gKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWJ1Z0xvZyhvcHRpb25zLCBgRG9uJ3QgYWRkIGZpbGUgaW5zdGFuY2UgaWYgb3JpZ2luYWwgbmFtZSBhbmQgc2l6ZSBhcmUgZW1wdHlgKVxuICAgICAgfVxuXG4gICAgICByZXN1bHQuZmlsZXMgPSBidWlsZEZpZWxkcyhcbiAgICAgICAgcmVzdWx0LmZpbGVzLFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgZmlsZUZhY3RvcnkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogZmlsZW5hbWUsXG4gICAgICAgICAgICBidWZmZXI6IGNvbXBsZXRlKCksXG4gICAgICAgICAgICBlbmNvZGluZyxcbiAgICAgICAgICAgIGhhc2g6IGdldEhhc2goKSxcbiAgICAgICAgICAgIG1pbWV0eXBlOiBtaW1lLFxuICAgICAgICAgICAgc2l6ZSxcbiAgICAgICAgICAgIHRlbXBGaWxlUGF0aDogZ2V0RmlsZVBhdGgoKSxcbiAgICAgICAgICAgIHRydW5jYXRlZDogQm9vbGVhbigndHJ1bmNhdGVkJyBpbiBmaWxlICYmIGZpbGUudHJ1bmNhdGVkKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICApXG5cbiAgICAgIGlmICghcmVxdWVzdFt3YWl0Rmx1c2hQcm9wZXJ0eV0pIHtcbiAgICAgICAgcmVxdWVzdFt3YWl0Rmx1c2hQcm9wZXJ0eV0gPSBbXVxuICAgICAgfVxuICAgICAgcmVxdWVzdFt3YWl0Rmx1c2hQcm9wZXJ0eV0ucHVzaCh3cml0ZVByb21pc2UpXG4gICAgfSlcblxuICAgIGZpbGUub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgdXBsb2FkVGltZXIuY2xlYXIoKVxuICAgICAgZGVidWdMb2cob3B0aW9ucywgYEZpbGUgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgIGNsZWFudXAoKVxuICAgIH0pXG5cbiAgICBkZWJ1Z0xvZyhvcHRpb25zLCBgTmV3IHVwbG9hZCBzdGFydGVkICR7ZmllbGR9LT4ke2ZpbGVuYW1lfSwgYnl0ZXM6JHtnZXRGaWxlU2l6ZSgpfWApXG4gICAgdXBsb2FkVGltZXIuc2V0KClcbiAgfSlcblxuICBidXNib3kub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICBkZWJ1Z0xvZyhvcHRpb25zLCBgQnVzYm95IGZpbmlzaGVkIHBhcnNpbmcgcmVxdWVzdC5gKVxuICAgIGlmIChvcHRpb25zLnBhcnNlTmVzdGVkKSB7XG4gICAgICByZXN1bHQuZmllbGRzID0gcHJvY2Vzc05lc3RlZChyZXN1bHQuZmllbGRzKVxuICAgICAgcmVzdWx0LmZpbGVzID0gcHJvY2Vzc05lc3RlZChyZXN1bHQuZmlsZXMpXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Rbd2FpdEZsdXNoUHJvcGVydHldKSB7XG4gICAgICBQcm9taXNlLmFsbChyZXF1ZXN0W3dhaXRGbHVzaFByb3BlcnR5XSkudGhlbigoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSByZXF1ZXN0W3dhaXRGbHVzaFByb3BlcnR5XVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgYnVzYm95Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICBkZWJ1Z0xvZyhvcHRpb25zLCBgQnVzYm95IGVycm9yYClcbiAgICBwYXJzaW5nUmVxdWVzdCA9IGZhbHNlXG4gICAgdGhyb3cgbmV3IEFQSUVycm9yKCdCdXNib3kgZXJyb3IgcGFyc2luZyBtdWx0aXBhcnQgcmVxdWVzdCcsIDUwMClcbiAgfSlcblxuICBjb25zdCByZWFkZXIgPSByZXF1ZXN0LmJvZHkuZ2V0UmVhZGVyKClcblxuICB3aGlsZSAocGFyc2luZ1JlcXVlc3QpIHtcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgcGFyc2luZ1JlcXVlc3QgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgYnVzYm95LndyaXRlKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiJdLCJuYW1lcyI6WyJCdXNib3kiLCJBUElFcnJvciIsImZpbGVGYWN0b3J5IiwibWVtSGFuZGxlciIsInRlbXBGaWxlSGFuZGxlciIsInByb2Nlc3NOZXN0ZWQiLCJjcmVhdGVVcGxvYWRUaW1lciIsImJ1aWxkRmllbGRzIiwiZGVidWdMb2ciLCJpc0Z1bmMiLCJwYXJzZUZpbGVOYW1lIiwid2FpdEZsdXNoUHJvcGVydHkiLCJTeW1ib2wiLCJwcm9jZXNzTXVsdGlwYXJ0Iiwib3B0aW9ucyIsInJlcXVlc3QiLCJwYXJzaW5nUmVxdWVzdCIsInJlc3VsdCIsImZpZWxkcyIsInVuZGVmaW5lZCIsImZpbGVzIiwiaGVhZGVyc09iamVjdCIsImhlYWRlcnMiLCJmb3JFYWNoIiwidmFsdWUiLCJuYW1lIiwiYnVzYm95Iiwib24iLCJmaWVsZCIsInZhbCIsImZpbGUiLCJpbmZvIiwiZW5jb2RpbmciLCJmaWxlbmFtZSIsIm1pbWVUeXBlIiwibWltZSIsImNsZWFudXAiLCJjb21wbGV0ZSIsImRhdGFIYW5kbGVyIiwiZ2V0RmlsZVBhdGgiLCJnZXRGaWxlU2l6ZSIsImdldEhhc2giLCJnZXRXcml0ZVByb21pc2UiLCJ1c2VUZW1wRmlsZXMiLCJ3cml0ZVByb21pc2UiLCJjYXRjaCIsImVyciIsImVuZCIsInVwbG9hZFRpbWVyIiwidXBsb2FkVGltZW91dCIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlc3VtZSIsIkVycm9yIiwiZGVzdHJveSIsImNsZWFyIiwibGltaXRIYW5kbGVyIiwic2l6ZSIsImFib3J0T25MaW1pdCIsInJlc3BvbnNlT25MaW1pdCIsImRhdGEiLCJzZXQiLCJidWZmZXIiLCJoYXNoIiwibWltZXR5cGUiLCJ0ZW1wRmlsZVBhdGgiLCJ0cnVuY2F0ZWQiLCJCb29sZWFuIiwicHVzaCIsIm1lc3NhZ2UiLCJwYXJzZU5lc3RlZCIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwicmVhZGVyIiwiYm9keSIsImdldFJlYWRlciIsImRvbmUiLCJyZWFkIiwid3JpdGUiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUTtBQUMzQixTQUFTQyxRQUFRLFFBQVEsaUJBQWdCO0FBSXpDLFNBQVNDLFdBQVcsUUFBUSxtQkFBa0I7QUFDOUMsU0FBU0MsVUFBVSxFQUFFQyxlQUFlLFFBQVEsZ0JBQWU7QUFDM0QsU0FBU0MsYUFBYSxRQUFRLHFCQUFvQjtBQUNsRCxTQUFTQyxpQkFBaUIsUUFBUSxtQkFBa0I7QUFDcEQsU0FBU0MsV0FBVyxFQUFFQyxRQUFRLEVBQUVDLE1BQU0s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
|
|
133
|
+
//# sourceMappingURL=processMultipart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next-fileupload/processMultipart.ts"],"sourcesContent":["import Busboy from 'busboy'\nimport { APIError } from 'payload/errors'\n\nimport type { NextFileUploadOptions, NextFileUploadResponse } 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: NextFileUploadOptions\n request: Request\n}) => Promise<NextFileUploadResponse>\nexport const processMultipart: ProcessMultipart = async ({ options, request }) => {\n let parsingRequest = true\n const result: NextFileUploadResponse = {\n fields: undefined,\n files: undefined,\n }\n\n const headersObject = {}\n request.headers.forEach((value, name) => {\n headersObject[name] = value\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 // 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 file.removeAllListeners('data')\n file.resume()\n const err = new Error(`Upload timeout for ${field}->${filename}, bytes:${getFileSize()}`)\n return file.destroy(err)\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, `Aborting upload because of size limit ${field}->${filename}.`)\n cleanup()\n parsingRequest = false\n throw new APIError(options.responseOnLimit, 413, { size: getFileSize() })\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 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 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\n file.on('error', (err) => {\n uploadTimer.clear()\n debugLog(options, `File Error: ${err.message}`)\n cleanup()\n })\n\n debugLog(options, `New upload started ${field}->${filename}, bytes:${getFileSize()}`)\n uploadTimer.set()\n })\n\n busboy.on('finish', () => {\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 Promise.all(request[waitFlushProperty]).then(() => {\n delete request[waitFlushProperty]\n })\n }\n })\n\n busboy.on('error', (err) => {\n debugLog(options, `Busboy error`)\n parsingRequest = false\n throw new APIError('Busboy error parsing multipart request', 500)\n })\n\n const reader = request.body.getReader()\n\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 return result\n}\n"],"names":["Busboy","APIError","fileFactory","memHandler","tempFileHandler","processNested","createUploadTimer","buildFields","debugLog","isFunc","parseFileName","waitFlushProperty","Symbol","processMultipart","options","request","parsingRequest","result","fields","undefined","files","headersObject","headers","forEach","value","name","busboy","on","field","val","file","info","encoding","filename","mimeType","mime","cleanup","complete","dataHandler","getFilePath","getFileSize","getHash","getWritePromise","useTempFiles","writePromise","catch","err","end","uploadTimer","uploadTimeout","removeAllListeners","resume","Error","destroy","clear","limitHandler","size","abortOnLimit","responseOnLimit","data","set","buffer","hash","mimetype","tempFilePath","truncated","Boolean","push","message","parseNested","Promise","all","then","reader","body","getReader","done","read","write"],"mappings":"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"}
|
|
@@ -21,4 +21,4 @@ export const processNested = function(data) {
|
|
|
21
21
|
return d;
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
//# sourceMappingURL=
|
|
24
|
+
//# sourceMappingURL=processNested.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next-fileupload/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 let key = keys[i],\n value = data[key],\n current = d,\n keyParts = key.replace(new RegExp(/\\[/g), '.').replace(new RegExp(/\\]/g), '').split('.')\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"],"names":["isSafeFromPollution","processNested","data","length","Object","create","d","keys","i","key","value","current","keyParts","replace","RegExp","split","index","k"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,iBAAgB;AAEpD,OAAO,MAAMC,gBAAgB,SAAUC,IAAI;IACzC,IAAI,CAACA,QAAQA,KAAKC,MAAM,GAAG,GAAG,OAAOC,OAAOC,MAAM,CAAC;IAEnD,MAAMC,IAAIF,OAAOC,MAAM,CAAC,OACtBE,OAAOH,OAAOG,IAAI,CAACL;IAErB,IAAK,IAAIM,IAAI,GAAGA,IAAID,KAAKJ,MAAM,EAAEK,IAAK;QACpC,IAAIC,MAAMF,IAAI,CAACC,EAAE,EACfE,QAAQR,IAAI,CAACO,IAAI,EACjBE,UAAUL,GACVM,WAAWH,IAAII,OAAO,CAAC,IAAIC,OAAO,QAAQ,KAAKD,OAAO,CAAC,IAAIC,OAAO,QAAQ,IAAIC,KAAK,CAAC;QAEtF,IAAK,IAAIC,QAAQ,GAAGA,QAAQJ,SAAST,MAAM,EAAEa,QAAS;YACpD,MAAMC,IAAIL,QAAQ,CAACI,MAAM;YAEzB,4CAA4C;YAC5C,IAAI,CAAChB,oBAAoBW,SAASM,IAAI;gBACpC;YACF;YAEA,IAAID,SAASJ,SAAST,MAAM,GAAG,GAAG;gBAChCQ,OAAO,CAACM,EAAE,GAAGP;YACf,OAAO;gBACL,IAAI,CAACC,OAAO,CAACM,EAAE,EAAEN,OAAO,CAACM,EAAE,GAAG,CAACL,QAAQ,CAACI,QAAQ,EAAE,GAAG,EAAE,GAAGZ,OAAOC,MAAM,CAAC;gBACxEM,UAAUA,OAAO,CAACM,EAAE;YACtB;QACF;IACF;IACA,OAAOX;AACT,EAAC"}
|
|
@@ -16,4 +16,4 @@ export const createUploadTimer = (timeout = 0, callback = ()=>{})=>{
|
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
//# sourceMappingURL=
|
|
19
|
+
//# sourceMappingURL=uploadTimer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next-fileupload/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"],"names":["createUploadTimer","timeout","callback","timer","clear","clearTimeout","set","setTimeout"],"mappings":"AAQA,OAAO,MAAMA,oBAAuC,CAACC,UAAU,CAAC,EAAEC,WAAW,KAAO,CAAC;IACnF,IAAIC,QAAQ;IAEZ,MAAMC,QAAQ;QACZC,aAAaF;IACf;IAEA,MAAMG,MAAM;QACV,8DAA8D;QAC9D,IAAI,CAACL,SAAS,OAAO;QACrBG;QACAD,QAAQI,WAAWL,UAAUD;QAC7B,OAAO;IACT;IAEA,OAAO;QAAEG;QAAOE;IAAI;AACtB,EAAC"}
|