create-nextjs-cms 0.8.7 → 0.8.9
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/LICENSE +21 -21
- package/README.md +71 -71
- package/dist/helpers/utils.js +16 -16
- package/dist/lib/section-creators.js +166 -166
- package/package.json +3 -3
- package/templates/default/.eslintrc.json +5 -5
- package/templates/default/.prettierignore +7 -7
- package/templates/default/.prettierrc.json +27 -27
- package/templates/default/CHANGELOG.md +140 -140
- package/templates/default/_gitignore +57 -57
- package/templates/default/app/(auth)/auth/login/LoginPage.tsx +192 -192
- package/templates/default/app/(auth)/auth/login/page.tsx +11 -11
- package/templates/default/app/(auth)/auth-locale-provider.tsx +34 -34
- package/templates/default/app/(auth)/layout.tsx +81 -81
- package/templates/default/app/(rootLayout)/(plugins)/[...slug]/page.tsx +40 -40
- package/templates/default/app/(rootLayout)/(plugins)/[...slug]/plugin-server-registry.ts +16 -16
- package/templates/default/app/(rootLayout)/admins/page.tsx +10 -10
- package/templates/default/app/(rootLayout)/browse/[section]/[page]/page.tsx +22 -22
- package/templates/default/app/(rootLayout)/categorized/[section]/page.tsx +15 -15
- package/templates/default/app/(rootLayout)/dashboard/page.tsx +63 -63
- package/templates/default/app/(rootLayout)/dashboard-new/page.tsx +7 -7
- package/templates/default/app/(rootLayout)/edit/[section]/[itemId]/page.tsx +17 -17
- package/templates/default/app/(rootLayout)/layout.tsx +81 -81
- package/templates/default/app/(rootLayout)/loading.tsx +10 -10
- package/templates/default/app/(rootLayout)/log/page.tsx +7 -7
- package/templates/default/app/(rootLayout)/new/[section]/page.tsx +15 -15
- package/templates/default/app/(rootLayout)/section/[section]/page.tsx +16 -16
- package/templates/default/app/(rootLayout)/settings/page.tsx +13 -13
- package/templates/default/app/_trpc/client.ts +3 -3
- package/templates/default/app/api/auth/csrf/route.ts +25 -25
- package/templates/default/app/api/auth/refresh/route.ts +10 -10
- package/templates/default/app/api/auth/route.ts +49 -49
- package/templates/default/app/api/auth/session/route.ts +20 -20
- package/templates/default/app/api/document/route.ts +165 -165
- package/templates/default/app/api/editor/photo/route.ts +49 -49
- package/templates/default/app/api/photo/route.ts +27 -27
- package/templates/default/app/api/submit/section/item/[slug]/route.ts +66 -66
- package/templates/default/app/api/submit/section/item/route.ts +56 -56
- package/templates/default/app/api/submit/section/simple/route.ts +57 -57
- package/templates/default/app/api/trpc/[trpc]/route.ts +33 -33
- package/templates/default/app/api/video/route.ts +174 -174
- package/templates/default/app/globals.css +219 -219
- package/templates/default/app/providers.tsx +152 -152
- package/templates/default/cms.config.ts +57 -60
- package/templates/default/components/AdminCard.tsx +166 -166
- package/templates/default/components/AdminEditPage.tsx +124 -124
- package/templates/default/components/AdminPrivilegeCard.tsx +185 -185
- package/templates/default/components/AdminsPage.tsx +43 -43
- package/templates/default/components/AnalyticsPage.tsx +128 -128
- package/templates/default/components/BarChartBox.tsx +42 -42
- package/templates/default/components/BrowsePage.tsx +106 -106
- package/templates/default/components/CategorizedSectionPage.tsx +31 -31
- package/templates/default/components/CategoryDeleteConfirmPage.tsx +130 -130
- package/templates/default/components/CategorySectionSelectInput.tsx +140 -140
- package/templates/default/components/ConditionalFields.tsx +49 -49
- package/templates/default/components/ContainerBox.tsx +24 -24
- package/templates/default/components/DashboardNewPage.tsx +253 -253
- package/templates/default/components/DashboardPage.tsx +188 -188
- package/templates/default/components/DashboardPageAlt.tsx +45 -45
- package/templates/default/components/DefaultNavItems.tsx +3 -3
- package/templates/default/components/Dropzone.tsx +154 -154
- package/templates/default/components/EmailCard.tsx +138 -138
- package/templates/default/components/EmailPasswordForm.tsx +85 -85
- package/templates/default/components/EmailQuotaForm.tsx +73 -73
- package/templates/default/components/EmailsPage.tsx +49 -49
- package/templates/default/components/ErrorComponent.tsx +16 -16
- package/templates/default/components/GalleryPhoto.tsx +93 -93
- package/templates/default/components/InfoCard.tsx +93 -93
- package/templates/default/components/ItemEditPage.tsx +214 -214
- package/templates/default/components/Layout.tsx +84 -84
- package/templates/default/components/LoadingSpinners.tsx +67 -67
- package/templates/default/components/LogPage.tsx +107 -107
- package/templates/default/components/Modal.tsx +166 -166
- package/templates/default/components/Navbar.tsx +258 -258
- package/templates/default/components/NewAdminForm.tsx +173 -173
- package/templates/default/components/NewEmailForm.tsx +132 -132
- package/templates/default/components/NewPage.tsx +205 -205
- package/templates/default/components/NewVariantComponent.tsx +229 -229
- package/templates/default/components/PhotoGallery.tsx +35 -35
- package/templates/default/components/PieChartBox.tsx +101 -101
- package/templates/default/components/ProgressBar.tsx +48 -48
- package/templates/default/components/ProtectedDocument.tsx +44 -44
- package/templates/default/components/ProtectedImage.tsx +143 -143
- package/templates/default/components/ProtectedVideo.tsx +76 -76
- package/templates/default/components/SectionIcon.tsx +8 -8
- package/templates/default/components/SectionItemCard.tsx +144 -144
- package/templates/default/components/SectionItemStatusBadge.tsx +17 -17
- package/templates/default/components/SectionPage.tsx +125 -125
- package/templates/default/components/SelectBox.tsx +98 -98
- package/templates/default/components/SelectInputButtons.tsx +125 -125
- package/templates/default/components/SettingsPage.tsx +232 -232
- package/templates/default/components/Sidebar.tsx +204 -204
- package/templates/default/components/SidebarDropdownItem.tsx +83 -83
- package/templates/default/components/SidebarItem.tsx +24 -24
- package/templates/default/components/ThemeProvider.tsx +8 -8
- package/templates/default/components/TooltipComponent.tsx +27 -27
- package/templates/default/components/VariantCard.tsx +124 -124
- package/templates/default/components/VariantEditPage.tsx +230 -230
- package/templates/default/components/analytics/BounceRate.tsx +70 -70
- package/templates/default/components/analytics/LivePageViews.tsx +55 -55
- package/templates/default/components/analytics/LiveUsersCount.tsx +33 -33
- package/templates/default/components/analytics/MonthlyPageViews.tsx +42 -42
- package/templates/default/components/analytics/TopCountries.tsx +52 -52
- package/templates/default/components/analytics/TopDevices.tsx +46 -46
- package/templates/default/components/analytics/TopMediums.tsx +58 -58
- package/templates/default/components/analytics/TopSources.tsx +45 -45
- package/templates/default/components/analytics/TotalPageViews.tsx +41 -41
- package/templates/default/components/analytics/TotalSessions.tsx +41 -41
- package/templates/default/components/analytics/TotalUniqueUsers.tsx +41 -41
- package/templates/default/components/custom/RightHomeRoomVariantCard.tsx +138 -138
- package/templates/default/components/dndKit/Draggable.tsx +21 -21
- package/templates/default/components/dndKit/Droppable.tsx +20 -20
- package/templates/default/components/dndKit/SortableItem.tsx +18 -18
- package/templates/default/components/form/DateRangeFormInput.tsx +57 -57
- package/templates/default/components/form/Form.tsx +317 -317
- package/templates/default/components/form/FormInputElement.tsx +70 -70
- package/templates/default/components/form/FormInputs.tsx +118 -118
- package/templates/default/components/form/helpers/_section-hot-reload.js +1 -1
- package/templates/default/components/form/helpers/util.ts +17 -17
- package/templates/default/components/form/inputs/CheckboxFormInput.tsx +46 -46
- package/templates/default/components/form/inputs/ColorFormInput.tsx +44 -44
- package/templates/default/components/form/inputs/DateFormInput.tsx +156 -156
- package/templates/default/components/form/inputs/DocumentFormInput.tsx +222 -222
- package/templates/default/components/form/inputs/MapFormInput.tsx +140 -140
- package/templates/default/components/form/inputs/MultipleSelectFormInput.tsx +85 -85
- package/templates/default/components/form/inputs/NumberFormInput.tsx +42 -42
- package/templates/default/components/form/inputs/PasswordFormInput.tsx +47 -47
- package/templates/default/components/form/inputs/PhotoFormInput.tsx +219 -219
- package/templates/default/components/form/inputs/RichTextFormInput.tsx +135 -135
- package/templates/default/components/form/inputs/SelectFormInput.tsx +175 -175
- package/templates/default/components/form/inputs/SlugFormInput.tsx +131 -131
- package/templates/default/components/form/inputs/TagsFormInput.tsx +260 -260
- package/templates/default/components/form/inputs/TextFormInput.tsx +48 -48
- package/templates/default/components/form/inputs/TextareaFormInput.tsx +47 -47
- package/templates/default/components/form/inputs/VideoFormInput.tsx +118 -118
- package/templates/default/components/locale-dropdown.tsx +74 -74
- package/templates/default/components/locale-picker.tsx +85 -85
- package/templates/default/components/login-locale-dropdown.tsx +46 -46
- package/templates/default/components/multi-select.tsx +1146 -1146
- package/templates/default/components/pagination/Pagination.tsx +36 -36
- package/templates/default/components/pagination/PaginationButtons.tsx +147 -147
- package/templates/default/components/theme-toggle.tsx +39 -39
- package/templates/default/components/ui/accordion.tsx +53 -53
- package/templates/default/components/ui/alert-dialog.tsx +157 -157
- package/templates/default/components/ui/alert.tsx +46 -46
- package/templates/default/components/ui/badge.tsx +38 -38
- package/templates/default/components/ui/button.tsx +62 -62
- package/templates/default/components/ui/calendar.tsx +166 -166
- package/templates/default/components/ui/card.tsx +43 -43
- package/templates/default/components/ui/checkbox.tsx +29 -29
- package/templates/default/components/ui/command.tsx +137 -137
- package/templates/default/components/ui/custom-alert-dialog.tsx +113 -113
- package/templates/default/components/ui/custom-dialog.tsx +123 -123
- package/templates/default/components/ui/dialog.tsx +123 -123
- package/templates/default/components/ui/direction.tsx +22 -22
- package/templates/default/components/ui/dropdown-menu.tsx +182 -182
- package/templates/default/components/ui/input-group.tsx +54 -54
- package/templates/default/components/ui/input.tsx +22 -22
- package/templates/default/components/ui/label.tsx +19 -19
- package/templates/default/components/ui/popover.tsx +42 -42
- package/templates/default/components/ui/progress.tsx +31 -31
- package/templates/default/components/ui/scroll-area.tsx +42 -42
- package/templates/default/components/ui/select.tsx +165 -165
- package/templates/default/components/ui/separator.tsx +28 -28
- package/templates/default/components/ui/sheet.tsx +103 -103
- package/templates/default/components/ui/spinner.tsx +16 -16
- package/templates/default/components/ui/switch.tsx +29 -29
- package/templates/default/components/ui/table.tsx +83 -83
- package/templates/default/components/ui/tabs.tsx +55 -55
- package/templates/default/components/ui/toast.tsx +113 -113
- package/templates/default/components/ui/toaster.tsx +35 -35
- package/templates/default/components/ui/tooltip.tsx +30 -30
- package/templates/default/components/ui/use-toast.ts +188 -188
- package/templates/default/components.json +21 -21
- package/templates/default/context/ModalProvider.tsx +53 -53
- package/templates/default/drizzle.config.ts +4 -4
- package/templates/default/dynamic-schemas/schema.ts +84 -19
- package/templates/default/env/env.js +130 -130
- package/templates/default/envConfig.ts +4 -4
- package/templates/default/hooks/useModal.ts +8 -8
- package/templates/default/lib/apiHelpers.ts +92 -92
- package/templates/default/lib/postinstall.js +14 -14
- package/templates/default/lib/utils.ts +6 -6
- package/templates/default/next-env.d.ts +6 -6
- package/templates/default/next.config.ts +23 -23
- package/templates/default/package.json +1 -1
- package/templates/default/postcss.config.mjs +6 -6
- package/templates/default/proxy.ts +32 -32
- package/templates/default/tsconfig.json +48 -48
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
import type { AxiosInstance } from 'axios';
|
|
2
|
-
import type { AxiosError } from 'axios'
|
|
3
|
-
import type { AdminDetails, NewVariantPageRequestResponse, VariantEditPageRequestResponse } from 'nextjs-cms/core/types'
|
|
4
|
-
|
|
5
|
-
export const handleVariantDeletion = async (
|
|
6
|
-
variant: string,
|
|
7
|
-
id: string,
|
|
8
|
-
axiosPrivate: AxiosInstance,
|
|
9
|
-
controller?: AbortController,
|
|
10
|
-
): Promise<any> => {
|
|
11
|
-
try {
|
|
12
|
-
const res = await axiosPrivate.post(
|
|
13
|
-
`/api-variant-delete`,
|
|
14
|
-
{ variant: variant, id: id },
|
|
15
|
-
{
|
|
16
|
-
signal: controller?.signal,
|
|
17
|
-
headers: {
|
|
18
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
)
|
|
22
|
-
return res.data
|
|
23
|
-
} catch (error: AxiosError | any) {
|
|
24
|
-
return error?.response?.data
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export async function getNewVariantPage(
|
|
29
|
-
section: string,
|
|
30
|
-
variant: string,
|
|
31
|
-
axiosPrivate: AxiosInstance,
|
|
32
|
-
controller?: AbortController,
|
|
33
|
-
): Promise<NewVariantPageRequestResponse | null> {
|
|
34
|
-
try {
|
|
35
|
-
const res = await axiosPrivate.get(`/api-variant-new?section=${section}&variant=${variant}`, {
|
|
36
|
-
signal: controller?.signal,
|
|
37
|
-
})
|
|
38
|
-
return res.data
|
|
39
|
-
} catch (error) {
|
|
40
|
-
return null
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export async function getVariantPage(
|
|
45
|
-
section: string,
|
|
46
|
-
variant: string,
|
|
47
|
-
sectionItemId: string,
|
|
48
|
-
id: string,
|
|
49
|
-
axiosPrivate: AxiosInstance,
|
|
50
|
-
controller?: AbortController,
|
|
51
|
-
): Promise<VariantEditPageRequestResponse | null> {
|
|
52
|
-
try {
|
|
53
|
-
const res = await axiosPrivate.get(
|
|
54
|
-
`/api-variant-edit?section=${section}&variant=${variant}§ionItemId=${sectionItemId}&id=${id}`,
|
|
55
|
-
{
|
|
56
|
-
signal: controller?.signal,
|
|
57
|
-
},
|
|
58
|
-
)
|
|
59
|
-
return res.data
|
|
60
|
-
} catch (error: AxiosError | any) {
|
|
61
|
-
return error.response.data
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export const getAnalytics = async ({
|
|
66
|
-
requestType,
|
|
67
|
-
axiosPrivate,
|
|
68
|
-
controller,
|
|
69
|
-
fromDate,
|
|
70
|
-
toDate,
|
|
71
|
-
}: {
|
|
72
|
-
requestType: string
|
|
73
|
-
axiosPrivate: AxiosInstance
|
|
74
|
-
controller?: AbortController
|
|
75
|
-
fromDate?: Date | string | null
|
|
76
|
-
toDate?: Date | string | null
|
|
77
|
-
}) => {
|
|
78
|
-
return null
|
|
79
|
-
try {
|
|
80
|
-
const res = await axiosPrivate.get('/api-g-a', {
|
|
81
|
-
params: {
|
|
82
|
-
requestType: requestType,
|
|
83
|
-
fromDate: fromDate,
|
|
84
|
-
toDate: toDate,
|
|
85
|
-
},
|
|
86
|
-
signal: controller?.signal,
|
|
87
|
-
})
|
|
88
|
-
return res.data
|
|
89
|
-
} catch (error) {
|
|
90
|
-
return null
|
|
91
|
-
}
|
|
92
|
-
}
|
|
1
|
+
import type { AxiosInstance } from 'axios';
|
|
2
|
+
import type { AxiosError } from 'axios'
|
|
3
|
+
import type { AdminDetails, NewVariantPageRequestResponse, VariantEditPageRequestResponse } from 'nextjs-cms/core/types'
|
|
4
|
+
|
|
5
|
+
export const handleVariantDeletion = async (
|
|
6
|
+
variant: string,
|
|
7
|
+
id: string,
|
|
8
|
+
axiosPrivate: AxiosInstance,
|
|
9
|
+
controller?: AbortController,
|
|
10
|
+
): Promise<any> => {
|
|
11
|
+
try {
|
|
12
|
+
const res = await axiosPrivate.post(
|
|
13
|
+
`/api-variant-delete`,
|
|
14
|
+
{ variant: variant, id: id },
|
|
15
|
+
{
|
|
16
|
+
signal: controller?.signal,
|
|
17
|
+
headers: {
|
|
18
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
)
|
|
22
|
+
return res.data
|
|
23
|
+
} catch (error: AxiosError | any) {
|
|
24
|
+
return error?.response?.data
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export async function getNewVariantPage(
|
|
29
|
+
section: string,
|
|
30
|
+
variant: string,
|
|
31
|
+
axiosPrivate: AxiosInstance,
|
|
32
|
+
controller?: AbortController,
|
|
33
|
+
): Promise<NewVariantPageRequestResponse | null> {
|
|
34
|
+
try {
|
|
35
|
+
const res = await axiosPrivate.get(`/api-variant-new?section=${section}&variant=${variant}`, {
|
|
36
|
+
signal: controller?.signal,
|
|
37
|
+
})
|
|
38
|
+
return res.data
|
|
39
|
+
} catch (error) {
|
|
40
|
+
return null
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export async function getVariantPage(
|
|
45
|
+
section: string,
|
|
46
|
+
variant: string,
|
|
47
|
+
sectionItemId: string,
|
|
48
|
+
id: string,
|
|
49
|
+
axiosPrivate: AxiosInstance,
|
|
50
|
+
controller?: AbortController,
|
|
51
|
+
): Promise<VariantEditPageRequestResponse | null> {
|
|
52
|
+
try {
|
|
53
|
+
const res = await axiosPrivate.get(
|
|
54
|
+
`/api-variant-edit?section=${section}&variant=${variant}§ionItemId=${sectionItemId}&id=${id}`,
|
|
55
|
+
{
|
|
56
|
+
signal: controller?.signal,
|
|
57
|
+
},
|
|
58
|
+
)
|
|
59
|
+
return res.data
|
|
60
|
+
} catch (error: AxiosError | any) {
|
|
61
|
+
return error.response.data
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export const getAnalytics = async ({
|
|
66
|
+
requestType,
|
|
67
|
+
axiosPrivate,
|
|
68
|
+
controller,
|
|
69
|
+
fromDate,
|
|
70
|
+
toDate,
|
|
71
|
+
}: {
|
|
72
|
+
requestType: string
|
|
73
|
+
axiosPrivate: AxiosInstance
|
|
74
|
+
controller?: AbortController
|
|
75
|
+
fromDate?: Date | string | null
|
|
76
|
+
toDate?: Date | string | null
|
|
77
|
+
}) => {
|
|
78
|
+
return null
|
|
79
|
+
try {
|
|
80
|
+
const res = await axiosPrivate.get('/api-g-a', {
|
|
81
|
+
params: {
|
|
82
|
+
requestType: requestType,
|
|
83
|
+
fromDate: fromDate,
|
|
84
|
+
toDate: toDate,
|
|
85
|
+
},
|
|
86
|
+
signal: controller?.signal,
|
|
87
|
+
})
|
|
88
|
+
return res.data
|
|
89
|
+
} catch (error) {
|
|
90
|
+
return null
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
const fse = require('fs-extra')
|
|
2
|
-
const path = require('path')
|
|
3
|
-
|
|
4
|
-
// Resolve the TinyMCE package path
|
|
5
|
-
const tinymcePath = path.dirname(require.resolve('tinymce/package.json'))
|
|
6
|
-
|
|
7
|
-
// Define the target directory
|
|
8
|
-
const targetDir = path.join(__dirname, '../public', 'tinymce')
|
|
9
|
-
|
|
10
|
-
// Empty and copy the directory
|
|
11
|
-
fse.emptyDirSync(targetDir)
|
|
12
|
-
fse.copySync(tinymcePath, targetDir, { overwrite: true })
|
|
13
|
-
|
|
14
|
-
// console.log('Successfully copied TinyMCE to public directory')
|
|
1
|
+
const fse = require('fs-extra')
|
|
2
|
+
const path = require('path')
|
|
3
|
+
|
|
4
|
+
// Resolve the TinyMCE package path
|
|
5
|
+
const tinymcePath = path.dirname(require.resolve('tinymce/package.json'))
|
|
6
|
+
|
|
7
|
+
// Define the target directory
|
|
8
|
+
const targetDir = path.join(__dirname, '../public', 'tinymce')
|
|
9
|
+
|
|
10
|
+
// Empty and copy the directory
|
|
11
|
+
fse.emptyDirSync(targetDir)
|
|
12
|
+
fse.copySync(tinymcePath, targetDir, { overwrite: true })
|
|
13
|
+
|
|
14
|
+
// console.log('Successfully copied TinyMCE to public directory')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { clsx, type ClassValue } from 'clsx'
|
|
2
|
-
import { twMerge } from 'tailwind-merge'
|
|
3
|
-
|
|
4
|
-
export function cn(...inputs: ClassValue[]) {
|
|
5
|
-
return twMerge(clsx(inputs))
|
|
6
|
-
}
|
|
1
|
+
import { clsx, type ClassValue } from 'clsx'
|
|
2
|
+
import { twMerge } from 'tailwind-merge'
|
|
3
|
+
|
|
4
|
+
export function cn(...inputs: ClassValue[]) {
|
|
5
|
+
return twMerge(clsx(inputs))
|
|
6
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/// <reference types="next" />
|
|
2
|
-
/// <reference types="next/image-types/global" />
|
|
3
|
-
import "./.next/dev/types/routes.d.ts";
|
|
4
|
-
|
|
5
|
-
// NOTE: This file should not be edited
|
|
6
|
-
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
|
1
|
+
/// <reference types="next" />
|
|
2
|
+
/// <reference types="next/image-types/global" />
|
|
3
|
+
import "./.next/dev/types/routes.d.ts";
|
|
4
|
+
|
|
5
|
+
// NOTE: This file should not be edited
|
|
6
|
+
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import type { NextConfig } from 'next'
|
|
2
|
-
|
|
1
|
+
import type { NextConfig } from 'next'
|
|
2
|
+
|
|
3
3
|
const nextConfig: NextConfig = {
|
|
4
4
|
serverExternalPackages: [
|
|
5
5
|
'jiti',
|
|
6
|
-
],
|
|
7
|
-
|
|
8
|
-
reactStrictMode: true,
|
|
9
|
-
async rewrites() {
|
|
10
|
-
return [
|
|
11
|
-
{
|
|
12
|
-
source: '/browse/:section',
|
|
13
|
-
destination: '/browse/:section/1',
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
source: '/',
|
|
17
|
-
destination: '/dashboard',
|
|
18
|
-
},
|
|
19
|
-
]
|
|
20
|
-
},
|
|
21
|
-
images: {
|
|
22
|
-
formats: ['image/avif', 'image/webp'],
|
|
6
|
+
],
|
|
7
|
+
|
|
8
|
+
reactStrictMode: true,
|
|
9
|
+
async rewrites() {
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
source: '/browse/:section',
|
|
13
|
+
destination: '/browse/:section/1',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
source: '/',
|
|
17
|
+
destination: '/dashboard',
|
|
18
|
+
},
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
images: {
|
|
22
|
+
formats: ['image/avif', 'image/webp'],
|
|
23
23
|
remotePatterns: [
|
|
24
24
|
// Use remotePatterns in your next.config.js file to allow images from specific external paths and block all others.
|
|
25
25
|
// https://nextjs.org/docs/app/api-reference/components/image#remotepatterns
|
|
@@ -30,7 +30,7 @@ const nextConfig: NextConfig = {
|
|
|
30
30
|
// pathname: '/**',
|
|
31
31
|
// },
|
|
32
32
|
],
|
|
33
|
-
},
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export default nextConfig
|
|
33
|
+
},
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default nextConfig
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const config = {
|
|
2
|
-
plugins: {
|
|
3
|
-
"@tailwindcss/postcss": {},
|
|
4
|
-
},
|
|
5
|
-
};
|
|
6
|
-
|
|
1
|
+
const config = {
|
|
2
|
+
plugins: {
|
|
3
|
+
"@tailwindcss/postcss": {},
|
|
4
|
+
},
|
|
5
|
+
};
|
|
6
|
+
|
|
7
7
|
export default config;
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import { NextRequest } from 'next/server'
|
|
2
|
-
import { validateCSRFToken } from 'nextjs-cms/auth/actions'
|
|
3
|
-
|
|
4
|
-
export async function proxy(request: NextRequest) {
|
|
5
|
-
/**
|
|
6
|
-
* If the request is a POST request, we will check if the request body is empty.
|
|
7
|
-
*/
|
|
8
|
-
if (['POST', 'PUT', 'DELETE', 'PATCH'].includes(request.method)) {
|
|
9
|
-
/**
|
|
10
|
-
* Check for csrf token in the request body
|
|
11
|
-
*/
|
|
12
|
-
const csrfToken = request.cookies.get('csrf_token')
|
|
13
|
-
const csrfTokenHeader = request.headers.get('x-csrf-token') ?? undefined
|
|
14
|
-
const csrfValid = await validateCSRFToken({ cookieValue: csrfToken?.value, bodyValue: csrfTokenHeader })
|
|
15
|
-
if (!csrfValid) {
|
|
16
|
-
return Response.json({ success: false, message: 'Invalid CSRF token' }, { status: 400 })
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const config = {
|
|
22
|
-
matcher: [
|
|
23
|
-
/*
|
|
24
|
-
* Match all request paths except for the ones starting with:
|
|
25
|
-
* - api (API routes)
|
|
26
|
-
* - _next/static (static files)
|
|
27
|
-
* - _next/image (image optimization files)
|
|
28
|
-
* - favicon.ico (favicon file)
|
|
29
|
-
*/
|
|
30
|
-
'/((?!_next/static|_next/image|favicon.ico).*)',
|
|
31
|
-
]
|
|
32
|
-
}
|
|
1
|
+
import { NextRequest } from 'next/server'
|
|
2
|
+
import { validateCSRFToken } from 'nextjs-cms/auth/actions'
|
|
3
|
+
|
|
4
|
+
export async function proxy(request: NextRequest) {
|
|
5
|
+
/**
|
|
6
|
+
* If the request is a POST request, we will check if the request body is empty.
|
|
7
|
+
*/
|
|
8
|
+
if (['POST', 'PUT', 'DELETE', 'PATCH'].includes(request.method)) {
|
|
9
|
+
/**
|
|
10
|
+
* Check for csrf token in the request body
|
|
11
|
+
*/
|
|
12
|
+
const csrfToken = request.cookies.get('csrf_token')
|
|
13
|
+
const csrfTokenHeader = request.headers.get('x-csrf-token') ?? undefined
|
|
14
|
+
const csrfValid = await validateCSRFToken({ cookieValue: csrfToken?.value, bodyValue: csrfTokenHeader })
|
|
15
|
+
if (!csrfValid) {
|
|
16
|
+
return Response.json({ success: false, message: 'Invalid CSRF token' }, { status: 400 })
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const config = {
|
|
22
|
+
matcher: [
|
|
23
|
+
/*
|
|
24
|
+
* Match all request paths except for the ones starting with:
|
|
25
|
+
* - api (API routes)
|
|
26
|
+
* - _next/static (static files)
|
|
27
|
+
* - _next/image (image optimization files)
|
|
28
|
+
* - favicon.ico (favicon file)
|
|
29
|
+
*/
|
|
30
|
+
'/((?!_next/static|_next/image|favicon.ico).*)',
|
|
31
|
+
]
|
|
32
|
+
}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"baseUrl": ".",
|
|
4
|
-
"target": "ES2020",
|
|
5
|
-
"lib": [
|
|
6
|
-
"dom",
|
|
7
|
-
"dom.iterable",
|
|
8
|
-
"esnext"
|
|
9
|
-
],
|
|
10
|
-
"allowJs": true,
|
|
11
|
-
"skipLibCheck": true,
|
|
12
|
-
"strict": true,
|
|
13
|
-
"strictNullChecks": true,
|
|
14
|
-
"noEmit": true,
|
|
15
|
-
"esModuleInterop": true,
|
|
16
|
-
"forceConsistentCasingInFileNames": true,
|
|
17
|
-
"module": "esnext",
|
|
18
|
-
"moduleResolution": "bundler",
|
|
19
|
-
"resolveJsonModule": true,
|
|
20
|
-
"isolatedModules": true,
|
|
21
|
-
"noImplicitOverride": true,
|
|
22
|
-
"noUncheckedIndexedAccess": true,
|
|
23
|
-
"jsx": "react-jsx",
|
|
24
|
-
"plugins": [
|
|
25
|
-
{
|
|
26
|
-
"name": "next"
|
|
27
|
-
}
|
|
28
|
-
],
|
|
29
|
-
"paths": {
|
|
30
|
-
"@/*": [
|
|
31
|
-
"./*"
|
|
32
|
-
]
|
|
33
|
-
},
|
|
34
|
-
"incremental": true
|
|
35
|
-
},
|
|
36
|
-
"include": [
|
|
37
|
-
"next-env.d.ts",
|
|
38
|
-
"**/*.ts",
|
|
39
|
-
"**/*.tsx",
|
|
40
|
-
".next/types/**/*.ts",
|
|
41
|
-
"lib/cli.mjs",
|
|
42
|
-
"cli.js",
|
|
43
|
-
".next/dev/types/**/*.ts"
|
|
44
|
-
],
|
|
45
|
-
"exclude": [
|
|
46
|
-
"node_modules"
|
|
47
|
-
]
|
|
48
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"baseUrl": ".",
|
|
4
|
+
"target": "ES2020",
|
|
5
|
+
"lib": [
|
|
6
|
+
"dom",
|
|
7
|
+
"dom.iterable",
|
|
8
|
+
"esnext"
|
|
9
|
+
],
|
|
10
|
+
"allowJs": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"strict": true,
|
|
13
|
+
"strictNullChecks": true,
|
|
14
|
+
"noEmit": true,
|
|
15
|
+
"esModuleInterop": true,
|
|
16
|
+
"forceConsistentCasingInFileNames": true,
|
|
17
|
+
"module": "esnext",
|
|
18
|
+
"moduleResolution": "bundler",
|
|
19
|
+
"resolveJsonModule": true,
|
|
20
|
+
"isolatedModules": true,
|
|
21
|
+
"noImplicitOverride": true,
|
|
22
|
+
"noUncheckedIndexedAccess": true,
|
|
23
|
+
"jsx": "react-jsx",
|
|
24
|
+
"plugins": [
|
|
25
|
+
{
|
|
26
|
+
"name": "next"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"paths": {
|
|
30
|
+
"@/*": [
|
|
31
|
+
"./*"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"incremental": true
|
|
35
|
+
},
|
|
36
|
+
"include": [
|
|
37
|
+
"next-env.d.ts",
|
|
38
|
+
"**/*.ts",
|
|
39
|
+
"**/*.tsx",
|
|
40
|
+
".next/types/**/*.ts",
|
|
41
|
+
"lib/cli.mjs",
|
|
42
|
+
"cli.js",
|
|
43
|
+
".next/dev/types/**/*.ts"
|
|
44
|
+
],
|
|
45
|
+
"exclude": [
|
|
46
|
+
"node_modules"
|
|
47
|
+
]
|
|
48
|
+
}
|