mirror of
https://github.com/woutdp/live_svelte
synced 2026-05-24 09:28:21 +00:00
29 lines
1,022 B
Elixir
29 lines
1,022 B
Elixir
defmodule LiveSvelte.SSR.NodeJS do
|
|
@moduledoc false
|
|
@behaviour LiveSvelte.SSR
|
|
|
|
def render(name, props, slots) do
|
|
# Prepare props and slots for JSON serialization before passing to NodeJS.
|
|
# This converts structs to maps, DateTime to ISO 8601 strings, and strips
|
|
# Ecto metadata (__meta__). Required because NodeJS.call! uses Jason internally.
|
|
prepared_props = LiveSvelte.JSON.prepare(props)
|
|
prepared_slots = LiveSvelte.JSON.prepare(slots)
|
|
|
|
try do
|
|
NodeJS.call!({"server", "render"}, [name, prepared_props, prepared_slots], binary: true)
|
|
catch
|
|
:exit, {:noproc, _} ->
|
|
message = """
|
|
NodeJS is not configured. Please add the following to your application.ex:
|
|
{NodeJS.Supervisor, [path: LiveSvelte.SSR.NodeJS.server_path(), pool_size: 4]},
|
|
"""
|
|
|
|
raise %LiveSvelte.SSR.NotConfigured{message: message}
|
|
end
|
|
end
|
|
|
|
def server_path() do
|
|
{:ok, path} = :application.get_application()
|
|
Application.app_dir(path, "/priv/svelte")
|
|
end
|
|
end
|