choonkeat/elm-fullstack/3.0.1

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 (cache, verified). The original is gone. This copy comes from a Lamdera package cache made before it went. The Lamdera package server serves a copy recovered from a Lamdera package cache from 2021-02-13.

What we checked: Rebuilt from the unpacked sources in a Lamdera package cache (5 copies agree), which Elm only writes after the published SHA-1 checked out; elm.json is byte-identical to package.elm-lang.org's; the exposed modules match docs.json; the zip is our own, so its SHA-1 is not the published one.

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/3.0.1/

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