nextjs-cms 0.5.9 → 0.5.11
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/api/axios/axiosInstance.d.ts +1 -1
- package/dist/api/axios/axiosInstance.js +8 -8
- package/dist/api/index.d.ts +855 -855
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +12 -12
- package/dist/api/lib/serverActions.d.ts +239 -239
- package/dist/api/lib/serverActions.d.ts.map +1 -1
- package/dist/api/lib/serverActions.js +834 -834
- package/dist/api/root.d.ts +828 -828
- package/dist/api/root.js +30 -30
- package/dist/api/routers/accountSettings.d.ts +60 -60
- package/dist/api/routers/accountSettings.js +108 -108
- package/dist/api/routers/admins.d.ts +105 -105
- package/dist/api/routers/admins.js +219 -219
- package/dist/api/routers/auth.d.ts +47 -47
- package/dist/api/routers/auth.js +25 -25
- package/dist/api/routers/categorySection.d.ts +103 -103
- package/dist/api/routers/categorySection.js +38 -38
- package/dist/api/routers/cmsSettings.d.ts +48 -48
- package/dist/api/routers/cmsSettings.js +51 -51
- package/dist/api/routers/cpanel.d.ts +83 -83
- package/dist/api/routers/cpanel.js +216 -216
- package/dist/api/routers/files.d.ts +47 -47
- package/dist/api/routers/files.js +23 -23
- package/dist/api/routers/gallery.d.ts +35 -35
- package/dist/api/routers/gallery.js +62 -62
- package/dist/api/routers/googleAnalytics.d.ts +30 -30
- package/dist/api/routers/googleAnalytics.js +7 -7
- package/dist/api/routers/hasItemsSection.d.ts +139 -139
- package/dist/api/routers/hasItemsSection.js +34 -34
- package/dist/api/routers/navigation.d.ts +51 -51
- package/dist/api/routers/navigation.js +11 -11
- package/dist/api/routers/simpleSection.d.ts +57 -57
- package/dist/api/routers/simpleSection.js +12 -12
- package/dist/api/trpc.d.ts +106 -106
- package/dist/api/trpc.js +72 -72
- package/dist/auth/axios/axiosInstance.d.ts +1 -1
- package/dist/auth/axios/axiosInstance.js +8 -8
- package/dist/auth/csrf.d.ts +29 -29
- package/dist/auth/csrf.js +76 -76
- package/dist/auth/hooks/index.d.ts +3 -3
- package/dist/auth/hooks/index.d.ts.map +1 -1
- package/dist/auth/hooks/index.js +3 -3
- package/dist/auth/hooks/useAxiosPrivate.d.ts +4 -4
- package/dist/auth/hooks/useAxiosPrivate.js +74 -74
- package/dist/auth/hooks/useRefreshToken.d.ts +6 -6
- package/dist/auth/hooks/useRefreshToken.js +79 -79
- package/dist/auth/index.d.ts +22 -22
- package/dist/auth/index.js +44 -44
- package/dist/auth/jwt.d.ts +5 -5
- package/dist/auth/jwt.js +25 -25
- package/dist/auth/lib/actions.d.ts +32 -32
- package/dist/auth/lib/actions.d.ts.map +1 -1
- package/dist/auth/lib/actions.js +209 -209
- package/dist/auth/lib/client.d.ts +3 -3
- package/dist/auth/lib/client.js +46 -46
- package/dist/auth/lib/index.d.ts +2 -2
- package/dist/auth/lib/index.d.ts.map +1 -1
- package/dist/auth/lib/index.js +2 -2
- package/dist/auth/react.d.ts +105 -105
- package/dist/auth/react.d.ts.map +1 -1
- package/dist/auth/react.js +347 -347
- package/dist/auth/trpc.d.ts +5 -5
- package/dist/auth/trpc.d.ts.map +1 -1
- package/dist/auth/trpc.js +81 -81
- package/dist/core/config/config-loader.d.ts +91 -91
- package/dist/core/config/config-loader.js +230 -230
- package/dist/core/config/index.d.ts +2 -2
- package/dist/core/config/index.d.ts.map +1 -1
- package/dist/core/config/index.js +1 -1
- package/dist/core/config/loader.d.ts +1 -1
- package/dist/core/config/loader.js +42 -42
- package/dist/core/db/index.d.ts +1 -1
- package/dist/core/db/index.d.ts.map +1 -1
- package/dist/core/db/index.js +1 -1
- package/dist/core/db/table-checker/DbTable.d.ts +5 -5
- package/dist/core/db/table-checker/DbTable.js +5 -5
- package/dist/core/db/table-checker/MysqlTable.d.ts +33 -33
- package/dist/core/db/table-checker/MysqlTable.d.ts.map +1 -1
- package/dist/core/db/table-checker/MysqlTable.js +94 -94
- package/dist/core/db/table-checker/index.d.ts +1 -1
- package/dist/core/db/table-checker/index.d.ts.map +1 -1
- package/dist/core/db/table-checker/index.js +1 -1
- package/dist/core/factories/FieldFactory.d.ts +123 -123
- package/dist/core/factories/FieldFactory.d.ts.map +1 -1
- package/dist/core/factories/FieldFactory.js +411 -411
- package/dist/core/factories/SectionFactory.d.ts +109 -109
- package/dist/core/factories/SectionFactory.d.ts.map +1 -1
- package/dist/core/factories/SectionFactory.js +415 -415
- package/dist/core/factories/index.d.ts +2 -2
- package/dist/core/factories/index.d.ts.map +1 -1
- package/dist/core/factories/index.js +2 -2
- package/dist/core/fields/checkbox.d.ts +62 -62
- package/dist/core/fields/checkbox.d.ts.map +1 -1
- package/dist/core/fields/checkbox.js +62 -62
- package/dist/core/fields/color.d.ts +83 -83
- package/dist/core/fields/color.d.ts.map +1 -1
- package/dist/core/fields/color.js +91 -91
- package/dist/core/fields/date.d.ts +99 -99
- package/dist/core/fields/date.d.ts.map +1 -1
- package/dist/core/fields/date.js +108 -108
- package/dist/core/fields/document.d.ts +179 -179
- package/dist/core/fields/document.d.ts.map +1 -1
- package/dist/core/fields/document.js +277 -277
- package/dist/core/fields/field-group.d.ts +17 -17
- package/dist/core/fields/field-group.d.ts.map +1 -1
- package/dist/core/fields/field-group.js +6 -6
- package/dist/core/fields/field.d.ts +125 -125
- package/dist/core/fields/field.d.ts.map +1 -1
- package/dist/core/fields/field.js +148 -148
- package/dist/core/fields/fileField.d.ts +14 -14
- package/dist/core/fields/fileField.d.ts.map +1 -1
- package/dist/core/fields/fileField.js +5 -5
- package/dist/core/fields/index.d.ts +64 -64
- package/dist/core/fields/index.d.ts.map +1 -1
- package/dist/core/fields/index.js +18 -18
- package/dist/core/fields/map.d.ts +166 -166
- package/dist/core/fields/map.d.ts.map +1 -1
- package/dist/core/fields/map.js +152 -152
- package/dist/core/fields/number.d.ts +185 -185
- package/dist/core/fields/number.d.ts.map +1 -1
- package/dist/core/fields/number.js +241 -241
- package/dist/core/fields/password.d.ts +108 -108
- package/dist/core/fields/password.d.ts.map +1 -1
- package/dist/core/fields/password.js +133 -133
- package/dist/core/fields/photo.d.ts +288 -288
- package/dist/core/fields/photo.d.ts.map +1 -1
- package/dist/core/fields/photo.js +410 -410
- package/dist/core/fields/richText.d.ts +294 -294
- package/dist/core/fields/richText.d.ts.map +1 -1
- package/dist/core/fields/richText.js +338 -338
- package/dist/core/fields/select.d.ts +365 -365
- package/dist/core/fields/select.d.ts.map +1 -1
- package/dist/core/fields/select.js +499 -499
- package/dist/core/fields/selectMultiple.d.ts +235 -235
- package/dist/core/fields/selectMultiple.d.ts.map +1 -1
- package/dist/core/fields/selectMultiple.js +417 -417
- package/dist/core/fields/tags.d.ts +130 -130
- package/dist/core/fields/tags.d.ts.map +1 -1
- package/dist/core/fields/tags.js +105 -105
- package/dist/core/fields/text.d.ts +135 -135
- package/dist/core/fields/text.d.ts.map +1 -1
- package/dist/core/fields/text.js +157 -157
- package/dist/core/fields/textArea.d.ts +106 -106
- package/dist/core/fields/textArea.d.ts.map +1 -1
- package/dist/core/fields/textArea.js +126 -126
- package/dist/core/fields/video.d.ts +147 -147
- package/dist/core/fields/video.d.ts.map +1 -1
- package/dist/core/fields/video.js +248 -248
- package/dist/core/helpers/entity.d.ts +7 -7
- package/dist/core/helpers/entity.js +27 -27
- package/dist/core/helpers/index.d.ts +4 -4
- package/dist/core/helpers/index.d.ts.map +1 -1
- package/dist/core/helpers/index.js +3 -3
- package/dist/core/index.d.ts +7 -7
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +7 -7
- package/dist/core/sections/category.d.ts +282 -282
- package/dist/core/sections/category.d.ts.map +1 -1
- package/dist/core/sections/category.js +147 -147
- package/dist/core/sections/hasItems.d.ts +631 -631
- package/dist/core/sections/hasItems.d.ts.map +1 -1
- package/dist/core/sections/hasItems.js +144 -144
- package/dist/core/sections/index.d.ts +4 -4
- package/dist/core/sections/index.d.ts.map +1 -1
- package/dist/core/sections/index.js +4 -4
- package/dist/core/sections/section.d.ts +225 -225
- package/dist/core/sections/section.d.ts.map +1 -1
- package/dist/core/sections/section.js +341 -341
- package/dist/core/sections/simple.d.ts +98 -98
- package/dist/core/sections/simple.d.ts.map +1 -1
- package/dist/core/sections/simple.js +95 -95
- package/dist/core/security/dom.d.ts +10 -10
- package/dist/core/security/dom.js +92 -92
- package/dist/core/submit/ItemEditSubmit.d.ts +75 -75
- package/dist/core/submit/ItemEditSubmit.js +186 -186
- package/dist/core/submit/NewItemSubmit.d.ts +13 -13
- package/dist/core/submit/NewItemSubmit.js +93 -93
- package/dist/core/submit/SimpleSectionSubmit.d.ts +12 -12
- package/dist/core/submit/SimpleSectionSubmit.js +93 -93
- package/dist/core/submit/index.d.ts +4 -4
- package/dist/core/submit/index.js +4 -4
- package/dist/core/submit/submit.d.ts +115 -115
- package/dist/core/submit/submit.js +479 -479
- package/dist/core/types/index.d.ts +279 -279
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +1 -1
- package/dist/db/client.d.ts +8 -8
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +19 -19
- package/dist/db/config.d.ts +5 -5
- package/dist/db/config.js +22 -22
- package/dist/db/drizzle.config.d.ts +5 -5
- package/dist/db/drizzle.config.js +18 -18
- package/dist/db/index.d.ts +2 -2
- package/dist/db/index.js +3 -3
- package/dist/db/schema.d.ts +638 -638
- package/dist/db/schema.js +73 -73
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/translations/index.d.ts +2 -2
- package/dist/translations/index.js +15 -15
- package/dist/utils/CpanelApi.d.ts +24 -24
- package/dist/utils/CpanelApi.js +64 -64
- package/dist/utils/constants.d.ts +13 -13
- package/dist/utils/constants.js +61 -61
- package/dist/utils/index.d.ts +4 -4
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -4
- package/dist/utils/utils.d.ts +59 -59
- package/dist/utils/utils.js +132 -132
- package/dist/validators/checkbox.d.ts +3 -3
- package/dist/validators/checkbox.d.ts.map +1 -1
- package/dist/validators/checkbox.js +12 -12
- package/dist/validators/color.d.ts +3 -3
- package/dist/validators/color.d.ts.map +1 -1
- package/dist/validators/color.js +7 -7
- package/dist/validators/date.d.ts +3 -3
- package/dist/validators/date.d.ts.map +1 -1
- package/dist/validators/date.js +5 -5
- package/dist/validators/document.d.ts +3 -3
- package/dist/validators/document.d.ts.map +1 -1
- package/dist/validators/document.js +57 -57
- package/dist/validators/index.d.ts +14 -14
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +14 -14
- package/dist/validators/map.d.ts +3 -3
- package/dist/validators/map.d.ts.map +1 -1
- package/dist/validators/map.js +5 -5
- package/dist/validators/number.d.ts +3 -3
- package/dist/validators/number.d.ts.map +1 -1
- package/dist/validators/number.js +20 -20
- package/dist/validators/password.d.ts +3 -3
- package/dist/validators/password.d.ts.map +1 -1
- package/dist/validators/password.js +11 -11
- package/dist/validators/photo.d.ts +3 -3
- package/dist/validators/photo.d.ts.map +1 -1
- package/dist/validators/photo.js +100 -100
- package/dist/validators/richText.d.ts +3 -3
- package/dist/validators/richText.d.ts.map +1 -1
- package/dist/validators/richText.js +8 -8
- package/dist/validators/select-multiple.d.ts +9 -9
- package/dist/validators/select-multiple.d.ts.map +1 -1
- package/dist/validators/select-multiple.js +20 -20
- package/dist/validators/select.d.ts +3 -3
- package/dist/validators/select.d.ts.map +1 -1
- package/dist/validators/select.js +5 -5
- package/dist/validators/text.d.ts +3 -3
- package/dist/validators/text.d.ts.map +1 -1
- package/dist/validators/text.js +7 -7
- package/dist/validators/textarea.d.ts +3 -3
- package/dist/validators/textarea.d.ts.map +1 -1
- package/dist/validators/textarea.js +7 -7
- package/dist/validators/video.d.ts +3 -3
- package/dist/validators/video.d.ts.map +1 -1
- package/dist/validators/video.js +57 -57
- package/package.json +4 -5
|
@@ -1,230 +1,230 @@
|
|
|
1
|
-
if (typeof window !== 'undefined') {
|
|
2
|
-
throw new Error('This module can only run on the server');
|
|
3
|
-
}
|
|
4
|
-
// import 'server-only'
|
|
5
|
-
// import chalk from 'chalk'
|
|
6
|
-
import * as z from 'zod';
|
|
7
|
-
import { loadConfigModule } from
|
|
8
|
-
// 1. Define config schema
|
|
9
|
-
const cmsConfigSchema = z.object({
|
|
10
|
-
/**
|
|
11
|
-
* The folder where the sections are located
|
|
12
|
-
*/
|
|
13
|
-
sectionsFolder: z.string().optional(),
|
|
14
|
-
api: z
|
|
15
|
-
.object({
|
|
16
|
-
/**
|
|
17
|
-
* The base URL of the cms
|
|
18
|
-
*/
|
|
19
|
-
baseUrl: z.string(),
|
|
20
|
-
})
|
|
21
|
-
.optional(),
|
|
22
|
-
/**
|
|
23
|
-
* The name of the site
|
|
24
|
-
*/
|
|
25
|
-
siteName: z.string().optional(),
|
|
26
|
-
theme: z.string().optional(),
|
|
27
|
-
/**
|
|
28
|
-
* Files configuration
|
|
29
|
-
*/
|
|
30
|
-
files: z
|
|
31
|
-
.object({
|
|
32
|
-
/**
|
|
33
|
-
* Upload configuration
|
|
34
|
-
*/
|
|
35
|
-
upload: z.object({
|
|
36
|
-
/**
|
|
37
|
-
* The path where the files are uploaded
|
|
38
|
-
*/
|
|
39
|
-
uploadPath: z.string(),
|
|
40
|
-
/**
|
|
41
|
-
* Whether to keep the file extension
|
|
42
|
-
*/
|
|
43
|
-
keepFileExtension: z.boolean(),
|
|
44
|
-
}),
|
|
45
|
-
/**
|
|
46
|
-
* Images configuration
|
|
47
|
-
*/
|
|
48
|
-
images: z
|
|
49
|
-
.object({
|
|
50
|
-
/**
|
|
51
|
-
* Global images thumbnail configuration
|
|
52
|
-
*/
|
|
53
|
-
thumbnail: z
|
|
54
|
-
.object({
|
|
55
|
-
width: z.number(),
|
|
56
|
-
height: z.number(),
|
|
57
|
-
crop: z.boolean(),
|
|
58
|
-
quality: z.number().optional(),
|
|
59
|
-
})
|
|
60
|
-
.optional(),
|
|
61
|
-
/**
|
|
62
|
-
* Global images watermark configuration
|
|
63
|
-
*/
|
|
64
|
-
watermark: z.boolean().optional(),
|
|
65
|
-
})
|
|
66
|
-
.optional(),
|
|
67
|
-
})
|
|
68
|
-
.optional(),
|
|
69
|
-
sections: z
|
|
70
|
-
.object({
|
|
71
|
-
category: z.object({
|
|
72
|
-
/**
|
|
73
|
-
* Whether to allow recursive deletion
|
|
74
|
-
*/
|
|
75
|
-
allowRecursiveDelete: z.boolean(),
|
|
76
|
-
}),
|
|
77
|
-
})
|
|
78
|
-
.optional(),
|
|
79
|
-
/**
|
|
80
|
-
* Database configuration
|
|
81
|
-
*/
|
|
82
|
-
db: z
|
|
83
|
-
.object({
|
|
84
|
-
schemaNamingConvention: z
|
|
85
|
-
.object({
|
|
86
|
-
/**
|
|
87
|
-
* The case style of the table name
|
|
88
|
-
*/
|
|
89
|
-
tableCaseStyle: z.enum(['camelCase', 'snakeCase', 'pascalCase']).optional(),
|
|
90
|
-
/**
|
|
91
|
-
* The case style of the column name
|
|
92
|
-
*/
|
|
93
|
-
columnCaseStyle: z.enum(['camelCase', 'snakeCase', 'pascalCase']).optional(),
|
|
94
|
-
})
|
|
95
|
-
.optional(),
|
|
96
|
-
})
|
|
97
|
-
.optional(),
|
|
98
|
-
debug: z.boolean().optional(),
|
|
99
|
-
/**
|
|
100
|
-
* Whether to enable strict mode.
|
|
101
|
-
* @default false
|
|
102
|
-
*/
|
|
103
|
-
strict: z.boolean().optional(),
|
|
104
|
-
});
|
|
105
|
-
// Merge utility function
|
|
106
|
-
function mergeConfig(defaults, userConfig) {
|
|
107
|
-
return {
|
|
108
|
-
sectionsFolder: userConfig.sectionsFolder ?? defaults.sectionsFolder,
|
|
109
|
-
siteName: userConfig.siteName ?? defaults.siteName,
|
|
110
|
-
strict: userConfig.strict ?? defaults.strict,
|
|
111
|
-
api: {
|
|
112
|
-
baseUrl: userConfig.api?.baseUrl ?? defaults.api.baseUrl,
|
|
113
|
-
},
|
|
114
|
-
theme: userConfig.theme ?? defaults.theme,
|
|
115
|
-
files: {
|
|
116
|
-
upload: {
|
|
117
|
-
uploadPath: userConfig.files?.upload?.uploadPath ?? defaults.files.upload.uploadPath,
|
|
118
|
-
keepFileExtension: userConfig.files?.upload?.keepFileExtension ?? defaults.files.upload.keepFileExtension,
|
|
119
|
-
},
|
|
120
|
-
images: {
|
|
121
|
-
thumbnail: {
|
|
122
|
-
width: userConfig.files?.images?.thumbnail?.width ?? defaults.files.images.thumbnail.width,
|
|
123
|
-
height: userConfig.files?.images?.thumbnail?.height ?? defaults.files.images.thumbnail.height,
|
|
124
|
-
crop: userConfig.files?.images?.thumbnail?.crop ?? defaults.files.images.thumbnail.crop,
|
|
125
|
-
quality: userConfig.files?.images?.thumbnail?.quality ?? defaults.files.images.thumbnail.quality,
|
|
126
|
-
},
|
|
127
|
-
watermark: userConfig.files?.images?.watermark ?? defaults.files.images.watermark,
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
sections: {
|
|
131
|
-
category: {
|
|
132
|
-
allowRecursiveDelete: userConfig.sections?.category?.allowRecursiveDelete ??
|
|
133
|
-
defaults.sections.category.allowRecursiveDelete,
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
db: {
|
|
137
|
-
schemaNamingConvention: {
|
|
138
|
-
tableCaseStyle: userConfig.db?.schemaNamingConvention?.tableCaseStyle ??
|
|
139
|
-
defaults.db.schemaNamingConvention.tableCaseStyle,
|
|
140
|
-
columnCaseStyle: userConfig.db?.schemaNamingConvention?.columnCaseStyle ??
|
|
141
|
-
defaults.db.schemaNamingConvention.columnCaseStyle,
|
|
142
|
-
},
|
|
143
|
-
},
|
|
144
|
-
debug: userConfig.debug ?? defaults.debug,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
// Default configuration values
|
|
148
|
-
const defaultConfig = {
|
|
149
|
-
sectionsFolder: 'sections',
|
|
150
|
-
siteName: 'LZ CMS Admin',
|
|
151
|
-
api: {
|
|
152
|
-
baseUrl: '/api',
|
|
153
|
-
},
|
|
154
|
-
theme: 'dark',
|
|
155
|
-
files: {
|
|
156
|
-
upload: {
|
|
157
|
-
uploadPath: './public/content',
|
|
158
|
-
keepFileExtension: true,
|
|
159
|
-
},
|
|
160
|
-
images: {
|
|
161
|
-
thumbnail: {
|
|
162
|
-
width: 200,
|
|
163
|
-
height: 200,
|
|
164
|
-
crop: false,
|
|
165
|
-
quality: 80,
|
|
166
|
-
},
|
|
167
|
-
watermark: false,
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
sections: {
|
|
171
|
-
category: {
|
|
172
|
-
allowRecursiveDelete: false,
|
|
173
|
-
},
|
|
174
|
-
},
|
|
175
|
-
db: {
|
|
176
|
-
schemaNamingConvention: {
|
|
177
|
-
tableCaseStyle: 'pascalCase',
|
|
178
|
-
columnCaseStyle: 'camelCase',
|
|
179
|
-
},
|
|
180
|
-
},
|
|
181
|
-
debug: false,
|
|
182
|
-
strict: false,
|
|
183
|
-
};
|
|
184
|
-
/*const error = (error: string, greyMsg = ''): string => {
|
|
185
|
-
return `${chalk.bgRed.bold(' Error ')} ${error} ${greyMsg ? chalk.grey(greyMsg) : ''}`.trim()
|
|
186
|
-
}*/
|
|
187
|
-
let cachedConfig;
|
|
188
|
-
/**
|
|
189
|
-
* Loads and parses the user configuration module.
|
|
190
|
-
* This is called lazily when getCMSConfig() is first invoked.
|
|
191
|
-
*
|
|
192
|
-
* @returns The parsed user configuration object, or undefined if no config file exists
|
|
193
|
-
* @throws Error if the config file exists but cannot be loaded or parsed
|
|
194
|
-
*/
|
|
195
|
-
function loadUserConfig() {
|
|
196
|
-
try {
|
|
197
|
-
const mod = loadConfigModule();
|
|
198
|
-
const config = mod ? (mod.config ?? mod) : undefined;
|
|
199
|
-
if (!config) {
|
|
200
|
-
return undefined;
|
|
201
|
-
}
|
|
202
|
-
// Parse and validate the user config
|
|
203
|
-
return cmsConfigSchema.parse(config);
|
|
204
|
-
}
|
|
205
|
-
catch (error) {
|
|
206
|
-
// If config file doesn't exist, return undefined to use defaults
|
|
207
|
-
// Otherwise, re-throw the error as it's a real problem
|
|
208
|
-
if (error instanceof Error && error.message.includes('Config file not found')) {
|
|
209
|
-
return undefined;
|
|
210
|
-
}
|
|
211
|
-
throw error;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Gets the CMS configuration, loading it lazily on first access.
|
|
216
|
-
* The configuration is cached after the first load for performance.
|
|
217
|
-
*
|
|
218
|
-
* @returns A readonly computed CMS configuration with all required fields
|
|
219
|
-
* @throws Error if the config file exists but is invalid
|
|
220
|
-
*/
|
|
221
|
-
export function getCMSConfig() {
|
|
222
|
-
if (cachedConfig === undefined) {
|
|
223
|
-
// Load user config lazily (only when this function is first called)
|
|
224
|
-
const userConfig = loadUserConfig();
|
|
225
|
-
// Merge user config with defaults
|
|
226
|
-
const mergedConfig = mergeConfig(defaultConfig, userConfig ?? {});
|
|
227
|
-
cachedConfig = mergedConfig;
|
|
228
|
-
}
|
|
229
|
-
return cachedConfig;
|
|
230
|
-
}
|
|
1
|
+
if (typeof window !== 'undefined') {
|
|
2
|
+
throw new Error('This module can only run on the server');
|
|
3
|
+
}
|
|
4
|
+
// import 'server-only'
|
|
5
|
+
// import chalk from 'chalk'
|
|
6
|
+
import * as z from 'zod';
|
|
7
|
+
import { loadConfigModule } from './loader.js';
|
|
8
|
+
// 1. Define config schema
|
|
9
|
+
const cmsConfigSchema = z.object({
|
|
10
|
+
/**
|
|
11
|
+
* The folder where the sections are located
|
|
12
|
+
*/
|
|
13
|
+
sectionsFolder: z.string().optional(),
|
|
14
|
+
api: z
|
|
15
|
+
.object({
|
|
16
|
+
/**
|
|
17
|
+
* The base URL of the cms
|
|
18
|
+
*/
|
|
19
|
+
baseUrl: z.string(),
|
|
20
|
+
})
|
|
21
|
+
.optional(),
|
|
22
|
+
/**
|
|
23
|
+
* The name of the site
|
|
24
|
+
*/
|
|
25
|
+
siteName: z.string().optional(),
|
|
26
|
+
theme: z.string().optional(),
|
|
27
|
+
/**
|
|
28
|
+
* Files configuration
|
|
29
|
+
*/
|
|
30
|
+
files: z
|
|
31
|
+
.object({
|
|
32
|
+
/**
|
|
33
|
+
* Upload configuration
|
|
34
|
+
*/
|
|
35
|
+
upload: z.object({
|
|
36
|
+
/**
|
|
37
|
+
* The path where the files are uploaded
|
|
38
|
+
*/
|
|
39
|
+
uploadPath: z.string(),
|
|
40
|
+
/**
|
|
41
|
+
* Whether to keep the file extension
|
|
42
|
+
*/
|
|
43
|
+
keepFileExtension: z.boolean(),
|
|
44
|
+
}),
|
|
45
|
+
/**
|
|
46
|
+
* Images configuration
|
|
47
|
+
*/
|
|
48
|
+
images: z
|
|
49
|
+
.object({
|
|
50
|
+
/**
|
|
51
|
+
* Global images thumbnail configuration
|
|
52
|
+
*/
|
|
53
|
+
thumbnail: z
|
|
54
|
+
.object({
|
|
55
|
+
width: z.number(),
|
|
56
|
+
height: z.number(),
|
|
57
|
+
crop: z.boolean(),
|
|
58
|
+
quality: z.number().optional(),
|
|
59
|
+
})
|
|
60
|
+
.optional(),
|
|
61
|
+
/**
|
|
62
|
+
* Global images watermark configuration
|
|
63
|
+
*/
|
|
64
|
+
watermark: z.boolean().optional(),
|
|
65
|
+
})
|
|
66
|
+
.optional(),
|
|
67
|
+
})
|
|
68
|
+
.optional(),
|
|
69
|
+
sections: z
|
|
70
|
+
.object({
|
|
71
|
+
category: z.object({
|
|
72
|
+
/**
|
|
73
|
+
* Whether to allow recursive deletion
|
|
74
|
+
*/
|
|
75
|
+
allowRecursiveDelete: z.boolean(),
|
|
76
|
+
}),
|
|
77
|
+
})
|
|
78
|
+
.optional(),
|
|
79
|
+
/**
|
|
80
|
+
* Database configuration
|
|
81
|
+
*/
|
|
82
|
+
db: z
|
|
83
|
+
.object({
|
|
84
|
+
schemaNamingConvention: z
|
|
85
|
+
.object({
|
|
86
|
+
/**
|
|
87
|
+
* The case style of the table name
|
|
88
|
+
*/
|
|
89
|
+
tableCaseStyle: z.enum(['camelCase', 'snakeCase', 'pascalCase']).optional(),
|
|
90
|
+
/**
|
|
91
|
+
* The case style of the column name
|
|
92
|
+
*/
|
|
93
|
+
columnCaseStyle: z.enum(['camelCase', 'snakeCase', 'pascalCase']).optional(),
|
|
94
|
+
})
|
|
95
|
+
.optional(),
|
|
96
|
+
})
|
|
97
|
+
.optional(),
|
|
98
|
+
debug: z.boolean().optional(),
|
|
99
|
+
/**
|
|
100
|
+
* Whether to enable strict mode.
|
|
101
|
+
* @default false
|
|
102
|
+
*/
|
|
103
|
+
strict: z.boolean().optional(),
|
|
104
|
+
});
|
|
105
|
+
// Merge utility function
|
|
106
|
+
function mergeConfig(defaults, userConfig) {
|
|
107
|
+
return {
|
|
108
|
+
sectionsFolder: userConfig.sectionsFolder ?? defaults.sectionsFolder,
|
|
109
|
+
siteName: userConfig.siteName ?? defaults.siteName,
|
|
110
|
+
strict: userConfig.strict ?? defaults.strict,
|
|
111
|
+
api: {
|
|
112
|
+
baseUrl: userConfig.api?.baseUrl ?? defaults.api.baseUrl,
|
|
113
|
+
},
|
|
114
|
+
theme: userConfig.theme ?? defaults.theme,
|
|
115
|
+
files: {
|
|
116
|
+
upload: {
|
|
117
|
+
uploadPath: userConfig.files?.upload?.uploadPath ?? defaults.files.upload.uploadPath,
|
|
118
|
+
keepFileExtension: userConfig.files?.upload?.keepFileExtension ?? defaults.files.upload.keepFileExtension,
|
|
119
|
+
},
|
|
120
|
+
images: {
|
|
121
|
+
thumbnail: {
|
|
122
|
+
width: userConfig.files?.images?.thumbnail?.width ?? defaults.files.images.thumbnail.width,
|
|
123
|
+
height: userConfig.files?.images?.thumbnail?.height ?? defaults.files.images.thumbnail.height,
|
|
124
|
+
crop: userConfig.files?.images?.thumbnail?.crop ?? defaults.files.images.thumbnail.crop,
|
|
125
|
+
quality: userConfig.files?.images?.thumbnail?.quality ?? defaults.files.images.thumbnail.quality,
|
|
126
|
+
},
|
|
127
|
+
watermark: userConfig.files?.images?.watermark ?? defaults.files.images.watermark,
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
sections: {
|
|
131
|
+
category: {
|
|
132
|
+
allowRecursiveDelete: userConfig.sections?.category?.allowRecursiveDelete ??
|
|
133
|
+
defaults.sections.category.allowRecursiveDelete,
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
db: {
|
|
137
|
+
schemaNamingConvention: {
|
|
138
|
+
tableCaseStyle: userConfig.db?.schemaNamingConvention?.tableCaseStyle ??
|
|
139
|
+
defaults.db.schemaNamingConvention.tableCaseStyle,
|
|
140
|
+
columnCaseStyle: userConfig.db?.schemaNamingConvention?.columnCaseStyle ??
|
|
141
|
+
defaults.db.schemaNamingConvention.columnCaseStyle,
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
debug: userConfig.debug ?? defaults.debug,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// Default configuration values
|
|
148
|
+
const defaultConfig = {
|
|
149
|
+
sectionsFolder: 'sections',
|
|
150
|
+
siteName: 'LZ CMS Admin',
|
|
151
|
+
api: {
|
|
152
|
+
baseUrl: '/api',
|
|
153
|
+
},
|
|
154
|
+
theme: 'dark',
|
|
155
|
+
files: {
|
|
156
|
+
upload: {
|
|
157
|
+
uploadPath: './public/content',
|
|
158
|
+
keepFileExtension: true,
|
|
159
|
+
},
|
|
160
|
+
images: {
|
|
161
|
+
thumbnail: {
|
|
162
|
+
width: 200,
|
|
163
|
+
height: 200,
|
|
164
|
+
crop: false,
|
|
165
|
+
quality: 80,
|
|
166
|
+
},
|
|
167
|
+
watermark: false,
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
sections: {
|
|
171
|
+
category: {
|
|
172
|
+
allowRecursiveDelete: false,
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
db: {
|
|
176
|
+
schemaNamingConvention: {
|
|
177
|
+
tableCaseStyle: 'pascalCase',
|
|
178
|
+
columnCaseStyle: 'camelCase',
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
debug: false,
|
|
182
|
+
strict: false,
|
|
183
|
+
};
|
|
184
|
+
/*const error = (error: string, greyMsg = ''): string => {
|
|
185
|
+
return `${chalk.bgRed.bold(' Error ')} ${error} ${greyMsg ? chalk.grey(greyMsg) : ''}`.trim()
|
|
186
|
+
}*/
|
|
187
|
+
let cachedConfig;
|
|
188
|
+
/**
|
|
189
|
+
* Loads and parses the user configuration module.
|
|
190
|
+
* This is called lazily when getCMSConfig() is first invoked.
|
|
191
|
+
*
|
|
192
|
+
* @returns The parsed user configuration object, or undefined if no config file exists
|
|
193
|
+
* @throws Error if the config file exists but cannot be loaded or parsed
|
|
194
|
+
*/
|
|
195
|
+
function loadUserConfig() {
|
|
196
|
+
try {
|
|
197
|
+
const mod = loadConfigModule();
|
|
198
|
+
const config = mod ? (mod.config ?? mod) : undefined;
|
|
199
|
+
if (!config) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
// Parse and validate the user config
|
|
203
|
+
return cmsConfigSchema.parse(config);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
// If config file doesn't exist, return undefined to use defaults
|
|
207
|
+
// Otherwise, re-throw the error as it's a real problem
|
|
208
|
+
if (error instanceof Error && error.message.includes('Config file not found')) {
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Gets the CMS configuration, loading it lazily on first access.
|
|
216
|
+
* The configuration is cached after the first load for performance.
|
|
217
|
+
*
|
|
218
|
+
* @returns A readonly computed CMS configuration with all required fields
|
|
219
|
+
* @throws Error if the config file exists but is invalid
|
|
220
|
+
*/
|
|
221
|
+
export function getCMSConfig() {
|
|
222
|
+
if (cachedConfig === undefined) {
|
|
223
|
+
// Load user config lazily (only when this function is first called)
|
|
224
|
+
const userConfig = loadUserConfig();
|
|
225
|
+
// Merge user config with defaults
|
|
226
|
+
const mergedConfig = mergeConfig(defaultConfig, userConfig ?? {});
|
|
227
|
+
cachedConfig = mergedConfig;
|
|
228
|
+
}
|
|
229
|
+
return cachedConfig;
|
|
230
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { getCMSConfig } from
|
|
2
|
-
export type { CMSConfig } from
|
|
1
|
+
export { getCMSConfig } from './config-loader.js';
|
|
2
|
+
export type { CMSConfig } from './config-loader.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { getCMSConfig } from
|
|
1
|
+
export { getCMSConfig } from './config-loader.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const loadConfigModule: () => unknown;
|
|
1
|
+
export declare const loadConfigModule: () => unknown;
|
|
2
2
|
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import { existsSync } from 'fs';
|
|
2
|
-
import { resolve, join } from 'path';
|
|
3
|
-
// Keep bundlers from statically analyzing these requires
|
|
4
|
-
const safeRequire = (id) => {
|
|
5
|
-
const req = eval('require');
|
|
6
|
-
return req(id);
|
|
7
|
-
};
|
|
8
|
-
export const loadConfigModule = () => {
|
|
9
|
-
const cwd = process.cwd();
|
|
10
|
-
const candidates = [
|
|
11
|
-
'lz.config.js',
|
|
12
|
-
'lz.config.cjs',
|
|
13
|
-
'lz.config.mjs',
|
|
14
|
-
'lz.config.json',
|
|
15
|
-
'lz.config.ts',
|
|
16
|
-
'lz.config.cts',
|
|
17
|
-
'lz.config.mts',
|
|
18
|
-
].map((f) => resolve(join(cwd, f)));
|
|
19
|
-
const found = candidates.find((p) => existsSync(p));
|
|
20
|
-
if (!found) {
|
|
21
|
-
throw new Error(`Config file not found. Searched: ${candidates.join(', ')}`);
|
|
22
|
-
}
|
|
23
|
-
const isTs = found.endsWith('.ts') || found.endsWith('.cts') || found.endsWith('.mts');
|
|
24
|
-
let unregister;
|
|
25
|
-
try {
|
|
26
|
-
if (isTs) {
|
|
27
|
-
try {
|
|
28
|
-
const { register } = safeRequire('esbuild-register/dist/node');
|
|
29
|
-
unregister = register({ format: 'cjs', loader: 'ts' }).unregister;
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
throw new Error(`Unable to load TypeScript config '${found}'. Install 'esbuild-register' in nextjs-cms/cms, or provide lz.config.js/json.`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
const mod = safeRequire(found);
|
|
36
|
-
unregister?.();
|
|
37
|
-
return mod.default ?? mod;
|
|
38
|
-
}
|
|
39
|
-
finally {
|
|
40
|
-
unregister?.();
|
|
41
|
-
}
|
|
42
|
-
};
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { resolve, join } from 'path';
|
|
3
|
+
// Keep bundlers from statically analyzing these requires
|
|
4
|
+
const safeRequire = (id) => {
|
|
5
|
+
const req = eval('require');
|
|
6
|
+
return req(id);
|
|
7
|
+
};
|
|
8
|
+
export const loadConfigModule = () => {
|
|
9
|
+
const cwd = process.cwd();
|
|
10
|
+
const candidates = [
|
|
11
|
+
'lz.config.js',
|
|
12
|
+
'lz.config.cjs',
|
|
13
|
+
'lz.config.mjs',
|
|
14
|
+
'lz.config.json',
|
|
15
|
+
'lz.config.ts',
|
|
16
|
+
'lz.config.cts',
|
|
17
|
+
'lz.config.mts',
|
|
18
|
+
].map((f) => resolve(join(cwd, f)));
|
|
19
|
+
const found = candidates.find((p) => existsSync(p));
|
|
20
|
+
if (!found) {
|
|
21
|
+
throw new Error(`Config file not found. Searched: ${candidates.join(', ')}`);
|
|
22
|
+
}
|
|
23
|
+
const isTs = found.endsWith('.ts') || found.endsWith('.cts') || found.endsWith('.mts');
|
|
24
|
+
let unregister;
|
|
25
|
+
try {
|
|
26
|
+
if (isTs) {
|
|
27
|
+
try {
|
|
28
|
+
const { register } = safeRequire('esbuild-register/dist/node');
|
|
29
|
+
unregister = register({ format: 'cjs', loader: 'ts' }).unregister;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
throw new Error(`Unable to load TypeScript config '${found}'. Install 'esbuild-register' in nextjs-cms/cms, or provide lz.config.js/json.`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const mod = safeRequire(found);
|
|
36
|
+
unregister?.();
|
|
37
|
+
return mod.default ?? mod;
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
unregister?.();
|
|
41
|
+
}
|
|
42
|
+
};
|
package/dist/core/db/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { MysqlTableChecker } from
|
|
1
|
+
export { MysqlTableChecker } from './table-checker/index.js';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
|
package/dist/core/db/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { MysqlTableChecker } from
|
|
1
|
+
export { MysqlTableChecker } from './table-checker/index.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base class for table information
|
|
3
|
-
*/
|
|
4
|
-
export declare abstract class DbTableChecker {
|
|
5
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Base class for table information
|
|
3
|
+
*/
|
|
4
|
+
export declare abstract class DbTableChecker {
|
|
5
|
+
}
|
|
6
6
|
//# sourceMappingURL=DbTable.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base class for table information
|
|
3
|
-
*/
|
|
4
|
-
export class DbTableChecker {
|
|
5
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Base class for table information
|
|
3
|
+
*/
|
|
4
|
+
export class DbTableChecker {
|
|
5
|
+
}
|