0.1.2 • Published 6 years ago

@andywer/gear v0.1.2

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

Gear

Bootstrap typed JavaScript projects in less than a minute or easily add types to untyped code. Built around Babel 7, Flow, babel-preset-env and functional type syntax.

The tool is written using itself. So have a look at its own code if your interested, type-check.js is quite a good example, for instance.

I wanted to play a little with Hindley-Milner types in JavaScript, see how it feels and by the way reduce the boilerplate necessary to get starting with typed JavaScript.

⚠️ Caution: This is highly experimental.

Installation

yarn add --dev @andywer/gear

or using npm

npm install --save-dev @andywer/gear

Usage

{
  "scripts": {
    "build": "gear compile src/ -d lib/",
    "test": "gear type-check src/"
  }
}

Compile sources

# Run Babel
gear compile src/ -d lib/

Type checking

# Run Babel & Flow
gear type-check src/

Will create a .flowcheck directory, babel the sources, but not completely, just translating the custom type syntax Flow does not understand. Creates a .flowconfig and runs Flow.

Write some code

You can write JS code with Flow's regular type syntax, with Hindley-Milner types or without types (Flow will infer types as good as possible).

Gimmick: When writing Hindley-Milner types (functional style) you don't need to add // @flow to the file. It will automatically be added on first encounter of a type.

exists :: string => Promise<bool>

/** Checks if a file or directory exists */
async function exists (path) {
  try {
    await fs.access(path)
    return true
  } catch (error) {
    return false
  }
}

Why not just use TypeScript or Flow as it is?

Because TypeScript is kind of a closed ecosystem on its own and Flow is written in OCAML. Gear tries to stick to the tech stack you already have as much as possible.

And thus the stack becomes easily hackable.

Write a Babel plugin, even change the type syntax and it will work. And it even requires little effort to use it with real-world code since it is built around the tools you use anyway.

License

Released under the terms of the MIT license.