fix: handle styleData JSON string in message creation pipeline
- commit
- d472d9af12f8d77d4e6acb58b02b6ca420661642
- author
- Kit · · 2025-07-03 20:46 UTC
- parent
- 1301099
- signature
- SSH Unverified
SHA256:H91DFuEG4jpk5edzLA4aUKkpv4zv9Q339ipRmkph6TkThe key is unknown
2 files · +17 -2
M src/lib/validation/text-formatting.ts +12 -1
| @@ -76,6 +76,17 @@ export function validateTextStyle(style: unknown): TextStyle | null { | |||
| 76 | 76 | export function sanitizeStyleData(styleData: unknown): TextStyle | undefined { | |
| 77 | 77 | if (!styleData) return undefined; | |
| 78 | 78 | ||
| 79 | - | const validated = validateTextStyle(styleData); | |
| 79 | + | // Handle JSON string input | |
| 80 | + | let parsedData: unknown = styleData; | |
| 81 | + | if (typeof styleData === 'string') { | |
| 82 | + | try { | |
| 83 | + | parsedData = JSON.parse(styleData); | |
| 84 | + | } catch (error) { | |
| 85 | + | console.warn('Failed to parse styleData JSON:', error); | |
| 86 | + | return undefined; | |
| 87 | + | } | |
| 88 | + | } | |
| 89 | + | ||
| 90 | + | const validated = validateTextStyle(parsedData); | |
| 80 | 91 | return validated || undefined; | |
| 81 | 92 | }⏎̸ | |
| @@ -76,6 +76,17 @@ export function validateTextStyle(style: unknown): TextStyle | null { | |||||
| 76 | export function sanitizeStyleData(styleData: unknown): TextStyle | undefined { | 76 | export function sanitizeStyleData(styleData: unknown): TextStyle | undefined { | ||
| 77 | if (!styleData) return undefined; | 77 | if (!styleData) return undefined; | ||
| 78 | 78 | ||||
| 79 | - | const validated = validateTextStyle(styleData); | 79 | + | // Handle JSON string input |
| 80 | + | let parsedData: unknown = styleData; | |||
| 81 | + | if (typeof styleData === 'string') { | |||
| 82 | + | try { | |||
| 83 | + | parsedData = JSON.parse(styleData); | |||
| 84 | + | } catch (error) { | |||
| 85 | + | console.warn('Failed to parse styleData JSON:', error); | |||
| 86 | + | return undefined; | |||
| 87 | + | } | |||
| 88 | + | } | |||
| 89 | + | ||||
| 90 | + | const validated = validateTextStyle(parsedData); | |||
| 80 | return validated || undefined; | 91 | return validated || undefined; | ||
| 81 | }⏎̸ | 92 | }⏎̸ | ||
M src/routes/api/chat/messages/+server.ts +5 -1
| @@ -197,10 +197,14 @@ export async function POST({ request, locals }: { request: Request, locals: App. | |||
| 197 | 197 | content: data.content, | |
| 198 | 198 | type: data.type || 'chat', | |
| 199 | 199 | timestamp: Date.now(), | |
| 200 | - | styleData: validatedStyleData, | |
| 200 | + | styleData: validatedStyleData ? JSON.stringify(validatedStyleData) : undefined, | |
| 201 | 201 | hasFormatting: Boolean(validatedStyleData) | |
| 202 | 202 | }; | |
| 203 | 203 | ||
| 204 | + | ||
| 205 | + | // debug style data content at this point | |
| 206 | + | log.debug('Style data content', { styleData: validatedStyleData }); | |
| 207 | + | ||
| 204 | 208 | // Save to DB | |
| 205 | 209 | await db.insert(messages).values(newMessage); | |
| 206 | 210 | log.debug('Message saved in DB', { messageId: newMessage.id, chatRoomId: newMessage.chatRoomId, type: newMessage.type, timestamp: newMessage.timestamp }); | |
| @@ -197,10 +197,14 @@ export async function POST({ request, locals }: { request: Request, locals: App. | |||||
| 197 | content: data.content, | 197 | content: data.content, | ||
| 198 | type: data.type || 'chat', | 198 | type: data.type || 'chat', | ||
| 199 | timestamp: Date.now(), | 199 | timestamp: Date.now(), | ||
| 200 | - | styleData: validatedStyleData, | 200 | + | styleData: validatedStyleData ? JSON.stringify(validatedStyleData) : undefined, |
| 201 | hasFormatting: Boolean(validatedStyleData) | 201 | hasFormatting: Boolean(validatedStyleData) | ||
| 202 | }; | 202 | }; | ||
| 203 | 203 | ||||
| 204 | + | ||||
| 205 | + | // debug style data content at this point | |||
| 206 | + | log.debug('Style data content', { styleData: validatedStyleData }); | |||
| 207 | + | ||||
| 204 | // Save to DB | 208 | // Save to DB | ||
| 205 | await db.insert(messages).values(newMessage); | 209 | await db.insert(messages).values(newMessage); | ||
| 206 | log.debug('Message saved in DB', { messageId: newMessage.id, chatRoomId: newMessage.chatRoomId, type: newMessage.type, timestamp: newMessage.timestamp }); | 210 | log.debug('Message saved in DB', { messageId: newMessage.id, chatRoomId: newMessage.chatRoomId, type: newMessage.type, timestamp: newMessage.timestamp }); | ||