choonkeat/elm-fullstack/1.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 265b5a5fb8ba of https://github.com/jsegura/elm-fullstack (a fork) (zip prefix choonkeat-elm-fullstack-30e1275/, America/Los_Angeles times): the zip is byte-identical to the one package.elm-lang.org recorded, SHA-1 72b180fce9007dbee6a85e9198581609191f17fc.

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

Fullstack.Server

Definition

type alias PlatformWorker flags model msg =
{ init : flags -> ( model, Cmd msg )
, update : msg -> model -> ( model, Cmd msg )
, subscriptions : model -> Sub msg
}

This is the input to create a Platform.worker

type alias Ports msg x serverMsg =
{ writeResponse :
Request
-> { statusCode : StatusCode
, headers : List ( String, Value )
, body : String
}
-> Cmd (FrameworkMsg msg x serverMsg)
, onHttpRequest :
(Value -> FrameworkMsg msg x serverMsg)
-> Sub (FrameworkMsg msg x serverMsg)
}

A set of required ports

- `writeResponse` is your function created with your port `onHttpResponse`


    port onHttpResponse : Json.Encode.Value -> Cmd msg


    writeResponse =
        Fullstack.Server.writeResponse onHttpResponse






- `onHttpRequest` is a port defined in your `Server.elm`


    port onHttpRequest : (Json.Encode.Value -> msg) -> Sub msg
type alias Protocol msg x serverMsg clientMsg route header model =
{ headerDecoder : Decoder header
, clientMsgDecoder : Decoder clientMsg
, updateFromClient :
header -> Posix -> clientMsg -> model -> ( model, Task x serverMsg )
, serverMsgEncoder : serverMsg -> Value
, errorEncoder : x -> Value
, routeDecoder : Url -> Maybe route
, updateFromRoute :
( Method, header, Maybe route )
-> Posix
-> Request
-> model
-> ( model, Cmd msg )
}

A set of required protocols.

  • headerDecoder decoded value will be made available to updateFromRoute and updateFromClient
  • clientMsgDecoder decodes the request body IF request was sent from Client sendToServer
    • updateFromClient is called if clientMsgDecoder succeeds
    • serverMsgEncoder encodes the response body for a successful clientMsgDecoder
    • errorEncoder encodes the response body for a failed clientMsgDecoder
  • routeDecoder decodes a Url.Url; if successful, updateFromRoute will be called
    • updateFromRoute is called as long as headerDecoder succeeds
    • otherwise Fullstack.Server will respond with error 500

Common Helpers

{ worker : PlatformWorker flags model msg
, ports : Ports msg x serverMsg
, protocol :
Protocol msg x serverMsg clientMsg endpoint header model
}
-> Program
flags
(FrameworkModel model)
(FrameworkMsg msg x serverMsg)

Returns a Fullstack.Server program, capable of communicating with Fullstack.Client program

(Value -> Cmd msg)
-> Request
-> { statusCode : StatusCode
, headers : List ( String, Value )
, body : String
}
-> Cmd msg

Use this to wire up your port in your own Server.elm

port onHttpResponse : Json.Encode.Value -> Cmd msg


writeResponse =
    Fullstack.Server.writeResponse onHttpResponse