@andywer/gear
v0.1.2
Published
Bootstrap typed JavaScript projects in less than a minute or easily add types to untyped code. Built around [Babel 7](https://babeljs.io/), [Flow](https://flowtype.org/), [babel-preset-env](https://babeljs.io/) and [functional type syntax](https://github.
Downloads
11
Maintainers
Readme
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.