-module(lightspeed@component@helpers). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/lightspeed/component/helpers.gleam"). -export([make/3, html_with_fingerprint/2, no_effect/1, dispatch/1, push/1, navigate/1, patch/2, subscribe/1, unsubscribe/1, shutdown/1, map_command/2, map_commands/2]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC(" Ergonomic helpers for Lightspeed components.\n"). -file("src/lightspeed/component/helpers.gleam", 7). ?DOC(" Construct a component from init/update/render functions.\n"). -spec make( fun(() -> HKD), fun((HKD, HKE) -> {HKD, list(lightspeed@component:command(HKE))}), fun((HKD) -> lightspeed@component:rendered()) ) -> lightspeed@component:component(HKD, HKE). make(Init, Update, Render) -> {component, Init, Update, Render}. -file("src/lightspeed/component/helpers.gleam", 16). ?DOC(" Render markup with an explicit fingerprint.\n"). -spec html_with_fingerprint(binary(), binary()) -> lightspeed@component:rendered(). html_with_fingerprint(Markup, Fingerprint) -> {rendered, Markup, Fingerprint}. -file("src/lightspeed/component/helpers.gleam", 24). ?DOC(" Return an update result with no commands.\n"). -spec no_effect(HKJ) -> {HKJ, list(lightspeed@component:command(any()))}. no_effect(Model) -> {Model, []}. -file("src/lightspeed/component/helpers.gleam", 29). ?DOC(" Construct a dispatch command.\n"). -spec dispatch(HKN) -> lightspeed@component:command(HKN). dispatch(Msg) -> {dispatch, Msg}. -file("src/lightspeed/component/helpers.gleam", 34). ?DOC(" Construct a pushed ISA instruction command.\n"). -spec push(lightspeed@agent@isa:instruction()) -> lightspeed@component:command(any()). push(Instruction) -> {push, Instruction}. -file("src/lightspeed/component/helpers.gleam", 39). ?DOC(" Construct a navigate command.\n"). -spec navigate(binary()) -> lightspeed@component:command(any()). navigate(To) -> push({navigate, To}). -file("src/lightspeed/component/helpers.gleam", 44). ?DOC(" Construct a patch command.\n"). -spec patch(binary(), binary()) -> lightspeed@component:command(any()). patch(Target, Html) -> push({patch, Target, Html}). -file("src/lightspeed/component/helpers.gleam", 49). ?DOC(" Construct a subscription command.\n"). -spec subscribe(binary()) -> lightspeed@component:command(any()). subscribe(Topic) -> push({subscribe, Topic}). -file("src/lightspeed/component/helpers.gleam", 54). ?DOC(" Construct an unsubscription command.\n"). -spec unsubscribe(binary()) -> lightspeed@component:command(any()). unsubscribe(Topic) -> push({unsubscribe, Topic}). -file("src/lightspeed/component/helpers.gleam", 59). ?DOC(" Construct a shutdown command.\n"). -spec shutdown(binary()) -> lightspeed@component:command(any()). shutdown(Reason) -> push({shutdown, Reason}). -file("src/lightspeed/component/helpers.gleam", 64). ?DOC(" Map the message type inside a component command.\n"). -spec map_command(lightspeed@component:command(HLB), fun((HLB) -> HLD)) -> lightspeed@component:command(HLD). map_command(Command, With) -> case Command of no_command -> no_command; {dispatch, Inner} -> {dispatch, With(Inner)}; {push, Instruction} -> {push, Instruction} end. -file("src/lightspeed/component/helpers.gleam", 76). ?DOC(" Map message type for a list of commands.\n"). -spec map_commands(list(lightspeed@component:command(HLF)), fun((HLF) -> HLI)) -> list(lightspeed@component:command(HLI)). map_commands(Commands, With) -> case Commands of [] -> []; [Command | Rest] -> [map_command(Command, With) | map_commands(Rest, With)] end.