0.17.0 • Published 6 years ago

flow-runtime-cli v0.17.0

Weekly downloads
97
License
MIT
Repository
github
Last release
6 years ago

flow-runtime-cli

A command line interface for working with flow-runtime and Flow.

What?

Discovers imported and global type dependencies in your source code and produces a single file containing the flow-runtime type definitions for those dependencies.

What?

Let's say you have some code like this:

/* @flow */
function get (store: Storage, key: string) {
  return store.getItem(key);
}

get(localStorage, 'foo');

Storage is a global type, built in to Flow, but flow-runtime itself doesn't know anything about it - if you compile this code, flow-runtime will emit a warning about being unable to resolve a type called "Storage". A possible solution to this would be to include all the type definitions which come with Flow as part of flow-runtime, but this is wasteful - the file would be very large and most definitions would go unused.

To solve this problem, flow-runtime-cli:

  1. Crawls your project source code looking for these types.
  2. Discovers the matching type definitions in flow-typed or wherever specified by your .flowconfig file.
  3. Creates a graph of dependencies and generates the code for only the types you use, this produces a file that looks like this:
import t from "flow-runtime";
t.declare(
  t.class(
    "Storage",
    t.object(
      t.property("length", t.number()),
      t.property(
        "getItem",
        t.function(t.param("key", t.string()), t.return(t.nullable(t.string())))
      ),
      t.property(
        "setItem",
        t.function(
          t.param("key", t.string()),
          t.param("data", t.string()),
          t.return(t.void())
        )
      ),
      t.property("clear", t.function(t.return(t.void()))),
      t.property(
        "removeItem",
        t.function(t.param("key", t.string()), t.return(t.void()))
      ),
      t.property(
        "key",
        t.function(
          t.param("index", t.number()),
          t.return(t.nullable(t.string()))
        )
      ),
      t.indexer("name", t.string(), t.nullable(t.string()))
    )
  )
);

You can then import this file once, in your entry point, and flow-runtime will be able to validates values of this type.

Installation

npm install flow-runtime-cli

or

yarn add flow-runtime-cli

Usage

If your source files are in a folder called src, run:

flow-runtime generate ./src > ./src/typedefs.js

then, in your entry point (e.g. index.js) your first import should be:

import './typedefs';
0.17.0

6 years ago

0.16.0

6 years ago

0.15.0

6 years ago

0.14.0

7 years ago

0.13.0

7 years ago

0.12.0

7 years ago

0.11.1

7 years ago

0.11.0

7 years ago

0.10.0

7 years ago

0.9.1

7 years ago

0.9.0

7 years ago

0.8.0

7 years ago

0.7.0

7 years ago

0.6.1

7 years ago

0.6.0

7 years ago

0.5.0

7 years ago

0.4.0

7 years ago

0.3.0

7 years ago

0.2.1

7 years ago