choonkeat/elm-fullstack/2.0.0

NOTE: the latest version is 4.0.1

Renamed to choonkeat/elm-webapp. It is published under that name, and new versions come out there.

Versions published as choonkeat/elm-fullstack still install under that name. 4 versions of 7 come from the new location (see their notes). 3 versions could not be recovered and cannot be installed.

Rerouted (fork, verified). The original repository is gone. This copy comes from a fork that still has the tag. The Lamdera package server serves a copy recovered from https://github.com/jsegura/elm-fullstack (a fork).

What we checked: Rebuilt with git archive from commit 3114ddc92967 of https://github.com/jsegura/elm-fullstack (a fork) (zip prefix choonkeat-elm-fullstack-38009d9/, America/Los_Angeles times): the zip is byte-identical to the one package.elm-lang.org recorded, SHA-1 896074ce94567ccb36d9c069b55a8fba59df4254.

The Lamdera compiler uses this copy and prints a one-line notice saying so. elm itself fails to download this version.

Details · package.elm-lang.org's zip: https://github.com/choonkeat/elm-fullstack/zipball/2.0.0/

Fullstack.Client

Definition

type alias Ports msg =
{ websocketConnected :
(Int -> FrameworkMsg msg) -> Sub (FrameworkMsg msg)
, websocketIn :
(String -> FrameworkMsg msg) -> Sub (FrameworkMsg msg)
}

Hook up ports to use websockets for passing serverMsg and clientMsg

type alias Protocol serverMsg clientMsg model msg x =
{ updateFromServer : serverMsg -> model -> ( model, Cmd msg )
, clientMsgEncoder : clientMsg -> Value
, serverMsgDecoder : Decoder serverMsg
, errorDecoder : Decoder x
}

A set of required protocols.

- `updateFromServer` is called when `serverMsg` is received via websocket
- `clientMsgEncoder` encodes outgoing `clientMsg`, e.g. via `sendToServer`
- `serverMsgDecoder` decodes replies from Server
- `errorDecoder` decodes error replies from Server

Common Helpers

{ element :
{ init : flags -> ( model, Cmd msg )
, view : model -> Html msg
, update : msg -> model -> ( model, Cmd msg )
, subscriptions : model -> Sub msg
}
, ports : Ports msg
, protocol : Protocol serverMsg clientMsg model msg x
}
-> { element : Program flags model (FrameworkMsg msg)
, sendToServer : clientMsg -> Task Error (Result x serverMsg)
}

Returns a Browser.element to use as main in your client app and a sendToServer function to send clientMsg with

{ document :
{ init : flags -> ( model, Cmd msg )
, view : model -> Document msg
, update : msg -> model -> ( model, Cmd msg )
, subscriptions : model -> Sub msg
}
, ports : Ports msg
, protocol : Protocol serverMsg clientMsg model msg x
}
-> { document : Program flags model (FrameworkMsg msg)
, sendToServer : clientMsg -> Task Error (Result x serverMsg)
}

Returns a Browser.document to use as main in your client app and a sendToServer function to send clientMsg with

{ application :
{ init : flags -> Url -> Key -> ( model, Cmd msg )
, view : model -> Document msg
, update : msg -> model -> ( model, Cmd msg )
, subscriptions : model -> Sub msg
, onUrlRequest : UrlRequest -> msg
, onUrlChange : Url -> msg
}
, ports : Ports msg
, protocol : Protocol serverMsg clientMsg model msg x
}
-> { application : Program flags model (FrameworkMsg msg)
, sendToServer : clientMsg -> Task Error (Result x serverMsg)
}

Returns a Browser.application to use as main in your client app and a sendToServer function to send clientMsg with