Skip to content

Friendly syntax for creating schemas, output to Swift, React PropTypes, Elm, Golang, MongoDB, and more

Notifications You must be signed in to change notification settings

BurntCaramel/lofi-schema-elm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#lofi #schema in Elm

Low fidelity schemas. Write with a friendly syntax and convert to other forms easily.

Interactive demo

I’ve made an online tool to convert #lofi schemas. Convert to React PropTypes, Mongoose schemas, Joi validations, and MySQL commands.

Basic usage

import Html exposing (Html, section, h2, pre, text)
import Lofi.Parse exposing (parseElement)
import Lofi.Schema exposing (Schema, fromElement)
import Lofi.Schema.Output.MySQL as MySQL
import Lofi.Schema.Output.Mongoose as Mongoose
import Lofi.Schema.Output.Joi as Joi
import Lofi.Schema.Output.ReactProps as ReactProps
import Lofi.Schema.Output.Swift as Swift
import Lofi.Schema.Output.Elm as Elm
import Lofi.Schema.Output.Go as Go

type alias Model =
  { collectionName : String
  , individualName : String
  , lines : List String
  }

model : Model
model =
  { collectionName = "Users"
  , individualName = "User"
  , lines =
      [ "First name"
      , "Middle name #optional"
      , "Last name #text #max: 255"
      , "Email #email"
      , "Date of birth #date"
      , "Last signed in at #time #now"
      , "Favorite number #number #default: 7"
      ]
  }

view : Model -> Html Msg
view model =
  let
    elements =
      List.map parseElement model.lines

    schema : Schema
    schema =
      { collectionName = model.collectionName
      , individualName = model.individualName
      , items = List.map fromElement elements
      }
  in
    section []
    [ article []
      [ h2 [] [ text "React PropTypes" ]
      , pre [] [ text (ReactProps.createPropTypesCode schema) ]
      ]
    , article []
      [ h2 [] [ text "Mongoose" ]
      , pre [] [ text (Mongoose.createModelCode schema) ]
      ]
    , article []
      [ h2 [] [ text "Swift" ]
      , pre [] [ text (Swift.createStructCode schema) ]
      ]
    , article []
      [ h2 [] [ text "Elm" ]
      , pre [] [ text (Elm.createTypeAliasCode schema) ]
      ]
    , article []
      [ h2 [] [ text "Golang" ]
      , pre [] [ text (Go.createStructCode schema) ]
      ]
    , article []
      [ h2 [] [ text "Joi" ]
      , pre [] [ text (Joi.createSchemaCode schema) ]
      ]
    , article []
      [ h2 [] [ text "MySQL" ]
      , pre [] [ text (MySQL.createTableCommand schema) ]
      , pre [] [ text (MySQL.insertRowCommand schema) ]
      ]
    ]