[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\"@babel/preset-env\"],\n  \"plugins\": [ \n    \"@babel/plugin-syntax-class-properties\", \n    \"@babel/plugin-proposal-class-properties\",\n  ]\n}"
  },
  {
    "path": ".buckconfig",
    "content": "\n[android]\n  target = Google Inc.:Google APIs:23\n\n[maven_repositories]\n  central = https://repo1.maven.org/maven2\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  \"env\": {\n    \"browser\": true,\n    \"commonjs\": true,\n    \"es6\": true,\n    \"jest\": true\n\n  },\n  \"extends\": [\n    \"eslint:recommended\",\n    \"plugin:react/recommended\"\n  ],\n  \"parserOptions\": {\n    \"ecmaFeatures\": {\n      \"experimentalObjectRestSpread\": true,\n      \"jsx\": true\n    },\n    \"sourceType\": \"module\"\n  },\n  \"plugins\": [\n    \"react\",\n    \"react-native\",\n    \"classes\",\n  ],\n  \"globals\": {\n    \"dip\" : true,\n    \"fdip\" : true,\n    \"globalBackHandler\": true,\n    \"jasmine\": true,\n    \"idx\": true,\n  },\n  \"parser\": \"babel-eslint\",\n  \"rules\": {\n    \"classes/space\": 2,\n    \"classes/name\": [2, \"class\", \"method\"],\n    \"classes/style\": 2,\n    \"strict\": 0,\n    \"prefer-const\": \"error\",\n    \"react/prop-types\": [\n      \"error\",{}\n    ],\n    \"brace-style\": \"error\",\n    \"new-cap\": [\"error\",\n      { \"newIsCap\": true }\n    ],\n    \"block-spacing\": \"error\",\n    \"keyword-spacing\":\"error\",\n    \"no-irregular-whitespace\": \"error\",\n    \"space-in-parens\": [\"error\", \"never\"],\n    \"space-unary-ops\": \"error\",\n    \"space-before-function-paren\": [\"error\", \"never\"],\n    \"no-multi-spaces\": \"error\",\n    \"comma-spacing\": [\"error\", { \"before\": false, \"after\": true }],\n    \"computed-property-spacing\": [\"error\", \"never\"],\n    \"key-spacing\": [\"error\", { \"beforeColon\": false, \"afterColon\": true }],\n    \"no-lonely-if\": \"error\",\n    \"no-mixed-spaces-and-tabs\": \"error\",\n    \"no-multiple-empty-lines\": [\"error\", { \"max\": 2, \"maxEOF\": 1, \"maxBOF\": 1 }],\n    \"space-infix-ops\": \"error\",\n    \"indent\": [\n      \"error\",\n      2,\n      { \"SwitchCase\": 1 }\n    ],\n    /*\"linebreak-style\": [\n      \"error\",\n      \"unix\"\n    ],*/\n    \"quotes\": [\n      \"error\",\n      \"single\"\n    ],\n    \"semi\": [\n      \"error\",\n      \"never\"\n    ],\n    \"comma-dangle\": [\n      \"error\",\n      \"always-multiline\"\n    ],\n    \"arrow-spacing\": [\n      \"error\"\n    ],\n    \"max-len\": [\"error\", 130],\n    \"react/jsx-uses-react\": \"error\",\n    \"react/jsx-uses-vars\": \"error\",\n\n    \"react-native/no-unused-styles\": 2,\n    \"react-native/split-platform-components\": 0,\n    \"react-native/no-inline-styles\": 2,\n    \"react-native/no-color-literals\": 0,\n\n  }\n};\n\n"
  },
  {
    "path": ".flowconfig",
    "content": "[ignore]\n; We fork some components by platform\n.*/*[.]android.js\n\n; Ignore \"BUCK\" generated dirs\n<PROJECT_ROOT>/\\.buckd/\n\n; Ignore unexpected extra \"@providesModule\"\n.*/node_modules/.*/node_modules/fbjs/.*\n\n; Ignore duplicate module providers\n; For RN Apps installed via npm, \"Libraries\" folder is inside\n; \"node_modules/react-native\" but in the source repo it is in the root\n.*/Libraries/react-native/React.js\n.*/Libraries/react-native/ReactNative.js\n\n[include]\n\n[libs]\nnode_modules/react-native/Libraries/react-native/react-native-interface.js\nnode_modules/react-native/flow\nflow/\n\n[options]\nemoji=true\n\nmodule.system=haste\n\nexperimental.strict_type_args=true\n\nmunge_underscores=true\n\nmodule.name_mapper='^[./a-zA-Z0-9$_-]+\\.\\(bmp\\|gif\\|jpg\\|jpeg\\|png\\|psd\\|svg\\|webp\\|m4v\\|mov\\|mp4\\|mpeg\\|mpg\\|webm\\|aac\\|aiff\\|caf\\|m4a\\|mp3\\|wav\\|html\\|pdf\\)$' -> 'RelativeImageStub'\n\nsuppress_type=$FlowIssue\nsuppress_type=$FlowFixMe\nsuppress_type=$FixMe\n\nsuppress_comment=\\\\(.\\\\|\\n\\\\)*\\\\$FlowFixMe\\\\($\\\\|[^(]\\\\|(\\\\(>=0\\\\.\\\\(4[0-0]\\\\|[1-3][0-9]\\\\|[0-9]\\\\).[0-9]\\\\)? *\\\\(site=[a-z,_]*react_native[a-z,_]*\\\\)?)\\\\)\nsuppress_comment=\\\\(.\\\\|\\n\\\\)*\\\\$FlowIssue\\\\((\\\\(>=0\\\\.\\\\(4[0-0]\\\\|[1-3][0-9]\\\\|[0-9]\\\\).[0-9]\\\\)? *\\\\(site=[a-z,_]*react_native[a-z,_]*\\\\)?)\\\\)?:? #[0-9]+\nsuppress_comment=\\\\(.\\\\|\\n\\\\)*\\\\$FlowFixedInNextDeploy\nsuppress_comment=\\\\(.\\\\|\\n\\\\)*\\\\$FlowExpectedError\n\nunsafe.enable_getters_and_setters=true\n\n[version]\n^0.40.0\n"
  },
  {
    "path": ".gitattributes",
    "content": "*.pbxproj -text\n"
  },
  {
    "path": ".gitignore",
    "content": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\nproject.xcworkspace\n\n# Android/IntelliJ\n#\nbuild/\n.idea\n.gradle\nlocal.properties\n*.iml\n\n# node.js\n#\nnode_modules/\nnpm-debug.log\nyarn-error.log\n\n# BUCK\nbuck-out/\n\\.buckd/\n*.keystore\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md\n\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\n\ncoverage/\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n  - \"stable\"\nafter_success: 'npm run coveralls'"
  },
  {
    "path": ".watchmanconfig",
    "content": "{}"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2017-2018 Tobias Meinhardt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "README.md",
    "content": "# React Native Event Listeners\n\n(This package isn't only restricted to react-native projects. The source is written in plain js with no dependencies to react-native.)\n\n[![Financial Contributors on Open Collective](https://opencollective.com/react-native-event-listeners/all/badge.svg?label=financial+contributors)](https://opencollective.com/react-native-event-listeners) [![npm version](https://badge.fury.io/js/react-native-event-listeners.svg)](https://badge.fury.io/js/react-native-event-listeners)\n[![dependencie status](https://david-dm.org/tobiasMeinhardt/react-native-event-listeners.svg)](https://david-dm.org/tobiasMeinhardt/react-native-event-listeners)\n[![dev-dependency status](https://david-dm.org/tobiasMeinhardt/react-native-event-listeners/dev-status.svg)](https://david-dm.org/tobiasMeinhardt/react-native-event-listeners?type=dev)\n[![npm](https://img.shields.io/npm/dm/react-native-event-listeners.svg)](https://www.npmjs.com/package/react-native-event-listeners)\n[![npm](https://img.shields.io/npm/dt/react-native-event-listeners.svg)](https://www.npmjs.com/package/react-native-event-listeners)\n[![travis build](https://travis-ci.org/meinto/react-native-event-listeners.svg?branch=master)](https://travis-ci.org/meinto/react-native-event-listeners)\n[![Coverage Status](https://coveralls.io/repos/github/meinto/react-native-event-listeners/badge.svg?branch=master)](https://coveralls.io/github/meinto/react-native-event-listeners?branch=master)\n\n## Why\n\nIn some very specific cases it can be charming to have a simple global event listener. While working with global event listeners **you don't have to pass touch events through the component tree** into other components or can **bypass easily the redux architecture** for example.\n\n## Installation\n\n```\nnpm install --save react-native-event-listeners\n```\n\nor\n\n```\nyarn add react-native-event-listeners\n```\n\n## Usage Example\n\n*Hint: The event listeners also work across different files. You only have to import the ```EventRegister``` in every file you need to send or receive your events.*\n\n```javascript\nimport { EventRegister } from 'react-native-event-listeners'\n\n/*\n * RECEIVER COMPONENT\n */\nclass Receiver extends PureComponent {\n    constructor(props) {\n        super(props)\n        \n        this.state = {\n            data: 'no data',\n        }\n    }\n    \n    componentWillMount() {\n        this.listener = EventRegister.addEventListener('myCustomEvent', (data) => {\n            this.setState({\n                data,\n            })\n        })\n    }\n    \n    componentWillUnmount() {\n        EventRegister.removeEventListener(this.listener)\n    }\n    \n    render() {\n        return <Text>{this.state.data}</Text>\n    }\n}\n\n/*\n * SENDER COMPONENT\n */\nconst Sender = (props) => (\n    <TouchableHighlight\n        onPress={() => {\n            EventRegister.emit('myCustomEvent', 'it works!!!')\n        })\n    ><Text>Send Event</Text></TouchableHighlight>\n)\n```\n\n## API\n\n```javascript\n// import\nimport { EventRegister } from 'react-native-event-listeners'\n```\n\n| static method       | return value      | description                                                    |\n| :------------------ | :---------------- | :------------------------------------------------------------- |\n| addEventListener    | string \\| boolean | return value is the id of the event listener or false on error |\n| removeEventListener | boolean           | true on success otherwise false                                |\n| removeAllListeners  | boolean           | true on success otherwise false                                |\n| emitEvent           | void              | no return value                                                |\n| on                  | string \\| boolean | **shorthand** for addEventListener                             |\n| rm                  | boolean           | **shorthand** for removeEventListener                          |\n| rmAll               | boolean           | **shorthand** for removeAllListeners                           |\n| emit                | void              | **shorthand** for emitEvent                                    |\n\n\n## Contributors\n\n### Code Contributors\n\nThis project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].\n<a href=\"https://github.com/meinto/react-native-event-listeners/graphs/contributors\"><img src=\"https://opencollective.com/react-native-event-listeners/contributors.svg?width=890&button=false\" /></a>\n\n### Financial Contributors\n\nBecome a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/react-native-event-listeners/contribute)]\n\n#### Individuals\n\n<a href=\"https://opencollective.com/react-native-event-listeners\"><img src=\"https://opencollective.com/react-native-event-listeners/individuals.svg?width=890\"></a>\n\n#### Organizations\n\nSupport this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/react-native-event-listeners/contribute)]\n\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/0/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/0/avatar.svg\"></a>\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/1/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/1/avatar.svg\"></a>\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/2/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/2/avatar.svg\"></a>\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/3/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/3/avatar.svg\"></a>\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/4/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/4/avatar.svg\"></a>\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/5/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/5/avatar.svg\"></a>\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/6/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/6/avatar.svg\"></a>\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/7/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/7/avatar.svg\"></a>\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/8/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/8/avatar.svg\"></a>\n<a href=\"https://opencollective.com/react-native-event-listeners/organization/9/website\"><img src=\"https://opencollective.com/react-native-event-listeners/organization/9/avatar.svg\"></a>\n"
  },
  {
    "path": "__tests__/__snapshots__/index.test.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`EventRegister tests tests that eventlisteners are added properly 1`] = `\nObject {\n  \"count\": 3,\n  \"refs\": Object {\n    \"l1\": Object {\n      \"callback\": [Function],\n      \"name\": \"test\",\n    },\n    \"l2\": Object {\n      \"callback\": [Function],\n      \"name\": \"test\",\n    },\n    \"l3\": Object {\n      \"callback\": [Function],\n      \"name\": \"test\",\n    },\n  },\n}\n`;\n\nexports[`EventRegister tests tests that removeAllListeners works properly 1`] = `\nObject {\n  \"count\": 3,\n  \"refs\": Object {},\n}\n`;\n\nexports[`EventRegister tests tests that removeEventListener works properly 1`] = `\nObject {\n  \"count\": 3,\n  \"refs\": Object {\n    \"l1\": Object {\n      \"callback\": [Function],\n      \"name\": \"test\",\n    },\n    \"l3\": Object {\n      \"callback\": [Function],\n      \"name\": \"test\",\n    },\n  },\n}\n`;\n\n"
  },
  {
    "path": "__tests__/index.test.js",
    "content": "import { EventRegister } from '../index'\n\ndescribe('EventRegister tests', () => {\n\n  beforeEach(() => {\n    EventRegister._Listeners = {\n      count: 0,\n      refs: {},\n    }\n  })\n\n  const _addEventListener = (name = 'test', func = () => {}) => {\n    return EventRegister.addEventListener(name, func)\n  }\n\n\n  it('tests that eventlisteners are added properly', () => {\n    const id = _addEventListener()\n    _addEventListener()\n    _addEventListener()\n    expect(id).toBe('l1')\n    expect(EventRegister._Listeners).toMatchSnapshot()\n  })\n\n\n  it('tests that removeEventListener works properly', () => {\n    _addEventListener()\n    const id = _addEventListener()\n    _addEventListener()\n\n    const removed = EventRegister.removeEventListener(id)\n    expect(EventRegister._Listeners).toMatchSnapshot()\n    expect(removed).toBe(true)\n\n    const removed2 = EventRegister.removeEventListener('idNotAvailable')\n    expect(removed2).toBe(true)\n\n    const removed3 = EventRegister.removeEventListener(123)\n    expect(removed3).toBe(false)\n  })\n\n\n  it('tests that removeAllListeners works properly', () => {\n    _addEventListener()\n    _addEventListener()\n    _addEventListener()\n\n    const removed = EventRegister.removeAllListeners()\n    expect(EventRegister._Listeners).toMatchSnapshot()\n    expect(removed).toBe(true)\n  })\n\n\n  it('tests that emitEvent works properly', () => {\n    const mockFunc1 = jest.fn()\n    const mockFunc2 = jest.fn()\n    const mockFunc3 = jest.fn()\n    _addEventListener('test1', mockFunc1)\n    _addEventListener('test2', mockFunc2)\n    _addEventListener('test3', mockFunc3)\n    EventRegister.emitEvent('test1', { mockValue: 'mock 1' })\n    expect(mockFunc1).toHaveBeenCalledWith({ mockValue: 'mock 1' })\n    EventRegister.emitEvent('test3', { mockValue: 'mock 3' })\n    expect(mockFunc3).toHaveBeenCalledWith({ mockValue: 'mock 3' })\n  })\n\n\n  it('tests that removed callbacks are not called', () => {\n    const mockFunc1 = jest.fn()\n    const mockFunc2 = jest.fn()\n    const mockFunc3 = jest.fn()\n    const id = _addEventListener('test1', mockFunc1)\n    _addEventListener('test2', mockFunc2)\n    _addEventListener('test3', mockFunc3)\n    EventRegister.removeEventListener(id)\n    EventRegister.emitEvent('test1', { mockValue: 'mock 1' })\n    expect(mockFunc1).not.toHaveBeenCalled()\n    EventRegister.emitEvent('test3', { mockValue: 'mock 3' })\n    expect(mockFunc3).toHaveBeenCalledWith({ mockValue: 'mock 3' })\n\n    _addEventListener('test1', mockFunc1)\n    EventRegister.emitEvent('test1', { mockValue: 'mock 1' })\n    expect(mockFunc1).toHaveBeenCalledWith({ mockValue: 'mock 1' })\n  })\n\n  /* shorthands */\n  it('tests that addEventListener is called with shorthand \"on\"', () => {\n    EventRegister.addEventListener = jest.fn()\n    const func = jest.fn()\n    EventRegister.on('name', func)\n    expect(EventRegister.addEventListener).toHaveBeenCalledWith('name', func)\n  })\n\n\n  it('tests that removeEventListener is called with shorthand \"rm\"', () => {\n    EventRegister.removeEventListener = jest.fn(() => {\n      return 'removed'\n    })\n    const id = _addEventListener()\n\n    const removed = EventRegister.rm(id)\n    expect(EventRegister.removeEventListener).toHaveBeenCalledWith(id)\n    expect(removed).toBe('removed')\n  })\n\n\n  it('tests that removeAllListeners is called with shorthand \"rmAll\"', () => {\n    EventRegister.removeAllListeners = jest.fn(() => {\n      return 'removed'\n    })\n    _addEventListener()\n    _addEventListener()\n    _addEventListener()\n    \n    const removed = EventRegister.rmAll()\n    expect(EventRegister.removeAllListeners).toHaveBeenCalled()\n    expect(removed).toBe('removed')\n  })\n\n\n  it('tests that emitEvent is called with shorthand \"emit\"', () => {\n    EventRegister.emitEvent = jest.fn() \n    EventRegister.emit('test', {\n      mockValue: 'val',\n    })\n    expect(EventRegister.emitEvent).toHaveBeenCalledWith('test', {\n      mockValue: 'val',\n    })\n  })\n\n})\n"
  },
  {
    "path": "app.json",
    "content": "{\n  \"name\": \"reactNativeMirror\",\n  \"displayName\": \"reactNativeMirror\"\n}"
  },
  {
    "path": "index.d.ts",
    "content": "declare module 'react-native-event-listeners' {\n  type Callback = (data: any) => void;\n\n  class EventRegister {\n    public static addEventListener(eventName: string, callback: Callback): string | boolean\n\n    public static removeEventListener(id: string): boolean\n\n    public static removeAllListeners(): boolean\n\n    public static emitEvent(eventName: string, data?: any): void\n\n    // shortener\n    public static on(eventName: string, callback: Callback): string | boolean\n\n    public static rm(id: string): boolean\n\n    public static rmAll(): boolean\n\n    public static emit(eventName: string, data?: any): void\n  }\n\n  export { EventRegister };\n}\n"
  },
  {
    "path": "index.js",
    "content": "import type from 'type-detect'\n\nclass EventRegister {\n\n  static _Listeners = {\n    count: 0,\n    refs: {},\n  }\n\n  static addEventListener(eventName, callback) {\n    if (\n      type(eventName) === 'string' &&\n      type(callback) === 'function'\n    ) {\n      EventRegister._Listeners.count++\n      const eventId = 'l' + EventRegister._Listeners.count\n      EventRegister._Listeners.refs[eventId] = {\n        name: eventName,\n        callback,\n      }\n      return eventId\n    }\n    return false\n  }\n\n  static removeEventListener(id) {\n    if (type(id) === 'string') {\n      return delete EventRegister._Listeners.refs[id]\n    }\n    return false\n  }\n\n  static removeAllListeners() {\n    let removeError = false\n    Object.keys(EventRegister._Listeners.refs).forEach(_id => {\n      const removed = delete EventRegister._Listeners.refs[_id]\n      removeError = (!removeError) ? !removed : removeError\n    })\n    return !removeError\n  }\n\n  static emitEvent(eventName, data) {\n    Object.keys(EventRegister._Listeners.refs).forEach(_id => {\n      if (\n        EventRegister._Listeners.refs[_id] &&\n        eventName === EventRegister._Listeners.refs[_id].name\n      )\n        EventRegister._Listeners.refs[_id].callback(data)\n    })\n  }\n\n  /*\n   * shortener\n   */\n  static on(eventName, callback) {\n    return EventRegister.addEventListener(eventName, callback)\n  }\n\n  static rm(eventName) {\n    return EventRegister.removeEventListener(eventName)\n  }\n\n  static rmAll() {\n    return EventRegister.removeAllListeners()\n  }\n\n  static emit(eventName, data) {\n    EventRegister.emitEvent(eventName, data)\n  }\n\n} \n\nexport { EventRegister }\n"
  },
  {
    "path": "jsconfig.json",
    "content": "{\n    \"compilerOptions\": {\n        \"allowJs\": true,\n        \"allowSyntheticDefaultImports\": true\n    },\n    \"exclude\": [\n        \"node_modules\"\n    ]\n}"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"react-native-event-listeners\",\n  \"version\": \"1.0.7\",\n  \"author\": \"Tobias Meinhardt <tobias.meinhardt89@gmail.com>\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node node_modules/react-native/local-cli/cli.js start\",\n    \"test\": \"jest --no-cache\",\n    \"coveralls\": \"cat ./coverage/lcov.info | ./node_modules/.bin/coveralls\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/tobiasMeinhardt/react-native-event-listeners\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/tobiasMeinhardt/react-native-event-listeners/issues\"\n  },\n  \"keywords\": [\n    \"react\",\n    \"react-native\",\n    \"event listeners\",\n    \"listeners\",\n    \"events\"\n  ],\n  \"tags\": [\n    \"react\",\n    \"react-native\",\n    \"event listeners\",\n    \"listeners\",\n    \"events\"\n  ],\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"type-detect\": \"^4.0.8\"\n  },\n  \"devDependencies\": {\n    \"@babel/plugin-proposal-class-properties\": \"^7.7.0\",\n    \"@babel/plugin-syntax-class-properties\": \"^7.2.0\",\n    \"@babel/preset-env\": \"^7.7.1\",\n    \"coveralls\": \"^3.0.7\",\n    \"jest\": \"^24.9.0\"\n  },\n  \"jest\": {\n    \"collectCoverage\": true,\n    \"collectCoverageFrom\": [\n      \"index.js\"\n    ]\n  }\n}\n"
  }
]