litecms 0.1.1 → 0.2.0

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.
Files changed (40) hide show
  1. package/README.md +746 -7
  2. package/dist/admin/CmsAdminLanding.d.ts +89 -0
  3. package/dist/admin/CmsAdminLanding.d.ts.map +1 -0
  4. package/dist/admin/CmsAdminLayout.d.ts +26 -3
  5. package/dist/admin/CmsAdminLayout.d.ts.map +1 -1
  6. package/dist/admin/CmsAdminPage.d.ts.map +1 -1
  7. package/dist/admin/CmsBlogAdmin.d.ts +37 -0
  8. package/dist/admin/CmsBlogAdmin.d.ts.map +1 -0
  9. package/dist/admin/config.d.ts +32 -0
  10. package/dist/admin/config.d.ts.map +1 -1
  11. package/dist/admin/config.js +16 -0
  12. package/dist/admin/exports.d.ts +5 -2
  13. package/dist/admin/exports.d.ts.map +1 -1
  14. package/dist/admin/exports.js +1467 -30
  15. package/dist/admin/language.d.ts +53 -0
  16. package/dist/admin/language.d.ts.map +1 -0
  17. package/dist/components/CmsAutoForm.d.ts.map +1 -1
  18. package/dist/components/CmsForm.d.ts.map +1 -1
  19. package/dist/components/CmsImageField.d.ts +2 -1
  20. package/dist/components/CmsImageField.d.ts.map +1 -1
  21. package/dist/components/CmsImagePickerModal.d.ts +21 -0
  22. package/dist/components/CmsImagePickerModal.d.ts.map +1 -0
  23. package/dist/components/CmsSimpleForm.d.ts.map +1 -1
  24. package/dist/components/index.d.ts +1 -0
  25. package/dist/components/index.d.ts.map +1 -1
  26. package/dist/components/index.js +51 -190
  27. package/dist/index-c9btr14k.js +4422 -0
  28. package/dist/index-szreq4v9.js +12 -0
  29. package/dist/index-wmd953zf.js +11423 -0
  30. package/dist/index.js +6 -2
  31. package/dist/schema/index.js +2 -0
  32. package/dist/server/index.d.ts +301 -0
  33. package/dist/server/index.d.ts.map +1 -1
  34. package/dist/server/index.js +2585 -1
  35. package/dist/storage/index.js +2 -0
  36. package/package.json +13 -3
  37. package/dist/domain/index.d.ts +0 -1
  38. package/dist/domain/index.d.ts.map +0 -1
  39. package/dist/stores/index.d.ts +0 -1
  40. package/dist/stores/index.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -10,17 +10,21 @@ import {
10
10
  CmsCheckbox,
11
11
  CmsField,
12
12
  CmsHiddenField,
13
- CmsImageField
14
- } from "./index-pmb5m3ek.js";
13
+ CmsImageField,
14
+ CmsImagePickerModal
15
+ } from "./index-c9btr14k.js";
16
+ import"./index-wmd953zf.js";
15
17
  import {
16
18
  defineSchema,
17
19
  getEditableFields
18
20
  } from "./schema/index.js";
