Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/noredink/elm-review-extract-api

A rule to extract the API of Elm applications using elm-review's data extraction facilities
https://github.com/noredink/elm-review-extract-api

Last synced: about 2 months ago
JSON representation

A rule to extract the API of Elm applications using elm-review's data extraction facilities

Awesome Lists containing this project

README

        

# `elm-review-extract-api`

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.

## Say what now?

Imagine you have this beautiful application:

``` elm
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:

``` json
{
"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!