While Flow is written in OCaml, its parser is available as a compiled-to-JavaScript module published to npm, named flow-parser. Most end users of Flow will not need to use this parser directly, but JavaScript packages which make use of parsing Flow-typed JavaScript can use this to generate Flow's syntax tree with annotated types attached.
Building Flow from source
Flow is written in OCaml (OCaml 4.14.0 is required).
Windows: cygwin and a number of dependencies like make, gcc and g++ are required.
One way to install everything is to install Chocolatey and then run .\scripts\windows\install_deps.ps1 and .\scripts\windows\install_opam.ps1. Otherwise, see the "Manual Installation" section of OCaml for Windows docs and install all of the packages listed in our install_deps.ps1.
The remainder of these instructions should be run inside the Cygwin shell: C:\tools\cygwin\Cygwin. Then cd /cygdrive/c/Users/you/path/to/checkout.
Validate the opam version is 2.x.x:
opam --version
The following instructions expect 2.x.x. Should your package manager have installed a 1.x.x version, please refer to the opam docs to install a newer version manually.
Initialize opam:
# on Mac and Linux:
opam init
# on Windows:
scripts/windows/init_opam.sh
Install Flow's OCaml dependencies:
# from within this git checkout
make deps
note: If you find that you get an error looking for ocaml-base-compiler version, your local dependency repo may be out of date and you need to run opam update + opam upgrade
Build the flow binary:
eval $(opam env)
make
This produces the bin/flow binary.
Build flow.js (optional):
opam install -y js_of_ocaml.5.5.2
make js
This produces bin/flow.js.
The Flow parser can also be compiled to JavaScript. Read how here.
Running the tests
To run the tests, first compile flow using make. Then run bash ./runtests.sh bin/flow
There is a make test target that compiles and runs tests.
To run a subset of the tests you can pass a second argument to the runtests.sh file.
For example: bash runtests.sh bin/flow class | grep -v 'SKIP'