nextjs-cms 0.5.20 → 0.5.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -10
- package/dist/api/lib/serverActions.js +1 -1
- package/dist/api/routers/accountSettings.js +1 -1
- package/dist/api/routers/admins.js +2 -2
- package/dist/api/routers/gallery.js +1 -1
- package/dist/auth/lib/actions.js +1 -1
- package/dist/core/config/config-loader.d.ts +58 -48
- package/dist/core/config/config-loader.d.ts.map +1 -1
- package/dist/core/config/config-loader.js +137 -85
- package/dist/core/config/index.d.ts +1 -1
- package/dist/core/config/index.d.ts.map +1 -1
- package/dist/core/config/loader.d.ts.map +1 -1
- package/dist/core/config/loader.js +36 -1
- package/dist/core/factories/FieldFactory.d.ts +2 -1
- package/dist/core/factories/FieldFactory.d.ts.map +1 -1
- package/dist/core/factories/FieldFactory.js +4 -3
- package/dist/core/factories/SectionFactory.d.ts.map +1 -1
- package/dist/core/factories/SectionFactory.js +48 -10
- package/dist/core/fields/document.d.ts.map +1 -1
- package/dist/core/fields/document.js +1 -1
- package/dist/core/fields/password.js +1 -1
- package/dist/core/fields/photo.d.ts.map +1 -1
- package/dist/core/fields/photo.js +2 -2
- package/dist/core/fields/richText.d.ts.map +1 -1
- package/dist/core/fields/richText.js +1 -1
- package/dist/core/fields/select.d.ts +2 -2
- package/dist/core/fields/select.d.ts.map +1 -1
- package/dist/core/fields/select.js +19 -8
- package/dist/core/fields/selectMultiple.d.ts +2 -2
- package/dist/core/fields/selectMultiple.d.ts.map +1 -1
- package/dist/core/fields/selectMultiple.js +13 -6
- package/dist/core/fields/video.d.ts.map +1 -1
- package/dist/core/fields/video.js +1 -1
- package/dist/core/sections/section.js +2 -2
- package/dist/utils/constants.d.ts.map +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -37,19 +37,21 @@ Create a `cms.config.ts` file in your project root:
|
|
|
37
37
|
import { CMSConfig } from 'nextjs-cms/core/config'
|
|
38
38
|
|
|
39
39
|
export default {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
ui: {
|
|
41
|
+
title: 'My CMS Site',
|
|
42
|
+
defaultTheme: 'dark',
|
|
43
|
+
logo: '/logo.svg'
|
|
44
44
|
},
|
|
45
|
-
|
|
45
|
+
sections: {
|
|
46
|
+
path: './sections',
|
|
47
|
+
strict: false,
|
|
48
|
+
category: { allowRecursiveDelete: false }
|
|
49
|
+
},
|
|
50
|
+
media: {
|
|
46
51
|
upload: {
|
|
47
|
-
|
|
48
|
-
|
|
52
|
+
path: './public/uploads',
|
|
53
|
+
preserveExtension: true
|
|
49
54
|
}
|
|
50
|
-
},
|
|
51
|
-
database: {
|
|
52
|
-
url: process.env.DATABASE_URL
|
|
53
55
|
}
|
|
54
56
|
} satisfies CMSConfig
|
|
55
57
|
```
|
|
@@ -14,7 +14,7 @@ import { readChunk } from 'read-chunk';
|
|
|
14
14
|
import { fileTypeFromBuffer } from 'file-type';
|
|
15
15
|
import { getCMSConfig } from '../../core/config/index.js';
|
|
16
16
|
import through2 from 'through2';
|
|
17
|
-
const uploadsFolder = getCMSConfig().
|
|
17
|
+
const uploadsFolder = getCMSConfig().media.upload.path;
|
|
18
18
|
export const getDocument = async (session, input) => {
|
|
19
19
|
const { name, sectionName, fieldName } = input;
|
|
20
20
|
// Sanitize the inputs
|
|
@@ -3,7 +3,7 @@ import { db } from '../../db/client.js';
|
|
|
3
3
|
import { AdminsTable } from '../../db/schema.js';
|
|
4
4
|
import { eq } from 'drizzle-orm';
|
|
5
5
|
import * as z from 'zod';
|
|
6
|
-
import bcrypt from '
|
|
6
|
+
import bcrypt from 'bcryptjs';
|
|
7
7
|
import { TRPCError } from '@trpc/server';
|
|
8
8
|
export const accountSettings = router({
|
|
9
9
|
get: privateProcedure.query(async ({ ctx }) => {
|
|
@@ -5,7 +5,7 @@ import { db } from '../../db/client.js';
|
|
|
5
5
|
import { AdminPrivilegesTable, AdminsTable } from '../../db/schema.js';
|
|
6
6
|
import { eq } from 'drizzle-orm';
|
|
7
7
|
import { TRPCError } from '@trpc/server';
|
|
8
|
-
import bcrypt from '
|
|
8
|
+
import bcrypt from 'bcryptjs';
|
|
9
9
|
import { customAlphabet } from 'nanoid';
|
|
10
10
|
import getString from '../../translations/index.js';
|
|
11
11
|
import path from 'path';
|
|
@@ -179,7 +179,7 @@ export const adminsRouter = router({
|
|
|
179
179
|
id: z.string(),
|
|
180
180
|
}))
|
|
181
181
|
.mutation(async ({ input }) => {
|
|
182
|
-
const uploadsFolder = getCMSConfig().
|
|
182
|
+
const uploadsFolder = getCMSConfig().media.upload.path;
|
|
183
183
|
/**
|
|
184
184
|
* Check if the admin is not the master admin
|
|
185
185
|
*/
|
|
@@ -17,7 +17,7 @@ export const galleryRouter = router({
|
|
|
17
17
|
referenceId: z.string(),
|
|
18
18
|
}))
|
|
19
19
|
.mutation(async ({ ctx, input }) => {
|
|
20
|
-
const uploadsFolder = getCMSConfig().
|
|
20
|
+
const uploadsFolder = getCMSConfig().media.upload.path;
|
|
21
21
|
/**
|
|
22
22
|
* Get the section information
|
|
23
23
|
*/
|
package/dist/auth/lib/actions.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { db } from '../../db/client.js';
|
|
2
2
|
import { AccessTokensTable, AdminsTable } from '../../db/schema.js';
|
|
3
3
|
import { and, eq } from 'drizzle-orm';
|
|
4
|
-
import bcrypt from '
|
|
4
|
+
import bcrypt from 'bcryptjs';
|
|
5
5
|
import { decodeRefreshToken, encodeJWT, encodeRefreshToken } from '../jwt.js';
|
|
6
6
|
import { cookies } from 'next/headers';
|
|
7
7
|
export const authRefresh = async (refreshToken) => {
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
declare const cmsConfigSchema: z.ZodObject<{
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
ui: z.ZodOptional<z.ZodObject<{
|
|
4
|
+
title: z.ZodOptional<z.ZodString>;
|
|
5
|
+
defaultTheme: z.ZodOptional<z.ZodString>;
|
|
6
|
+
logo: z.ZodOptional<z.ZodString>;
|
|
6
7
|
}, z.core.$strip>>;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}, z.core.$strip
|
|
8
|
+
debug: z.ZodOptional<z.ZodBoolean>;
|
|
9
|
+
sections: z.ZodOptional<z.ZodObject<{
|
|
10
|
+
path: z.ZodOptional<z.ZodString>;
|
|
11
|
+
strict: z.ZodOptional<z.ZodBoolean>;
|
|
12
|
+
category: z.ZodOptional<z.ZodObject<{
|
|
13
|
+
allowRecursiveDelete: z.ZodBoolean;
|
|
14
|
+
}, z.core.$strip>>;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
media: z.ZodOptional<z.ZodObject<{
|
|
17
|
+
upload: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
path: z.ZodString;
|
|
19
|
+
preserveExtension: z.ZodBoolean;
|
|
20
|
+
}, z.core.$strip>>;
|
|
14
21
|
images: z.ZodOptional<z.ZodObject<{
|
|
15
22
|
thumbnail: z.ZodOptional<z.ZodObject<{
|
|
16
23
|
width: z.ZodNumber;
|
|
@@ -21,40 +28,45 @@ declare const cmsConfigSchema: z.ZodObject<{
|
|
|
21
28
|
watermark: z.ZodOptional<z.ZodBoolean>;
|
|
22
29
|
}, z.core.$strip>>;
|
|
23
30
|
}, z.core.$strip>>;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}>>;
|
|
31
|
+
schemaGeneration: z.ZodOptional<z.ZodObject<{
|
|
32
|
+
drizzle: z.ZodOptional<z.ZodObject<{
|
|
33
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
34
|
+
outDir: z.ZodOptional<z.ZodString>;
|
|
35
|
+
fileName: z.ZodOptional<z.ZodString>;
|
|
36
|
+
naming: z.ZodOptional<z.ZodObject<{
|
|
37
|
+
tables: z.ZodOptional<z.ZodEnum<{
|
|
38
|
+
camelCase: "camelCase";
|
|
39
|
+
snakeCase: "snakeCase";
|
|
40
|
+
pascalCase: "pascalCase";
|
|
41
|
+
}>>;
|
|
42
|
+
columns: z.ZodOptional<z.ZodEnum<{
|
|
43
|
+
camelCase: "camelCase";
|
|
44
|
+
snakeCase: "snakeCase";
|
|
45
|
+
pascalCase: "pascalCase";
|
|
46
|
+
}>>;
|
|
47
|
+
}, z.core.$strip>>;
|
|
41
48
|
}, z.core.$strip>>;
|
|
42
49
|
}, z.core.$strip>>;
|
|
43
|
-
debug: z.ZodOptional<z.ZodBoolean>;
|
|
44
|
-
strict: z.ZodOptional<z.ZodBoolean>;
|
|
45
50
|
}, z.core.$strip>;
|
|
46
51
|
export type CMSConfig = z.infer<typeof cmsConfigSchema>;
|
|
47
52
|
export interface ComputedCMSConfig {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
ui: {
|
|
54
|
+
title: string;
|
|
55
|
+
defaultTheme: string;
|
|
56
|
+
logo: string;
|
|
57
|
+
};
|
|
58
|
+
debug: boolean;
|
|
59
|
+
sections: {
|
|
60
|
+
path: string;
|
|
61
|
+
strict: boolean;
|
|
62
|
+
category: {
|
|
63
|
+
allowRecursiveDelete: boolean;
|
|
64
|
+
};
|
|
51
65
|
};
|
|
52
|
-
|
|
53
|
-
theme: string;
|
|
54
|
-
files: {
|
|
66
|
+
media: {
|
|
55
67
|
upload: {
|
|
56
|
-
|
|
57
|
-
|
|
68
|
+
path: string;
|
|
69
|
+
preserveExtension: boolean;
|
|
58
70
|
};
|
|
59
71
|
images: {
|
|
60
72
|
thumbnail: {
|
|
@@ -66,19 +78,17 @@ export interface ComputedCMSConfig {
|
|
|
66
78
|
watermark: boolean;
|
|
67
79
|
};
|
|
68
80
|
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
81
|
+
schemaGeneration: {
|
|
82
|
+
drizzle: {
|
|
83
|
+
enabled: boolean;
|
|
84
|
+
outDir: string;
|
|
85
|
+
fileName: string;
|
|
86
|
+
naming: {
|
|
87
|
+
tables: 'camelCase' | 'snakeCase' | 'pascalCase';
|
|
88
|
+
columns: 'camelCase' | 'snakeCase' | 'pascalCase';
|
|
89
|
+
};
|
|
78
90
|
};
|
|
79
91
|
};
|
|
80
|
-
debug: boolean;
|
|
81
|
-
strict: boolean;
|
|
82
92
|
}
|
|
83
93
|
/**
|
|
84
94
|
* Gets the CMS configuration, loading it lazily on first access.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/config-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAIxB,QAAA,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/config-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAIxB,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+InB,CAAA;AAGF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAGvD,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE;QACA,KAAK,EAAE,MAAM,CAAA;QACb,YAAY,EAAE,MAAM,CAAA;QACpB,IAAI,EAAE,MAAM,CAAA;KACf,CAAA;IACD,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,OAAO,CAAA;QACf,QAAQ,EAAE;YACN,oBAAoB,EAAE,OAAO,CAAA;SAChC,CAAA;KACJ,CAAA;IACD,KAAK,EAAE;QACH,MAAM,EAAE;YACJ,IAAI,EAAE,MAAM,CAAA;YACZ,iBAAiB,EAAE,OAAO,CAAA;SAC7B,CAAA;QACD,MAAM,EAAE;YACJ,SAAS,EAAE;gBACP,KAAK,EAAE,MAAM,CAAA;gBACb,MAAM,EAAE,MAAM,CAAA;gBACd,IAAI,EAAE,OAAO,CAAA;gBACb,OAAO,EAAE,MAAM,CAAA;aAClB,CAAA;YACD,SAAS,EAAE,OAAO,CAAA;SACrB,CAAA;KACJ,CAAA;IACD,gBAAgB,EAAE;QACd,OAAO,EAAE;YACL,OAAO,EAAE,OAAO,CAAA;YAChB,MAAM,EAAE,MAAM,CAAA;YACd,QAAQ,EAAE,MAAM,CAAA;YAChB,MAAM,EAAE;gBACJ,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAA;gBAChD,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAA;aACpD,CAAA;SACJ,CAAA;KACJ,CAAA;CACJ;AAmID;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAW1D"}
|
|
@@ -8,40 +8,76 @@ import { loadConfigModule } from './loader.js';
|
|
|
8
8
|
// 1. Define config schema
|
|
9
9
|
const cmsConfigSchema = z.object({
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* UI configuration for the admin panel
|
|
12
12
|
*/
|
|
13
|
-
|
|
14
|
-
api: z
|
|
13
|
+
ui: z
|
|
15
14
|
.object({
|
|
16
15
|
/**
|
|
17
|
-
* The
|
|
16
|
+
* The title displayed in the admin UI
|
|
18
17
|
*/
|
|
19
|
-
|
|
18
|
+
title: z.string().optional(),
|
|
19
|
+
/**
|
|
20
|
+
* The default theme for the admin UI
|
|
21
|
+
*/
|
|
22
|
+
defaultTheme: z.string().optional(),
|
|
23
|
+
/**
|
|
24
|
+
* Path to the logo image (relative to public folder)
|
|
25
|
+
*/
|
|
26
|
+
logo: z.string().optional(),
|
|
20
27
|
})
|
|
21
28
|
.optional(),
|
|
22
29
|
/**
|
|
23
|
-
*
|
|
30
|
+
* Enable debug logging
|
|
31
|
+
*/
|
|
32
|
+
debug: z.boolean().optional(),
|
|
33
|
+
/**
|
|
34
|
+
* Sections configuration
|
|
24
35
|
*/
|
|
25
|
-
|
|
26
|
-
|
|
36
|
+
sections: z
|
|
37
|
+
.object({
|
|
38
|
+
/**
|
|
39
|
+
* The folder path where sections are located
|
|
40
|
+
*/
|
|
41
|
+
path: z.string().optional(),
|
|
42
|
+
/**
|
|
43
|
+
* Whether to enable strict mode for section loading.
|
|
44
|
+
* When true, any section loading error will prevent all sections from loading.
|
|
45
|
+
* @default false
|
|
46
|
+
*/
|
|
47
|
+
strict: z.boolean().optional(),
|
|
48
|
+
/**
|
|
49
|
+
* Category section configuration
|
|
50
|
+
*/
|
|
51
|
+
category: z
|
|
52
|
+
.object({
|
|
53
|
+
/**
|
|
54
|
+
* Whether to allow recursive deletion
|
|
55
|
+
*/
|
|
56
|
+
allowRecursiveDelete: z.boolean(),
|
|
57
|
+
})
|
|
58
|
+
.optional(),
|
|
59
|
+
})
|
|
60
|
+
.optional(),
|
|
27
61
|
/**
|
|
28
|
-
*
|
|
62
|
+
* Media configuration (uploads, images)
|
|
29
63
|
*/
|
|
30
|
-
|
|
64
|
+
media: z
|
|
31
65
|
.object({
|
|
32
66
|
/**
|
|
33
67
|
* Upload configuration
|
|
34
68
|
*/
|
|
35
|
-
upload: z
|
|
69
|
+
upload: z
|
|
70
|
+
.object({
|
|
36
71
|
/**
|
|
37
|
-
* The path where
|
|
72
|
+
* The path where files are uploaded
|
|
38
73
|
*/
|
|
39
|
-
|
|
74
|
+
path: z.string(),
|
|
40
75
|
/**
|
|
41
|
-
* Whether to
|
|
76
|
+
* Whether to preserve the file extension
|
|
42
77
|
*/
|
|
43
|
-
|
|
44
|
-
})
|
|
78
|
+
preserveExtension: z.boolean(),
|
|
79
|
+
})
|
|
80
|
+
.optional(),
|
|
45
81
|
/**
|
|
46
82
|
* Images configuration
|
|
47
83
|
*/
|
|
@@ -66,96 +102,114 @@ const cmsConfigSchema = z.object({
|
|
|
66
102
|
.optional(),
|
|
67
103
|
})
|
|
68
104
|
.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
105
|
/**
|
|
80
|
-
*
|
|
106
|
+
* Schema generation configuration
|
|
81
107
|
*/
|
|
82
|
-
|
|
108
|
+
schemaGeneration: z
|
|
83
109
|
.object({
|
|
84
|
-
|
|
110
|
+
/**
|
|
111
|
+
* Drizzle schema generation configuration
|
|
112
|
+
*/
|
|
113
|
+
drizzle: z
|
|
85
114
|
.object({
|
|
86
115
|
/**
|
|
87
|
-
*
|
|
116
|
+
* Whether schema generation is enabled
|
|
88
117
|
*/
|
|
89
|
-
|
|
118
|
+
enabled: z.boolean().optional(),
|
|
90
119
|
/**
|
|
91
|
-
*
|
|
120
|
+
* Output directory for generated schemas
|
|
92
121
|
*/
|
|
93
|
-
|
|
122
|
+
outDir: z.string().optional(),
|
|
123
|
+
/**
|
|
124
|
+
* Output file name
|
|
125
|
+
*/
|
|
126
|
+
fileName: z.string().optional(),
|
|
127
|
+
/**
|
|
128
|
+
* Naming conventions for generated schemas
|
|
129
|
+
*/
|
|
130
|
+
naming: z
|
|
131
|
+
.object({
|
|
132
|
+
/**
|
|
133
|
+
* The case style of the table name
|
|
134
|
+
*/
|
|
135
|
+
tables: z.enum(['camelCase', 'snakeCase', 'pascalCase']).optional(),
|
|
136
|
+
/**
|
|
137
|
+
* The case style of the column name
|
|
138
|
+
*/
|
|
139
|
+
columns: z.enum(['camelCase', 'snakeCase', 'pascalCase']).optional(),
|
|
140
|
+
})
|
|
141
|
+
.optional(),
|
|
94
142
|
})
|
|
95
143
|
.optional(),
|
|
96
144
|
})
|
|
97
145
|
.optional(),
|
|
98
|
-
debug: z.boolean().optional(),
|
|
99
|
-
/**
|
|
100
|
-
* Whether to enable strict mode.
|
|
101
|
-
* @default false
|
|
102
|
-
*/
|
|
103
|
-
strict: z.boolean().optional(),
|
|
104
146
|
});
|
|
105
147
|
// Merge utility function
|
|
106
148
|
function mergeConfig(defaults, userConfig) {
|
|
107
149
|
return {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
baseUrl: userConfig.api?.baseUrl ?? defaults.api.baseUrl,
|
|
150
|
+
ui: {
|
|
151
|
+
title: userConfig.ui?.title ?? defaults.ui.title,
|
|
152
|
+
defaultTheme: userConfig.ui?.defaultTheme ?? defaults.ui.defaultTheme,
|
|
153
|
+
logo: userConfig.ui?.logo ?? defaults.ui.logo,
|
|
113
154
|
},
|
|
114
|
-
|
|
115
|
-
|
|
155
|
+
debug: userConfig.debug ?? defaults.debug,
|
|
156
|
+
sections: {
|
|
157
|
+
path: userConfig.sections?.path ?? defaults.sections.path,
|
|
158
|
+
strict: userConfig.sections?.strict ?? defaults.sections.strict,
|
|
159
|
+
category: {
|
|
160
|
+
allowRecursiveDelete: userConfig.sections?.category?.allowRecursiveDelete ??
|
|
161
|
+
defaults.sections.category.allowRecursiveDelete,
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
media: {
|
|
116
165
|
upload: {
|
|
117
|
-
|
|
118
|
-
|
|
166
|
+
path: userConfig.media?.upload?.path ?? defaults.media.upload.path,
|
|
167
|
+
preserveExtension: userConfig.media?.upload?.preserveExtension ?? defaults.media.upload.preserveExtension,
|
|
119
168
|
},
|
|
120
169
|
images: {
|
|
121
170
|
thumbnail: {
|
|
122
|
-
width: userConfig.
|
|
123
|
-
height: userConfig.
|
|
124
|
-
crop: userConfig.
|
|
125
|
-
quality: userConfig.
|
|
171
|
+
width: userConfig.media?.images?.thumbnail?.width ?? defaults.media.images.thumbnail.width,
|
|
172
|
+
height: userConfig.media?.images?.thumbnail?.height ?? defaults.media.images.thumbnail.height,
|
|
173
|
+
crop: userConfig.media?.images?.thumbnail?.crop ?? defaults.media.images.thumbnail.crop,
|
|
174
|
+
quality: userConfig.media?.images?.thumbnail?.quality ?? defaults.media.images.thumbnail.quality,
|
|
126
175
|
},
|
|
127
|
-
watermark: userConfig.
|
|
176
|
+
watermark: userConfig.media?.images?.watermark ?? defaults.media.images.watermark,
|
|
128
177
|
},
|
|
129
178
|
},
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
defaults.db.schemaNamingConvention.columnCaseStyle,
|
|
179
|
+
schemaGeneration: {
|
|
180
|
+
drizzle: {
|
|
181
|
+
enabled: userConfig.schemaGeneration?.drizzle?.enabled ?? defaults.schemaGeneration.drizzle.enabled,
|
|
182
|
+
outDir: userConfig.schemaGeneration?.drizzle?.outDir ?? defaults.schemaGeneration.drizzle.outDir,
|
|
183
|
+
fileName: userConfig.schemaGeneration?.drizzle?.fileName ?? defaults.schemaGeneration.drizzle.fileName,
|
|
184
|
+
naming: {
|
|
185
|
+
tables: userConfig.schemaGeneration?.drizzle?.naming?.tables ??
|
|
186
|
+
defaults.schemaGeneration.drizzle.naming.tables,
|
|
187
|
+
columns: userConfig.schemaGeneration?.drizzle?.naming?.columns ??
|
|
188
|
+
defaults.schemaGeneration.drizzle.naming.columns,
|
|
189
|
+
},
|
|
142
190
|
},
|
|
143
191
|
},
|
|
144
|
-
debug: userConfig.debug ?? defaults.debug,
|
|
145
192
|
};
|
|
146
193
|
}
|
|
147
194
|
// Default configuration values
|
|
148
195
|
const defaultConfig = {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
196
|
+
ui: {
|
|
197
|
+
title: 'nextjs-cms',
|
|
198
|
+
defaultTheme: 'dark',
|
|
199
|
+
logo: '/logo.svg',
|
|
200
|
+
},
|
|
201
|
+
debug: false,
|
|
202
|
+
sections: {
|
|
203
|
+
path: 'sections',
|
|
204
|
+
strict: false,
|
|
205
|
+
category: {
|
|
206
|
+
allowRecursiveDelete: false,
|
|
207
|
+
},
|
|
153
208
|
},
|
|
154
|
-
|
|
155
|
-
files: {
|
|
209
|
+
media: {
|
|
156
210
|
upload: {
|
|
157
|
-
|
|
158
|
-
|
|
211
|
+
path: './public/content',
|
|
212
|
+
preserveExtension: true,
|
|
159
213
|
},
|
|
160
214
|
images: {
|
|
161
215
|
thumbnail: {
|
|
@@ -167,19 +221,17 @@ const defaultConfig = {
|
|
|
167
221
|
watermark: false,
|
|
168
222
|
},
|
|
169
223
|
},
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
224
|
+
schemaGeneration: {
|
|
225
|
+
drizzle: {
|
|
226
|
+
enabled: true,
|
|
227
|
+
outDir: './dynamic-schemas',
|
|
228
|
+
fileName: 'schema.ts',
|
|
229
|
+
naming: {
|
|
230
|
+
tables: 'pascalCase',
|
|
231
|
+
columns: 'camelCase',
|
|
232
|
+
},
|
|
179
233
|
},
|
|
180
234
|
},
|
|
181
|
-
debug: false,
|
|
182
|
-
strict: false,
|
|
183
235
|
};
|
|
184
236
|
/*const error = (error: string, greyMsg = ''): string => {
|
|
185
237
|
return `${chalk.bgRed.bold(' Error ')} ${error} ${greyMsg ? chalk.grey(greyMsg) : ''}`.trim()
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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,iBAAiB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"AAoCA,eAAO,MAAM,gBAAgB,QAAO,OA6CnC,CAAA"}
|
|
@@ -3,6 +3,37 @@ import { resolve, join } from 'path';
|
|
|
3
3
|
import { createRequire } from 'module';
|
|
4
4
|
// Create a require function that works in ES modules
|
|
5
5
|
const safeRequire = createRequire(import.meta.url);
|
|
6
|
+
/**
|
|
7
|
+
* See SectionFactory.ts: during dev/tests we may runtime-load TS that contains NodeNext-style `./x.js` specifiers
|
|
8
|
+
* pointing at `./x.ts` in the source tree. Patch CJS resolution to fall back to `.ts` for relative imports.
|
|
9
|
+
*/
|
|
10
|
+
const withPatchedCjsResolveJsToTs = (fn) => {
|
|
11
|
+
const NodeModule = safeRequire('module');
|
|
12
|
+
const originalResolve = NodeModule._resolveFilename;
|
|
13
|
+
NodeModule._resolveFilename = function (request, parent, isMain, options) {
|
|
14
|
+
try {
|
|
15
|
+
return originalResolve.call(this, request, parent, isMain, options);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
if (typeof request === 'string' && /^(\.{1,2}\/.*)\.js$/.test(request)) {
|
|
19
|
+
const tsRequest = request.replace(/\.js$/, '.ts');
|
|
20
|
+
try {
|
|
21
|
+
return originalResolve.call(this, tsRequest, parent, isMain, options);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// fall through to rethrow original error
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
throw err;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
try {
|
|
31
|
+
return fn();
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
NodeModule._resolveFilename = originalResolve;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
6
37
|
export const loadConfigModule = () => {
|
|
7
38
|
const cwd = process.cwd();
|
|
8
39
|
const candidates = [
|
|
@@ -30,7 +61,11 @@ export const loadConfigModule = () => {
|
|
|
30
61
|
throw new Error(`Unable to load TypeScript config '${found}'. Install 'esbuild-register', or provide lz.config.js/json.`);
|
|
31
62
|
}
|
|
32
63
|
}
|
|
33
|
-
const mod =
|
|
64
|
+
const mod = process.env.NODE_ENV === 'test'
|
|
65
|
+
? isTs
|
|
66
|
+
? withPatchedCjsResolveJsToTs(() => safeRequire(found))
|
|
67
|
+
: safeRequire(found)
|
|
68
|
+
: safeRequire(found);
|
|
34
69
|
unregister?.();
|
|
35
70
|
return mod.default ?? mod;
|
|
36
71
|
}
|
|
@@ -50,7 +50,8 @@ export declare class FieldFactory {
|
|
|
50
50
|
private getSectionInfo;
|
|
51
51
|
/**
|
|
52
52
|
* Prepare a field for use
|
|
53
|
-
* Fields are
|
|
53
|
+
* Fields are instances (resolved from configs), but they need to be built to initialize
|
|
54
|
+
* (e.g., fetch select options from database for db/section types)
|
|
54
55
|
* @param field
|
|
55
56
|
*/
|
|
56
57
|
private prepareField;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldFactory.d.ts","sourceRoot":"","sources":["../../../src/core/factories/FieldFactory.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,KAAK,eAAe,GACd;IACI,IAAI,EAAE,KAAK,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,KAAK,CAAA;CACjB,GACD;IACI,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B,CAAA;AAEP,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,aAAa,CAAa;IAClC,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAA;IAC9B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAA;IAC7B,OAAO,CAAC,YAAY,CAA4B;IAGhD;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAY;IAEjD;;OAEG;gBACS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,eAAe;IASnE;;OAEG;IACU,UAAU;YAUT,aAAa;YASb,qBAAqB;IAkEnC;;;;OAIG;YACW,qBAAqB;IAuCnC;;;;OAIG;YACW,cAAc;IAuB5B
|
|
1
|
+
{"version":3,"file":"FieldFactory.d.ts","sourceRoot":"","sources":["../../../src/core/factories/FieldFactory.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAIlD,KAAK,eAAe,GACd;IACI,IAAI,EAAE,KAAK,CAAA;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,KAAK,CAAA;CACjB,GACD;IACI,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B,CAAA;AAEP,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,aAAa,CAAa;IAClC,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAA;IAC9B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAA;IAC7B,OAAO,CAAC,YAAY,CAA4B;IAGhD;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAY;IAEjD;;OAEG;gBACS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,eAAe;IASnE;;OAEG;IACU,UAAU;YAUT,aAAa;YASb,qBAAqB;IAkEnC;;;;OAIG;YACW,qBAAqB;IAuCnC;;;;OAIG;YACW,cAAc;IAuB5B;;;;;OAKG;YACW,YAAY;IAiB1B,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACU,cAAc;IAqB3B;;;OAGG;IACH,OAAO,CAAC,UAAU;IA4ElB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;OAGG;IACI,gBAAgB;;;;;;;;;;;;;;;IAmEvB,IAAI,WAAW,IAAI,OAAO,GAAG,SAAS,CAErC;IACD,IAAI,YAAY,IAAI,MAAM,CAEzB;IACD,IAAI,KAAK,IAAI,OAAO,CAEnB;CACJ"}
|
|
@@ -177,12 +177,13 @@ export class FieldFactory {
|
|
|
177
177
|
}
|
|
178
178
|
/**
|
|
179
179
|
* Prepare a field for use
|
|
180
|
-
* Fields are
|
|
180
|
+
* Fields are instances (resolved from configs), but they need to be built to initialize
|
|
181
|
+
* (e.g., fetch select options from database for db/section types)
|
|
181
182
|
* @param field
|
|
182
183
|
*/
|
|
183
184
|
async prepareField(field) {
|
|
184
|
-
//
|
|
185
|
-
|
|
185
|
+
// Build the field to initialize it (e.g., fetch select options from DB)
|
|
186
|
+
await field.build();
|
|
186
187
|
if (this.type === 'edit') {
|
|
187
188
|
/**
|
|
188
189
|
* If it's an edit operation, get the value from the database and set it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SectionFactory.d.ts","sourceRoot":"","sources":["../../../src/core/factories/SectionFactory.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC7G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"SectionFactory.d.ts","sourceRoot":"","sources":["../../../src/core/factories/SectionFactory.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC7G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAoFrD,KAAK,gBAAgB,GAAG,qBAAqB,GAAG,mBAAmB,GAAG,qBAAqB,CAAA;AAY3F,qBAAa,cAAc;IACvB;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,aAAa,WAAiD;IAE9E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAwC;IACrE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAc;IAE5C,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAA+B;IACrE,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA+B;IACnE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAI;IAE7B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA2C;IAC5E,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAQ;IACxC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAQ;IAErC,MAAM,CAAC,aAAa,IAAI,IAAI;IAwB5B;;;;OAIG;WACU,WAAW,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI3F;;;;;OAKG;WACU,mBAAmB,CAAC,EAC7B,IAAI,EACJ,KAAK,GACR,EAAE;QACC,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAA;QACpC,KAAK,EAAE;YACH,EAAE,EAAE,MAAM,CAAA;YACV,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;SACjC,CAAA;KACJ,GAAG,OAAO,CAAC;QACR,MAAM,EAAE,mBAAmB,EAAE,CAAA;QAC7B,SAAS,EAAE,qBAAqB,EAAE,CAAA;QAClC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;QACjC,KAAK,EAAE,MAAM,EAAE,CAAA;KAClB,CAAC;IA+BF;;;;;OAKG;WACU,UAAU,CAAC,EACpB,IAAI,EACJ,IAAI,GACP,EAAE;QACC,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAA;KACvC,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAKpC;;;;;;OAMG;WACU,kBAAkB,CAAC,EAC5B,IAAI,EACJ,IAAI,EACJ,KAAK,GACR,EAAE;QACC,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAA;QACpC,KAAK,EAAE;YACH,EAAE,EAAE,MAAM,CAAA;YACV,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;SACjC,CAAA;KACJ,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAKpC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAClB,KAAK,EAAE,MAAM,eAAe,GAAG,aAAa,GAAG,eAAe,CAAA;QAC9D,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACrB,GAAG,eAAe,GAAG,aAAa,GAAG,eAAe;IAYrD;;;;;;;;;OASG;mBACkB,GAAG;IA6FxB;;;;OAIG;mBACkB,eAAe;IAuHpC,OAAO,CAAC,MAAM,CAAC,YAAY;IA+D3B,OAAO,CAAC,MAAM,CAAC,IAAI;CAatB"}
|
|
@@ -10,7 +10,7 @@ import { db } from '../../db/client.js';
|
|
|
10
10
|
import { AdminPrivilegesTable } from '../../db/schema.js';
|
|
11
11
|
import { getCMSConfig } from '../config/index.js';
|
|
12
12
|
const cmsConfig = getCMSConfig();
|
|
13
|
-
const hotMarkerFile = resolve(process.cwd(), 'components/form/helpers/_section-hot-reload.
|
|
13
|
+
const hotMarkerFile = resolve(process.cwd(), 'components/form/helpers/_section-hot-reload.js');
|
|
14
14
|
// Create a require function that works in ES modules
|
|
15
15
|
const safeRequire = createRequire(import.meta.url);
|
|
16
16
|
/**
|
|
@@ -18,6 +18,40 @@ const safeRequire = createRequire(import.meta.url);
|
|
|
18
18
|
* Node's require cache ensures each TS module is evaluated once.
|
|
19
19
|
*/
|
|
20
20
|
let tsLoaderRegistered = false;
|
|
21
|
+
/**
|
|
22
|
+
* When we runtime-load TS (via esbuild-register) using CommonJS `require`, our TS sources may contain NodeNext-style
|
|
23
|
+
* specifiers like `./foo.js` that point at `./foo.ts` in the source tree. Node's CJS resolver won't find `foo.js`.
|
|
24
|
+
*
|
|
25
|
+
* In normal builds this is fine because `dist/foo.js` exists, but in dev/tests we load from `src/`.
|
|
26
|
+
* This helper patches Node's CJS resolver to fall back from `*.js` → `*.ts` for relative imports.
|
|
27
|
+
*/
|
|
28
|
+
const withPatchedCjsResolveJsToTs = (fn) => {
|
|
29
|
+
const NodeModule = safeRequire('module');
|
|
30
|
+
const originalResolve = NodeModule._resolveFilename;
|
|
31
|
+
NodeModule._resolveFilename = function (request, parent, isMain, options) {
|
|
32
|
+
try {
|
|
33
|
+
return originalResolve.call(this, request, parent, isMain, options);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
if (typeof request === 'string' && /^(\.{1,2}\/.*)\.js$/.test(request)) {
|
|
37
|
+
const tsRequest = request.replace(/\.js$/, '.ts');
|
|
38
|
+
try {
|
|
39
|
+
return originalResolve.call(this, tsRequest, parent, isMain, options);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// fall through to rethrow original error
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
try {
|
|
49
|
+
return fn();
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
NodeModule._resolveFilename = originalResolve;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
21
55
|
/**
|
|
22
56
|
* Require a TypeScript module at runtime.
|
|
23
57
|
* @param absPath - The absolute path to the section file.
|
|
@@ -35,7 +69,11 @@ const requireModuleRuntime = (absPath) => {
|
|
|
35
69
|
throw new Error(`Cannot load section file '${absPath}' (TypeScript). Install 'esbuild-register' in nextjs-cms/cms or provide JS files.`);
|
|
36
70
|
}
|
|
37
71
|
}
|
|
38
|
-
const mod =
|
|
72
|
+
const mod = process.env.NODE_ENV === 'test'
|
|
73
|
+
? isTs
|
|
74
|
+
? withPatchedCjsResolveJsToTs(() => safeRequire(absPath))
|
|
75
|
+
: safeRequire(absPath)
|
|
76
|
+
: safeRequire(absPath);
|
|
39
77
|
// Only return the default export, ignore named exports
|
|
40
78
|
return mod?.default;
|
|
41
79
|
};
|
|
@@ -84,10 +122,10 @@ export class SectionFactory {
|
|
|
84
122
|
`export const sectionSchemaLastUpdated = ${Date.now()}\n`;
|
|
85
123
|
try {
|
|
86
124
|
fs.writeFileSync(hotMarkerFile, content, 'utf8');
|
|
87
|
-
log('Bumped _section-hot-reload.
|
|
125
|
+
log('Bumped _section-hot-reload.js to trigger Next Fast Refresh');
|
|
88
126
|
}
|
|
89
127
|
catch (err) {
|
|
90
|
-
console.error('Failed to bump _section-hot-reload.
|
|
128
|
+
console.error('Failed to bump _section-hot-reload.js:', err);
|
|
91
129
|
}
|
|
92
130
|
}
|
|
93
131
|
// ---------- PUBLIC API ----------
|
|
@@ -270,11 +308,11 @@ export class SectionFactory {
|
|
|
270
308
|
const sections = [];
|
|
271
309
|
try {
|
|
272
310
|
const sectionFiles = await glob('**/*.section.ts', {
|
|
273
|
-
cwd: cmsConfig.
|
|
311
|
+
cwd: cmsConfig.sections.path,
|
|
274
312
|
});
|
|
275
313
|
for (const file of sectionFiles) {
|
|
276
314
|
try {
|
|
277
|
-
const absPath = resolve(cmsConfig.
|
|
315
|
+
const absPath = resolve(cmsConfig.sections.path, file);
|
|
278
316
|
const defaultExport = requireModuleRuntime(absPath);
|
|
279
317
|
if (!defaultExport) {
|
|
280
318
|
if (!this.sectionFetchingErrors[file]) {
|
|
@@ -323,7 +361,7 @@ export class SectionFactory {
|
|
|
323
361
|
/**
|
|
324
362
|
* Remove the section from the cache so it will be reloaded next time.
|
|
325
363
|
*/
|
|
326
|
-
delete require.cache[resolve(cmsConfig.
|
|
364
|
+
delete require.cache[resolve(cmsConfig.sections.path, file)];
|
|
327
365
|
}
|
|
328
366
|
}
|
|
329
367
|
}
|
|
@@ -335,7 +373,7 @@ export class SectionFactory {
|
|
|
335
373
|
* If `strict` mode is enabled,
|
|
336
374
|
* don't return sections if there are errors.
|
|
337
375
|
*/
|
|
338
|
-
if (cmsConfig.strict && this.errorCount > 0) {
|
|
376
|
+
if (cmsConfig.sections.strict && this.errorCount > 0) {
|
|
339
377
|
return [];
|
|
340
378
|
}
|
|
341
379
|
log(`Loaded ${sections.length} section(s)`);
|
|
@@ -349,7 +387,7 @@ export class SectionFactory {
|
|
|
349
387
|
return;
|
|
350
388
|
this.watcherStarted = true;
|
|
351
389
|
const watcher = chokidar.watch('**/*.section.ts', {
|
|
352
|
-
cwd: cmsConfig.
|
|
390
|
+
cwd: cmsConfig.sections.path,
|
|
353
391
|
ignoreInitial: true,
|
|
354
392
|
});
|
|
355
393
|
log('Starting section watcher in dev mode...');
|
|
@@ -360,7 +398,7 @@ export class SectionFactory {
|
|
|
360
398
|
* @param relPath
|
|
361
399
|
*/
|
|
362
400
|
const invalidateForRelPath = (relPath) => {
|
|
363
|
-
const absPath = resolve(cmsConfig.
|
|
401
|
+
const absPath = resolve(cmsConfig.sections.path, relPath);
|
|
364
402
|
const req = eval('require');
|
|
365
403
|
try {
|
|
366
404
|
const resolved = req.resolve(absPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/core/fields/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAIxB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAQ1C,QAAA,MAAM,YAAY;IACd;;;;;;;OAOG;;;;;;;;IAEH;;;;;OAKG;;;;;;;;;;;;kBAEL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,aAAc,SAAQ,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5D,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAkB;IAC/D,QAAQ,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAA;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA;IAE7B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAqE;IAE1G;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAU;IAEpC,QAAQ,CAAC,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/core/fields/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAIxB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAQ1C,QAAA,MAAM,YAAY;IACd;;;;;;;OAOG;;;;;;;;IAEH;;;;;OAKG;;;;;;;;;;;;kBAEL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,aAAc,SAAQ,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5D,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAkB;IAC/D,QAAQ,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAA;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA;IAE7B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAqE;IAE1G;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAU;IAEpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAmC;gBAErD,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI;IAqDxC,eAAe;;kBAtED,MAAM;kBAAQ,IAAI,GAAG,IAAI;;;;;;;;;;;;;IA+EjD,iBAAiB,CAAC,EACpB,WAAW,EACX,MAAM,EACN,aAAiB,GACpB,EAAE;QACC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;QACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAClC,GAAG,OAAO,CAAC,UAAU,CAAC;IAevB;;OAEG;IACG,WAAW;IAiCK,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAezD;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIX,WAAW,CAAC,KAAK,EAAE,MAAM;IAIvB,QAAQ,CAAC,KAAK,EAAE,GAAG;IAQnB,OAAO,CAAC,IAAI,EAAE,IAAI;IAK3B,aAAa;IAab;;OAEG;IACG,oBAAoB;CAoD7B;AAED,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAEpF,QAAA,MAAM,aAAa;IArRf;;;;;;;OAOG;;;;;;;;IAEH;;;;;OAKG;;;;;;;;;;;;;;;;;;;kBA0QL,CAAA;AAEF,QAAA,MAAM,yBAAyB;;;IA1R3B;;;;;;;OAOG;;;;;;;;IAEH;;;;;OAKG;;;;;;;;;;;;;;;;;;;kBAgRL,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,mBAAmB,CAmBvF"}
|
|
@@ -42,7 +42,7 @@ export class DocumentField extends FileField {
|
|
|
42
42
|
_buffer;
|
|
43
43
|
_folder;
|
|
44
44
|
_allowedExtensions;
|
|
45
|
-
uploadsFolder = getCMSConfig().
|
|
45
|
+
uploadsFolder = getCMSConfig().media.upload.path;
|
|
46
46
|
constructor(config, file) {
|
|
47
47
|
super(config, 'document');
|
|
48
48
|
if (file) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Field, baseFieldConfigSchema } from './field.js';
|
|
2
2
|
import { entityKind } from '../helpers/index.js';
|
|
3
|
-
import bcrypt from '
|
|
3
|
+
import bcrypt from 'bcryptjs';
|
|
4
4
|
import * as z from 'zod';
|
|
5
5
|
const passwordValidationTypeSchema = z.strictObject({
|
|
6
6
|
regex: z.custom().describe('The regex pattern for validation'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"photo.d.ts","sourceRoot":"","sources":["../../../src/core/fields/photo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAKxB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAqC1C,QAAA,MAAM,YAAY;IACd,yCAAyC;;;;;;QA7BzC;;;;;;;;;;;;WAYG;;;;;;;;;IAsBH;;;;;;;OAOG;;;;;;;;IAEH;;;;;;;OAOG;;;;;;;IAEH;;;OAGG;;kBAEL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,UAAW,SAAQ,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IACtD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAe;IAC5D,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;IACpD,QAAQ,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAA;IAC3E,QAAQ,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAA;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACtF,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"photo.d.ts","sourceRoot":"","sources":["../../../src/core/fields/photo.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,7 +77,7 @@ export class PhotoField extends FileField {
|
|
|
77
77
|
extensions;
|
|
78
78
|
thumbnail;
|
|
79
79
|
removeExtension;
|
|
80
|
-
uploadsFolder = cmsConfig.
|
|
80
|
+
uploadsFolder = cmsConfig.media.upload.path;
|
|
81
81
|
/**
|
|
82
82
|
* _file is the file object if it's present
|
|
83
83
|
* Whereas the value is the path to the file
|
|
@@ -95,7 +95,7 @@ export class PhotoField extends FileField {
|
|
|
95
95
|
this.blurPlaceholder = config.blurPlaceholder;
|
|
96
96
|
this.size = config.size;
|
|
97
97
|
this.maxFileSize = config.maxFileSize ?? { size: 2, unit: 'mb' };
|
|
98
|
-
this.thumbnail = config.thumbnail ?? cmsConfig.
|
|
98
|
+
this.thumbnail = config.thumbnail ?? cmsConfig.media.images.thumbnail;
|
|
99
99
|
this.removeExtension = config.removeExtension ?? true;
|
|
100
100
|
this.extensions = config.fileType ?? ['jpeg'];
|
|
101
101
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"richText.d.ts","sourceRoot":"","sources":["../../../src/core/fields/richText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,KAAK,EAAyB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAcxB,QAAA,MAAM,uBAAuB;IACzB;;;;;OAKG;;;;;;;;;;;;;;;;;;IAgBH;;OAEG;;;;;;;;kBAGL,CAAA;AAkCF,QAAA,MAAM,YAAY;;;;;;;QA5Dd;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;kCAwCL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,aAAc,SAAQ,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IACzD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAkB;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAAG,KAAK,CAAA;IAC3E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAE1B,OAAO,CAAC,aAAa,CAIb;IAER,QAAQ,CAAC,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"richText.d.ts","sourceRoot":"","sources":["../../../src/core/fields/richText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,KAAK,EAAyB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAcxB,QAAA,MAAM,uBAAuB;IACzB;;;;;OAKG;;;;;;;;;;;;;;;;;;IAgBH;;OAEG;;;;;;;;kBAGL,CAAA;AAkCF,QAAA,MAAM,YAAY;;;;;;;QA5Dd;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;kCAwCL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,aAAc,SAAQ,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IACzD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAkB;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAAG,KAAK,CAAA;IAC3E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAE1B,OAAO,CAAC,aAAa,CAIb;IAER,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAmC;gBAErD,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;IAsB3C;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIF,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAY/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB,aAAa;IAWb;;OAEG;IACH,mBAAmB;IAuBb,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IA2C3D;;OAEG;IACG,oBAAoB;IA0BJ,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAYnG,yBAAyB;CA2D1C;AAED,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAWpF,QAAA,MAAM,aAAa;;;;;;;QA7Uf;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAyTL,CAAA;AAEF,QAAA,MAAM,yBAAyB;;;;;;;QAlV3B;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAoUN,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,mBAAmB,CAmBvF"}
|
|
@@ -82,7 +82,7 @@ export class RichTextField extends Field {
|
|
|
82
82
|
allowImageUploads;
|
|
83
83
|
sanitize;
|
|
84
84
|
_inlinePhotos = [];
|
|
85
|
-
uploadsFolder = getCMSConfig().
|
|
85
|
+
uploadsFolder = getCMSConfig().media.upload.path;
|
|
86
86
|
constructor(config) {
|
|
87
87
|
super(config, 'rich_text');
|
|
88
88
|
this.maxLength = config.maxLength;
|
|
@@ -161,7 +161,7 @@ export declare class SelectField extends Field<'select', SelectFieldConfig> {
|
|
|
161
161
|
*/
|
|
162
162
|
private checkDestinationDBTableAndColumns;
|
|
163
163
|
/**
|
|
164
|
-
* Build the field to be
|
|
164
|
+
* Build the field to be rendered in a form
|
|
165
165
|
*/
|
|
166
166
|
build(): Promise<void>;
|
|
167
167
|
private fetchOptions;
|
|
@@ -177,7 +177,7 @@ export declare class SelectField extends Field<'select', SelectFieldConfig> {
|
|
|
177
177
|
private checkDBConfig;
|
|
178
178
|
checkRequired(): void;
|
|
179
179
|
/**
|
|
180
|
-
* Prepare the field for submission
|
|
180
|
+
* Prepare and build the field for submission
|
|
181
181
|
*/
|
|
182
182
|
prepareForSubmission(): Promise<void>;
|
|
183
183
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/core/fields/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,KAAK,EAAyB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAMhD,OAAO,KAAK,EAAE,eAAe,EAAyB,eAAe,EAAyB,MAAM,aAAa,CAAA;AAEjH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,eAAO,MAAM,kBAAkB;;;kBAG7B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D,eAAO,MAAM,8BAA8B;;IAEvC;;OAEG;;IAEH;;OAEG;;kBAEL,CAAA;AAEF,KAAK,mBAAmB,GAAG;IACvB,IAAI,EAAE,WAAW,GAAG,UAAU,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,IAAI,eAAe,GAAG,eAAe,CAAA;CAC7C,CAAA;AAoCD,eAAO,MAAM,+BAA+B;;;QAnDxC;;WAEG;;QAEH;;WAEG;;;;;;;;;;;;;;;QANH;;WAEG;;QAEH;;WAEG;;;;;;;;;;;;;QANH;;WAEG;;QAEH;;WAEG;;;;;;;;;;oBAiDL,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE/E,qBAAa,WAAY,SAAQ,KAAK,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAC/D,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAgB;IAC7D,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAA;IACjD,QAAQ,CAAC,EAAE,EAAE;QACT,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,SAAkB,aAAa,CAAC,EAC1B;QACI,KAAK,EAAE,MAAM,CAAA;QACb,cAAc,EAAE,MAAM,CAAA;QACtB,gBAAgB,EAAE,MAAM,CAAA;KAC3B,GACD,SAAS,CAAY;IAClB,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,CAAY;IAEtD,QAAQ,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAA;IACjD,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,CAAA;IACnC,OAAO,CAAC,WAAW,CAA4B;gBACnC,MAAM,EAAE,eAAe,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/core/fields/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,8 +70,9 @@ export class SelectField extends Field {
|
|
|
70
70
|
constructor(config) {
|
|
71
71
|
super(config, 'select');
|
|
72
72
|
this.checkValueExists = config.checkValueExists ?? false;
|
|
73
|
+
// destinationDb is allowed in all modes (static, db, section)
|
|
74
|
+
this.destinationDb = config.destinationDb;
|
|
73
75
|
if (config.section) {
|
|
74
|
-
this.destinationDb = config.destinationDb;
|
|
75
76
|
this.section = config.section;
|
|
76
77
|
}
|
|
77
78
|
/**
|
|
@@ -306,7 +307,7 @@ export class SelectField extends Field {
|
|
|
306
307
|
}
|
|
307
308
|
}
|
|
308
309
|
/**
|
|
309
|
-
* Build the field to be
|
|
310
|
+
* Build the field to be rendered in a form
|
|
310
311
|
*/
|
|
311
312
|
async build() {
|
|
312
313
|
if (this.destinationDb) {
|
|
@@ -316,8 +317,10 @@ export class SelectField extends Field {
|
|
|
316
317
|
/**
|
|
317
318
|
* If options are already set, return
|
|
318
319
|
*/
|
|
319
|
-
if (this.options && this.optionsType === 'static')
|
|
320
|
+
if (this.options && this.optionsType === 'static') {
|
|
321
|
+
this._allOptions = this.options;
|
|
320
322
|
return;
|
|
323
|
+
}
|
|
321
324
|
/**
|
|
322
325
|
* Initialize the select db and options
|
|
323
326
|
*/
|
|
@@ -408,16 +411,12 @@ export class SelectField extends Field {
|
|
|
408
411
|
}
|
|
409
412
|
}
|
|
410
413
|
/**
|
|
411
|
-
* Prepare the field for submission
|
|
414
|
+
* Prepare and build the field for submission
|
|
412
415
|
*/
|
|
413
416
|
async prepareForSubmission() {
|
|
414
417
|
if (this.optionsType !== 'static') {
|
|
415
418
|
this.checkDBConfig();
|
|
416
419
|
await this.checkDBTableAndColumns();
|
|
417
|
-
/**
|
|
418
|
-
* Fetch the options
|
|
419
|
-
*/
|
|
420
|
-
await this.fetchOptions();
|
|
421
420
|
}
|
|
422
421
|
if (this.destinationDb) {
|
|
423
422
|
this.checkDestinationDBConfig();
|
|
@@ -429,6 +428,18 @@ export class SelectField extends Field {
|
|
|
429
428
|
* Default is false.
|
|
430
429
|
*/
|
|
431
430
|
if (this.checkValueExists && this.value && this.value.length > 0) {
|
|
431
|
+
if (this.optionsType === 'static') {
|
|
432
|
+
/**
|
|
433
|
+
* Set the options to the all options
|
|
434
|
+
*/
|
|
435
|
+
this._allOptions = this.options;
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
/**
|
|
439
|
+
* Fetch the options
|
|
440
|
+
*/
|
|
441
|
+
await this.fetchOptions();
|
|
442
|
+
}
|
|
432
443
|
/**
|
|
433
444
|
* Check if the values exist in the table
|
|
434
445
|
* This is now safe because we have verified the table and columns exist in the database
|
|
@@ -115,7 +115,7 @@ export declare class SelectMultipleField extends Field<'select_multiple', Select
|
|
|
115
115
|
postSubmit(itemId: string): Promise<void>;
|
|
116
116
|
postSubmitRollback(): Promise<void>;
|
|
117
117
|
/**
|
|
118
|
-
* Build the field to be
|
|
118
|
+
* Build the field to be rendered in a form
|
|
119
119
|
*/
|
|
120
120
|
build(): Promise<void>;
|
|
121
121
|
private fetchOptions;
|
|
@@ -141,7 +141,7 @@ export declare class SelectMultipleField extends Field<'select_multiple', Select
|
|
|
141
141
|
private checkDestinationDBConfig;
|
|
142
142
|
checkRequired(): void;
|
|
143
143
|
/**
|
|
144
|
-
* Prepare the field for submission
|
|
144
|
+
* Prepare and build the field for submission
|
|
145
145
|
*/
|
|
146
146
|
prepareForSubmission(): Promise<void>;
|
|
147
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectMultiple.d.ts","sourceRoot":"","sources":["../../../src/core/fields/selectMultiple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,KAAK,EAAyB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAO/C,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE5E,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAgDxB,QAAA,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAdnB,WAAW,GAAG,UAAU;cACxB,MAAM;gBACJ,MAAM;iBACL,eAAe,GAAG,eAAe;;cAHpC,WAAW,GAAG,UAAU;cACxB,MAAM;gBACJ,MAAM;iBACL,eAAe,GAAG,eAAe;;;;;;;;;;;;;;;oBAepD,CAAA;AAEF,KAAK,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAEhF,qBAAa,mBAAoB,SAAQ,KAAK,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;IACxF,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAwB;IACrE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAA;IACjD,QAAQ,CAAC,EAAE,EAAE;QACT,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACa,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,CAAA;IACjD,SAAkB,aAAa,CAAC,EAAE;QAC9B,KAAK,EAAE,MAAM,CAAA;QACb,cAAc,EAAE,MAAM,CAAA;QACtB,gBAAgB,EAAE,MAAM,CAAA;KAC3B,CAAA;IACQ,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,CAAY;IAEtD,OAAO,CAAC,eAAe,CAAoB;gBAC/B,MAAM,EAAE,eAAe,CAAC,yBAAyB,CAAC;IAwD9D,MAAM,CAAC,aAAa,IAAI,MAAM;IAId,kBAAkB,IAAI,OAAO;IAI7C;;OAEG;IACH,QAAQ;;;;IAIR;;OAEG;IACM,cAAc,IAAI,MAAM,GAAG,YAAY,EAAE,GAAG,SAAS;IAQ9D;;;;OAIG;IACM,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IA0ChC,eAAe;;;;;;;;;;;;;;;;;IAQT,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDzC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBzD;;OAEG;IACY,KAAK;YAsBN,YAAY;IAuB1B;;;OAGG;YACW,sBAAsB;IASpC;;;OAGG;YACW,iCAAiC;IAiB/C;;;OAGG;IACH,OAAO,CAAC,aAAa;IAUrB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAYhC,aAAa;IAWb;;OAEG;IACG,oBAAoB;
|
|
1
|
+
{"version":3,"file":"selectMultiple.d.ts","sourceRoot":"","sources":["../../../src/core/fields/selectMultiple.ts"],"names":[],"mappings":"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"}
|
|
@@ -245,7 +245,7 @@ export class SelectMultipleField extends Field {
|
|
|
245
245
|
}
|
|
246
246
|
}
|
|
247
247
|
/**
|
|
248
|
-
* Build the field to be
|
|
248
|
+
* Build the field to be rendered in a form
|
|
249
249
|
*/
|
|
250
250
|
async build() {
|
|
251
251
|
if (this.destinationDb) {
|
|
@@ -344,22 +344,29 @@ export class SelectMultipleField extends Field {
|
|
|
344
344
|
}
|
|
345
345
|
}
|
|
346
346
|
/**
|
|
347
|
-
* Prepare the field for submission
|
|
347
|
+
* Prepare and build the field for submission
|
|
348
348
|
*/
|
|
349
349
|
async prepareForSubmission() {
|
|
350
350
|
if (this.optionsType !== 'static') {
|
|
351
351
|
this.checkDBConfig();
|
|
352
352
|
await this.checkDBTableAndColumns();
|
|
353
|
-
/**
|
|
354
|
-
* Fetch the options
|
|
355
|
-
*/
|
|
356
|
-
await this.fetchOptions();
|
|
357
353
|
}
|
|
358
354
|
if (this.destinationDb) {
|
|
359
355
|
this.checkDestinationDBConfig();
|
|
360
356
|
await this.checkDestinationDBTableAndColumns();
|
|
361
357
|
}
|
|
358
|
+
/**
|
|
359
|
+
* If checkValueExists is set to true, check if the value exists in the options.
|
|
360
|
+
* This is important to prevent submitting a value that does not exist in the table. (e.g. tampering with the form)
|
|
361
|
+
* Default is false.
|
|
362
|
+
*/
|
|
362
363
|
if (this.checkValuesExist && this.value && this.value.length > 0) {
|
|
364
|
+
if (this.optionsType !== 'static') {
|
|
365
|
+
/**
|
|
366
|
+
* Fetch the options
|
|
367
|
+
*/
|
|
368
|
+
await this.fetchOptions();
|
|
369
|
+
}
|
|
363
370
|
/**
|
|
364
371
|
* Check if the values exist in the table
|
|
365
372
|
* This is now safe because we have verified the table and columns exist in the database
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/core/fields/video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAIhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,QAAA,MAAM,YAAY;IACd;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;kBAKL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,UAAW,SAAQ,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IACtD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAe;IAC5D,QAAQ,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAA;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA;IAE7B;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAU;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/core/fields/video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAIhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,QAAA,MAAM,YAAY;IACd;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;kBAKL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,UAAW,SAAQ,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IACtD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAe;IAC5D,QAAQ,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAA;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA;IAE7B;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAU;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAmC;gBACrD,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI;IA6BxC,eAAe;;kBA1CD,MAAM;kBAAQ,IAAI,GAAG,IAAI;;;;;;;;;;;;;IAmDjD,iBAAiB,CAAC,EACpB,WAAW,EACX,MAAM,EACN,aAAiB,GACpB,EAAE;QACC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;QACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAClC,GAAG,OAAO,CAAC,UAAU,CAAC;IAevB;;OAEG;IACG,WAAW;IAiCK,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAczD;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIX,WAAW,CAAC,KAAK,EAAE,MAAM;IAIvB,QAAQ,CAAC,KAAK,EAAE,GAAG;IAQnB,OAAO,CAAC,IAAI,EAAE,IAAI;IAK3B,aAAa;IAYb;;OAEG;IACG,oBAAoB;CAoD7B;AAED,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAE9E,QAAA,MAAM,aAAa;IAxPf;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;;;;;;;;kBA8OL,CAAA;AAEF,QAAA,MAAM,sBAAsB;;;IA7PxB;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;;;;;;;;kBAoPL,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,gBAAgB,CAmBjF"}
|
|
@@ -39,7 +39,7 @@ export class VideoField extends FileField {
|
|
|
39
39
|
_buffer;
|
|
40
40
|
_folder;
|
|
41
41
|
_allowedExtensions;
|
|
42
|
-
uploadsFolder = getCMSConfig().
|
|
42
|
+
uploadsFolder = getCMSConfig().media.upload.path;
|
|
43
43
|
constructor(config, file) {
|
|
44
44
|
super(config, 'video');
|
|
45
45
|
this._file = file;
|
|
@@ -148,8 +148,8 @@ export class Section {
|
|
|
148
148
|
photoNameField: config.gallery.db.photoNameField ?? 'photo',
|
|
149
149
|
metaField: config.gallery.db.metaField ?? 'meta',
|
|
150
150
|
},
|
|
151
|
-
watermark: config.gallery.watermark ?? cmsConfig.
|
|
152
|
-
thumbnail: config.gallery.thumbnail ?? cmsConfig.
|
|
151
|
+
watermark: config.gallery.watermark ?? cmsConfig.media.images.watermark,
|
|
152
|
+
thumbnail: config.gallery.thumbnail ?? cmsConfig.media.images.thumbnail,
|
|
153
153
|
};
|
|
154
154
|
}
|
|
155
155
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;;CAM3B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQjD,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAa/C,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAanD,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAapD,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nextjs-cms",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.23",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
"@t3-oss/env-nextjs": "^0.13.8",
|
|
111
111
|
"@trpc/server": "^11.4.2",
|
|
112
112
|
"axios": "^1.8.4",
|
|
113
|
-
"
|
|
113
|
+
"bcryptjs": "^3.0.3",
|
|
114
114
|
"chalk": "^5.4.1",
|
|
115
115
|
"chokidar": "3.6.0",
|
|
116
116
|
"commander": "^14.0.2",
|
|
@@ -125,22 +125,22 @@
|
|
|
125
125
|
"jsonwebtoken": "^9.0.2",
|
|
126
126
|
"lodash-es": "^4.17.21",
|
|
127
127
|
"mysql2": "^3.12.0",
|
|
128
|
-
"next": "^15.5.5",
|
|
129
|
-
"next-intl": "^4.1.0",
|
|
130
128
|
"nodemailer": "^7.0.3",
|
|
131
129
|
"react": "19.0.0",
|
|
132
130
|
"react-dom": "19.0.0",
|
|
131
|
+
"sharp": "^0.34.5",
|
|
133
132
|
"superjson": "^2.2.2",
|
|
133
|
+
"through2": "^4.0.2",
|
|
134
134
|
"zod": "4.1.12",
|
|
135
135
|
"zod-i18n-map": "^2.27.0"
|
|
136
136
|
},
|
|
137
137
|
"devDependencies": {
|
|
138
|
-
"@types/bcrypt": "^6.0.0",
|
|
139
138
|
"@types/jsonwebtoken": "^9.0.9",
|
|
140
139
|
"@types/lodash-es": "^4.17.12",
|
|
141
140
|
"@types/nodemailer": "^6.4.17",
|
|
142
141
|
"@types/react": "~19.0.0",
|
|
143
142
|
"@types/react-dom": "^19.0.0",
|
|
143
|
+
"@types/through2": "^2.0.41",
|
|
144
144
|
"date-fns": "^4.1.0",
|
|
145
145
|
"dotenv-cli": "^7.4.4",
|
|
146
146
|
"drizzle-kit": "^0.31.5",
|
|
@@ -150,11 +150,11 @@
|
|
|
150
150
|
"prettier": "^3.3.3",
|
|
151
151
|
"recast": "^0.23.11",
|
|
152
152
|
"tsup": "^8.3.6",
|
|
153
|
-
"tsx": "^4.
|
|
154
|
-
"typescript": "^5.9.
|
|
153
|
+
"tsx": "^4.21.0",
|
|
154
|
+
"typescript": "^5.9.3",
|
|
155
|
+
"@lzcms/prettier-config": "0.1.0",
|
|
155
156
|
"@lzcms/eslint-config": "0.3.0",
|
|
156
|
-
"@lzcms/tsconfig": "0.1.0"
|
|
157
|
-
"@lzcms/prettier-config": "0.1.0"
|
|
157
|
+
"@lzcms/tsconfig": "0.1.0"
|
|
158
158
|
},
|
|
159
159
|
"license": "MIT",
|
|
160
160
|
"keywords": [
|
|
@@ -171,7 +171,7 @@
|
|
|
171
171
|
"scripts": {
|
|
172
172
|
"build": "tsc",
|
|
173
173
|
"dev": "tsc",
|
|
174
|
-
"clean": "
|
|
174
|
+
"clean": "git clean -xdf .cache .turbo dist node_modules tsconfig.tsbuildinfo",
|
|
175
175
|
"typecheck": "tsc --noEmit"
|
|
176
176
|
}
|
|
177
177
|
}
|