https://github.com/andywer/gear
🛠 Experimental tool to bootstrap typed JavaScript code.
https://github.com/andywer/gear
babeljs flowtype javascript static-typing types
Last synced: 2 months ago
JSON representation
🛠 Experimental tool to bootstrap typed JavaScript code.
- Host: GitHub
- URL: https://github.com/andywer/gear
- Owner: andywer
- License: mit
- Created: 2017-03-16T20:04:16.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-11-22T16:13:54.000Z (about 8 years ago)
- Last Synced: 2024-09-29T06:22:07.009Z (over 1 year ago)
- Topics: babeljs, flowtype, javascript, static-typing, types
- Language: JavaScript
- Homepage:
- Size: 39.1 KB
- Stars: 33
- Watchers: 4
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Gear
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.com/andywer/proposal-double-colon-types).
The tool is written using itself, so have a look at its own code if you are interested. [type-check.js](./src/commands/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
```sh
yarn add --dev @andywer/gear
```
or using npm
```sh
npm install --save-dev @andywer/gear
```
## Usage
```json
{
"scripts": {
"build": "gear compile src/ -d lib/",
"test": "gear type-check src/"
}
}
```
### Compile sources
```sh
# Run Babel
gear compile src/ -d lib/
```
### Type checking
```sh
# 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.
```js
exists :: string => Promise
/** 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.