21
+ import"./index-szreq4v9.js";
19
22
  export {
20
23
  useCmsForm,
21
24
  getEditableFields,
22
25
  defineSchema,
23
26
  CmsSubmitButton,
27
+ CmsImagePickerModal,
24
28
  CmsImageField,
25
29
  CmsHiddenField,
26
30
  CmsFormSuccess,
@@ -1,3 +1,5 @@
1
+ import"../index-szreq4v9.js";
2
+
1
3
  // src/schema/index.ts
2
4
  function defineSchema(definition) {
3
5
  return definition;
@@ -76,4 +76,305 @@ export declare function parseFormDataToObject(formData: FormData): Record<string
76
76
  * Helper to parse FormData with a specific schema
77
77
  */
78
78
  export declare function parseFormData<T extends z.ZodType>(schema: T, formData: FormData): z.infer<T> | null;
79
+ /**
80
+ * Supported CMS languages
81
+ */
82
+ export type CmsLanguage = 'en' | 'de';
83
+ /**
84
+ * User settings shape for language preference
85
+ */
86
+ export type UserLanguageSettings = {
87
+ language?: CmsLanguage;
88
+ };
89
+ /**
90
+ * Dependencies for creating language route handlers
91
+ */
92
+ export type LanguageRoutesDeps = {
93
+ /**
94
+ * Get the current authenticated user's ID.
95
+ * Return null if not authenticated.
96
+ */
97
+ getUserId: () => Promise<string | null>;
98
+ /**
99
+ * Get the user's current settings.
100
+ * Return null if user not found.
101
+ */
102
+ getUserSettings: (userId: string) => Promise<UserLanguageSettings | null>;
103
+ /**
104
+ * Update the user's settings.
105
+ */
106
+ updateUserSettings: (userId: string, settings: UserLanguageSettings) => Promise<void>;
107
+ };
108
+ /**
109
+ * Response helpers for Next.js routes
110
+ */
111
+ type JsonResponse = {
112
+ json: (data: unknown, init?: {
113
+ status?: number;
114
+ }) => Response;
115
+ };
116
+ /**
117
+ * Creates GET and POST handlers for the language preference API route.
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * // app/api/admin/language/route.ts
122
+ * import { createLanguageRoutes } from 'litecms/server';
123
+ * import { auth } from '@/app/lib/auth';
124
+ * import { db } from '@/app/db';
125
+ * import { user } from '@/app/db/auth-schema';
126
+ * import { eq } from 'drizzle-orm';
127
+ * import { headers } from 'next/headers';
128
+ *
129
+ * export const { GET, POST } = createLanguageRoutes({
130
+ * getUserId: async () => {
131
+ * const session = await auth.api.getSession({ headers: await headers() });
132
+ * return session?.user?.id ?? null;
133
+ * },
134
+ * getUserSettings: async (userId) => {
135
+ * const userData = await db.query.user.findFirst({
136
+ * where: eq(user.id, userId),
137
+ * columns: { settings: true },
138
+ * });
139
+ * return userData?.settings ?? null;
140
+ * },
141
+ * updateUserSettings: async (userId, settings) => {
142
+ * await db.update(user)
143
+ * .set({ settings, updatedAt: new Date() })
144
+ * .where(eq(user.id, userId));
145
+ * },
146
+ * });
147
+ * ```
148
+ */
149
+ export declare function createLanguageRoutes(deps: LanguageRoutesDeps, NextResponse?: JsonResponse): {
150
+ GET: () => Promise<Response>;
151
+ POST: (request: Request) => Promise<Response>;
152
+ };
153
+ /**
154
+ * Blog post status
155
+ */
156
+ export type BlogPostStatus = 'draft' | 'published';
157
+ /**
158
+ * Blog post shape for route handlers
159
+ */
160
+ export type BlogPostData = {
161
+ id: string;
162
+ slug: string;
163
+ title: string;
164
+ excerpt?: string | null;
165
+ coverImage?: string | null;
166
+ content: string;
167
+ tags: string[];
168
+ authorName: string;
169
+ status: BlogPostStatus;
170
+ publishedAt?: Date | null;
171
+ createdAt: Date;
172
+ updatedAt: Date;
173
+ };
174
+ /**
175
+ * Input for creating a new blog post
176
+ */
177
+ export type CreateBlogPostInput = {
178
+ id: string;
179
+ slug: string;
180
+ title: string;
181
+ excerpt?: string;
182
+ coverImage?: string;
183
+ content: string;
184
+ tags?: string[];
185
+ authorName: string;
186
+ status?: BlogPostStatus;
187
+ };
188
+ /**
189
+ * Input for updating a blog post
190
+ */
191
+ export type UpdateBlogPostInput = {
192
+ slug?: string;
193
+ title?: string;
194
+ excerpt?: string | null;
195
+ coverImage?: string | null;
196
+ content?: string;
197
+ tags?: string[];
198
+ authorName?: string;
199
+ status?: BlogPostStatus;
200
+ };
201
+ /**
202
+ * Dependencies for blog posts collection routes (GET list, POST create)
203
+ */
204
+ export type BlogPostsRoutesDeps = {
205
+ /**
206
+ * Check if the current user is authenticated.
207
+ * Return true if authorized, false otherwise.
208
+ */
209
+ checkAuth: () => Promise<boolean>;
210
+ /**
211
+ * Get all blog posts ordered by creation date (newest first).
212
+ * Optionally filter by status.
213
+ */
214
+ getPosts: (filter?: {
215
+ status?: BlogPostStatus;
216
+ }) => Promise<BlogPostData[]>;
217
+ /**
218
+ * Create a new blog post.
219
+ */
220
+ createPost: (post: CreateBlogPostInput) => Promise<BlogPostData>;
221
+ /**
222
+ * Check if a slug is already taken.
223
+ */
224
+ slugExists: (slug: string) => Promise<boolean>;
225
+ };
226
+ /**
227
+ * Dependencies for single blog post routes (GET, PATCH, DELETE)
228
+ */
229
+ export type BlogPostRoutesDeps = {
230
+ /**
231
+ * Check if the current user is authenticated.
232
+ * Return true if authorized, false otherwise.
233
+ */
234
+ checkAuth: () => Promise<boolean>;
235
+ /**
236
+ * Get a blog post by ID.
237
+ */
238
+ getPost: (id: string) => Promise<BlogPostData | null>;
239
+ /**
240
+ * Update a blog post.
241
+ */
242
+ updatePost: (id: string, data: UpdateBlogPostInput) => Promise<BlogPostData>;
243
+ /**
244
+ * Delete a blog post.
245
+ */
246
+ deletePost: (id: string) => Promise<void>;
247
+ /**
248
+ * Check if a slug is already taken (excluding a specific post ID).
249
+ */
250
+ slugExistsExcluding: (slug: string, excludeId: string) => Promise<boolean>;
251
+ };
252
+ /**
253
+ * Creates GET and POST handlers for the blog posts collection API route.
254
+ *
255
+ * @example
256
+ * ```ts
257
+ * // app/api/admin/blog/posts/route.ts
258
+ * import { createBlogPostsRoutes } from 'litecms/server';
259
+ * import { auth } from '@/app/lib/auth';
260
+ * import { db } from '@/app/db';
261
+ * import { blogPosts } from '@/app/db/schema';
262
+ * import { headers } from 'next/headers';
263
+ * import { desc, eq } from 'drizzle-orm';
264
+ *
265
+ * export const { GET, POST } = createBlogPostsRoutes({
266
+ * checkAuth: async () => {
267
+ * const session = await auth.api.getSession({ headers: await headers() });
268
+ * return !!session?.user;
269
+ * },
270
+ * getPosts: async (filter) => {
271
+ * const conditions = filter?.status ? [eq(blogPosts.status, filter.status)] : [];
272
+ * return db.query.blogPosts.findMany({
273
+ * where: conditions.length ? conditions[0] : undefined,
274
+ * orderBy: [desc(blogPosts.createdAt)],
275
+ * });
276
+ * },
277
+ * createPost: async (post) => {
278
+ * const [created] = await db.insert(blogPosts).values({
279
+ * ...post,
280
+ * tags: post.tags ?? [],
281
+ * publishedAt: post.status === 'published' ? new Date() : null,
282
+ * }).returning();
283
+ * return created;
284
+ * },
285
+ * slugExists: async (slug) => {
286
+ * const existing = await db.query.blogPosts.findFirst({
287
+ * where: eq(blogPosts.slug, slug),
288
+ * });
289
+ * return !!existing;
290
+ * },
291
+ * });
292
+ * ```
293
+ */
294
+ export declare function createBlogPostsRoutes(deps: BlogPostsRoutesDeps, NextResponse?: {
295
+ json: (data: unknown, init?: {
296
+ status?: number;
297
+ }) => Response;
298
+ }): {
299
+ GET: (request: Request) => Promise<Response>;
300
+ POST: (request: Request) => Promise<Response>;
301
+ };
302
+ /**
303
+ * Creates GET, PATCH, and DELETE handlers for a single blog post API route.
304
+ *
305
+ * @example
306
+ * ```ts
307
+ * // app/api/admin/blog/posts/[id]/route.ts
308
+ * import { createBlogPostRoutes } from 'litecms/server';
309
+ * import { auth } from '@/app/lib/auth';
310
+ * import { db } from '@/app/db';
311
+ * import { blogPosts } from '@/app/db/schema';
312
+ * import { headers } from 'next/headers';
313
+ * import { eq, and, ne } from 'drizzle-orm';
314
+ *
315
+ * export const { GET, PATCH, DELETE } = createBlogPostRoutes({
316
+ * checkAuth: async () => {
317
+ * const session = await auth.api.getSession({ headers: await headers() });
318
+ * return !!session?.user;
319
+ * },
320
+ * getPost: async (id) => {
321
+ * return db.query.blogPosts.findFirst({
322
+ * where: eq(blogPosts.id, id),
323
+ * }) ?? null;
324
+ * },
325
+ * updatePost: async (id, data) => {
326
+ * const updateData = {
327
+ * ...data,
328
+ * updatedAt: new Date(),
329
+ * // Set publishedAt when publishing for the first time
330
+ * ...(data.status === 'published' && {
331
+ * publishedAt: new Date(),
332
+ * }),
333
+ * };
334
+ * const [updated] = await db.update(blogPosts)
335
+ * .set(updateData)
336
+ * .where(eq(blogPosts.id, id))
337
+ * .returning();
338
+ * return updated;
339
+ * },
340
+ * deletePost: async (id) => {
341
+ * await db.delete(blogPosts).where(eq(blogPosts.id, id));
342
+ * },
343
+ * slugExistsExcluding: async (slug, excludeId) => {
344
+ * const existing = await db.query.blogPosts.findFirst({
345
+ * where: and(eq(blogPosts.slug, slug), ne(blogPosts.id, excludeId)),
346
+ * });
347
+ * return !!existing;
348
+ * },
349
+ * });
350
+ * ```
351
+ */
352
+ export declare function createBlogPostRoutes(deps: BlogPostRoutesDeps, NextResponse?: {
353
+ json: (data: unknown, init?: {
354
+ status?: number;
355
+ }) => Response;
356
+ }): {
357
+ GET: (_request: Request, { params }: {
358
+ params: {
359
+ id: string;
360
+ } | Promise<{
361
+ id: string;
362
+ }>;
363
+ }) => Promise<Response>;
364
+ PATCH: (request: Request, { params }: {
365
+ params: {
366
+ id: string;
367
+ } | Promise<{
368
+ id: string;
369
+ }>;
370
+ }) => Promise<Response>;
371
+ DELETE: (_request: Request, { params }: {
372
+ params: {
373
+ id: string;
374
+ } | Promise<{
375
+ id: string;
376
+ }>;
377
+ }) => Promise<Response>;
378
+ };
379
+ export {};
79
380
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACvC,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACL,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,KAAK,IAAI;IAC/B,mDAAmD;IACnD,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,gBAAgB,SAIY,CAAC;AAE1C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,EACtD,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAGpC,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EACzC,UAAU,QAAQ,KACnB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAmE5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,QAAQ,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyCzB;AAmDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAC7C,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,QAAQ,GACnB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAInB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}