diff --git a/apps/api/src/app/environments-v1/usecases/output-renderers/hydrate-email-schema.usecase.ts b/apps/api/src/app/environments-v1/usecases/output-renderers/hydrate-email-schema.usecase.ts index 1d0f66fecac..0057a2f63fa 100644 --- a/apps/api/src/app/environments-v1/usecases/output-renderers/hydrate-email-schema.usecase.ts +++ b/apps/api/src/app/environments-v1/usecases/output-renderers/hydrate-email-schema.usecase.ts @@ -15,7 +15,9 @@ export class HydrateEmailSchemaUseCase { nestedForPlaceholders: {}, regularPlaceholdersToDefaultValue: {}, }; - const emailEditorSchema: TipTapNode = TipTapSchema.parse(JSON.parse(command.emailEditor)); + + // TODO: Aligned Zod inferred type and TipTapNode to remove the need of a type assertion + const emailEditorSchema: TipTapNode = TipTapSchema.parse(JSON.parse(command.emailEditor)) as TipTapNode; if (emailEditorSchema.content) { this.transformContentInPlace(emailEditorSchema.content, command.fullPayloadForRender, placeholderAggregation); } @@ -226,12 +228,24 @@ export class HydrateEmailSchemaUseCase { } } -export const TipTapSchema = z.object({ - type: z.string().optional(), - content: z.array(z.lazy(() => TipTapSchema)).optional(), - text: z.string().optional(), - attrs: z.record(z.unknown()).optional(), -}); +export const TipTapSchema = z + .object({ + type: z.string().optional(), + content: z.array(z.lazy(() => TipTapSchema)).optional(), + text: z.string().optional(), + marks: z + .array( + z + .object({ + type: z.string(), + attrs: z.record(z.any()).optional(), + }) + .passthrough() + ) + .optional(), + attrs: z.record(z.unknown()).optional(), + }) + .passthrough(); const buildLiquidJSDefault = (variableName: string, fallback?: string) => `{{ ${variableName}${fallback ? ` | default: '${fallback}'` : ''} }}`;