choonkeat/create-elm-server/1.0.0

NOTE: the latest version is 1.0.1

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

Versions published as choonkeat/create-elm-server still install under that name. 2 versions of 2 come from the new location (see their notes).

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/create-elm-server/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)
, onWebsocketEvent :
(Value -> FrameworkMsg msg x serverMsg)
-> Sub (FrameworkMsg msg x serverMsg)
, writeWebsocketMessage :
Connection -> Key -> String -> Cmd (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 header)
(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
writeWebsocketMessage : (Value -> Cmd msg) -> Connection -> Key -> String -> Cmd msg

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

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


writeWebsocketMessage =
    Fullstack.Server.writeWebsocketMessage writeWs