An elm-review rule with extractor to extract the public interface (that is ports, their types, and flags) of all entrypoints in an Elm application.
Imagine you have this beautiful application:
port module Main exposing (main)
port send : { data : String, finished : Bool } -> Cmd msg
port recv : (List String -> msg) -> Sub msg
type alias Flags =
{ more : String
, stuff : Int
}
main : Program Flags () ()
main =
Platform.worker
{ init = \_ -> ( (), Cmd.none )
, update = \_ _ -> ( (), send { data = "hi", finished = False } )
, subscriptions = \_ -> recv (\_ -> ())
}
Now, with this rule configured, running elm-review --report=json --extract
can yield us this extract:
{
"ports": {
"send": {
"type": "record",
"fields": {
"data": "string",
"finished": "bool"
}
},
"recv": {
"type": "list",
"content": "string"
}
},
"entryPoints": {
"Main": {
"cmds": ["send"],
"subs": ["recv"],
"flags": {
"type": "record",
"fields": {
"more": "string",
"stuff": "int"
}
}
}
}
}
Having this information isn't particularily valuable on its own, but it can be used for further processing, such as generating typescript definition files to ensure you use your app correctly!