carstenlebek / svelte-email

Write and send emails with Svelte ✉️🚀
https://svelte-email.vercel.app
MIT License
458 stars 37 forks source link

Error: Component.render(...) is no longer valid in Svelte 5 #34

Open mmailaender opened 6 months ago

mmailaender commented 6 months ago
Error: Component.render(...) is no longer valid in Svelte 5. See https://svelte-5-preview.vercel.app/docs/breaking-changes#components-are-no-longer-classes for more information
    at Invite.render (/workspace/Test/src/lib/emails/invite.svelte:142:8)
    at Module.render (/workspace/Test/node_modules/.pnpm/svelte-email@0.0.4/node_modules/svelte-email/render.js:6:14)
    at GET (/workspace/Test/src/routes/api/auth/organization/invite/+server.ts:27:25)
    at Module.render_endpoint (/workspace/Test/node_modules/.pnpm/@sveltejs+kit@2.5.0_@sveltejs+vite-plugin-svelte@3.0.2_svelte@5.0.0-next.60_vite@5.1.3/node_modules/@sveltejs/kit/src/runtime/server/endpoint.js:43:24)
    at resolve (/workspace/Test/node_modules/.pnpm/@sveltejs+kit@2.5.0_@sveltejs+vite-plugin-svelte@3.0.2_svelte@5.0.0-next.60_vite@5.1.3/node_modules/@sveltejs/kit/src/runtime/server/respond.js:443:23)
    at async Module.respond (/workspace/Test/node_modules/.pnpm/@sveltejs+kit@2.5.0_@sveltejs+vite-plugin-svelte@3.0.2_svelte@5.0.0-next.60_vite@5.1.3/node_modules/@sveltejs/kit/src/runtime/server/respond.js:319:20)
    at async file:///workspace/Test/node_modules/.pnpm/@sveltejs+kit@2.5.0_@sveltejs+vite-plugin-svelte@3.0.2_svelte@5.0.0-next.60_vite@5.1.3/node_modules/@sveltejs/kit/src/exports/vite/dev/index.js:524:22

Svelte Docs: https://svelte-5-preview.vercel.app/docs/breaking-changes#components-are-no-longer-classes-server-api-changes

Problem location: https://github.com/carstenlebek/svelte-email/blob/master/src/lib/render.ts#L19

robthepaper commented 1 month ago

Hi there, had same issue, don't know if it's the right way to do but here is the workaround to render in Svelte 5.

instead of this code for example :

import { render } from 'svelte-email'
const html = await render({
     template: template
})

I use this one :

//import { render } from 'svelte-email'
import { render } from 'svelte/server'

// === Render with props
//const rendered = await render(template, { props: { otp: '333' } })

// === Render
const rendered = await render(template)

const html = rendered?.html
robthepaper commented 1 month ago

If anyone has a good function to convert nicely to plainText...

EDIT: nevermind, just saw the import { convert } from 'html-to-text'; in the render.ts file :)

Erim32 commented 3 weeks ago

Any update ?

=> https://github.com/SvelteLaunch/svelte-5-email/blob/0e3205280b5a7183834d33e6aa243d01734493e7/src/lib/render.js#L10