aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Dail <[email protected]>2017-02-27 20:18:26 -0600
committerJason Miller <[email protected]>2017-02-27 21:18:26 -0500
commit377d6f470289cfdbac3fd4edb91d8006d9cf8c8c (patch)
tree082f409f66a05b03775438def5f059fd6d17efa0
parentf147246b7528904ec28702f43e11bd8ba946d0a6 (diff)
Add Flow type annotations (#23)
* Add flowtype annotations * Add flow to test script
-rw-r--r--.babelrc5
-rw-r--r--.flowconfig7
-rw-r--r--package.json5
-rw-r--r--rollup.config.js2
-rw-r--r--src/index.js19
-rw-r--r--yarn.lock24
6 files changed, 53 insertions, 9 deletions
diff --git a/.babelrc b/.babelrc
index eaf3238..54f26e5 100644
--- a/.babelrc
+++ b/.babelrc
@@ -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); });
}
diff --git a/yarn.lock b/yarn.lock
index 2f04e4d..45b2024 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -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: