diff options
| author | Brandon Dail <[email protected]> | 2017-02-27 20:18:26 -0600 |
|---|---|---|
| committer | Jason Miller <[email protected]> | 2017-02-27 21:18:26 -0500 |
| commit | 377d6f470289cfdbac3fd4edb91d8006d9cf8c8c (patch) | |
| tree | 082f409f66a05b03775438def5f059fd6d17efa0 | |
| parent | f147246b7528904ec28702f43e11bd8ba946d0a6 (diff) | |
Add Flow type annotations (#23)
* Add flowtype annotations
* Add flow to test script
| -rw-r--r-- | .babelrc | 5 | ||||
| -rw-r--r-- | .flowconfig | 7 | ||||
| -rw-r--r-- | package.json | 5 | ||||
| -rw-r--r-- | rollup.config.js | 2 | ||||
| -rw-r--r-- | src/index.js | 19 | ||||
| -rw-r--r-- | yarn.lock | 24 |
6 files changed, 53 insertions, 9 deletions
@@ -1,3 +1,6 @@ { - "presets": ["es2015", "stage-0"] + "presets": ["es2015", "stage-0"], + "plugins": [ + "transform-flow-strip-types" + ] } diff --git a/.flowconfig b/.flowconfig new file mode 100644 index 0000000..4a58bdc --- /dev/null +++ b/.flowconfig @@ -0,0 +1,7 @@ +[ignore] + +[include] + +[libs] + +[options] diff --git a/package.json b/package.json index 69402ec..a4f4e77 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "main": "dist/mitt.js", "umd:main": "dist/mitt.umd.js", "scripts": { - "test": "eslint src test && mocha --compilers js:babel-register test/**/*.js", + "test": "flow && eslint src test && mocha --compilers js:babel-register test/**/*.js", "build": "npm-run-all clean -p rollup:* -p minify:* -s docs size", "clean": "rimraf dist && mkdirp dist", "rollup:cjs": "rollup -c rollup.config.js -m -f cjs -n $npm_package_amdName $npm_package_jsnext_main -o $npm_package_main", @@ -53,12 +53,14 @@ "devDependencies": { "babel-core": "^6.9.1", "babel-eslint": "^7.1.1", + "babel-plugin-transform-flow-strip-types": "^6.21.0", "babel-preset-es2015": "^6.9.0", "babel-preset-stage-0": "^6.5.0", "babel-register": "^6.9.0", "chai": "^3.5.0", "documentation": "^4.0.0-beta4", "eslint": "^3.13.1", + "flow-bin": "^0.38.0", "gzip-size-cli": "^1.0.0", "mkdirp": "^0.5.1", "mocha": "^3.2.0", @@ -67,6 +69,7 @@ "rimraf": "^2.5.2", "rollup": "^0.41.4", "rollup-plugin-buble": "^0.15.0", + "rollup-plugin-flow": "^1.1.1", "sinon": "^1.17.4", "sinon-chai": "^2.8.0", "strip-json-comments-cli": "^1.0.1", diff --git a/rollup.config.js b/rollup.config.js index 277d99e..60940ef 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,8 +1,10 @@ import buble from 'rollup-plugin-buble'; +import flow from 'rollup-plugin-flow'; export default { useStrict: false, plugins: [ + flow(), buble() ] }; diff --git a/src/index.js b/src/index.js index ae6bd63..92b19f9 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,19 @@ +// @flow +// An event handler can take an optional event argument +// and should not return a value +type EventHandler = (event?: any) => void; +// An array of all currently registered event handlers for a type +type EventHandlerList = Array<EventHandler>; +// A map of event types and their corresponding event handlers. +type EventHandlerMap = { + [type: string]: EventHandlerList, +}; + /** Mitt: Tiny (~200b) functional event emitter / pubsub. * @name mitt * @returns {Mitt} */ -export default function mitt(all) { +export default function mitt(all: EventHandlerMap) { all = all || Object.create(null); return { @@ -14,7 +25,7 @@ export default function mitt(all) { * @return {Object} the `mitt` instance for chaining * @memberOf mitt */ - on(type, handler) { + on(type: string, handler: EventHandler) { (all[type] || (all[type] = [])).push(handler); }, @@ -26,7 +37,7 @@ export default function mitt(all) { * @return {Object} the `mitt` instance for chaining * @memberOf mitt */ - off(type, handler) { + off(type: string, handler: EventHandler) { let e = all[type] || (all[type] = []); e.splice(e.indexOf(handler) >>> 0, 1); }, @@ -40,7 +51,7 @@ export default function mitt(all) { * @return {Object} the `mitt` instance for chaining * @memberof mitt */ - emit(type, evt) { + emit(type: string, evt: EventHandler) { (all[type] || []).map((handler) => { handler(evt); }); (all['*'] || []).map((handler) => { handler(type, evt); }); } @@ -670,7 +670,7 @@ babel-plugin-transform-export-extensions@^6.3.13: babel-plugin-syntax-export-extensions "^6.8.0" babel-runtime "^6.0.0" -babel-plugin-transform-flow-strip-types@^6.3.13: +babel-plugin-transform-flow-strip-types@^6.21.0, babel-plugin-transform-flow-strip-types@^6.3.13: version "6.21.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.21.0.tgz#2eea3f8b5bb234339b47283feac155cfb237b948" dependencies: @@ -867,7 +867,7 @@ babelify@^7.2.0: babel-core "^6.0.14" object-assign "^4.0.0" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.5.2: +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.5.2: version "6.15.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" @@ -1683,6 +1683,17 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" +flow-bin@^0.38.0: + version "0.38.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.38.0.tgz#3ae096d401c969cc8b5798253fb82381e2d0237a" + +flow-remove-types@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-1.2.0.tgz#c285516eabba72177a1b10bfb58f6ffb675a8877" + dependencies: + babylon "^6.15.0" + vlq "^0.2.1" + for-in@^0.1.5: version "0.1.6" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" @@ -3365,7 +3376,14 @@ rollup-plugin-buble@^0.15.0: buble "^0.15.0" rollup-pluginutils "^1.5.0" -rollup-pluginutils@^1.5.0: +rollup-plugin-flow@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-flow/-/rollup-plugin-flow-1.1.1.tgz#6ce568f1dd559666b77ab76b4bae251407528db6" + dependencies: + flow-remove-types "^1.1.0" + rollup-pluginutils "^1.5.1" + +rollup-pluginutils@^1.5.0, rollup-pluginutils@^1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" dependencies: |
