master e8ad74448054 cached
64 files
206.1 KB
55.4k tokens
4 symbols
1 requests
Download .txt
Showing preview only (223K chars total). Download the full file or copy to clipboard to get everything.
Repository: atfzl/eslint-plugin-css-modules
Branch: master
Commit: e8ad74448054
Files: 64
Total size: 206.1 KB

Directory structure:
gitextract_5yr9mmz_/

├── .babelrc
├── .eslintrc
├── .flowconfig
├── .gitignore
├── .travis.yml
├── README.md
├── example/
│   ├── .eslintrc
│   ├── foo.scss
│   ├── index.js
│   └── tester.js
├── flow-typed/
│   └── npm/
│       ├── babel-cli_vx.x.x.js
│       ├── babel-eslint_vx.x.x.js
│       ├── babel-plugin-syntax-flow_vx.x.x.js
│       ├── babel-plugin-transform-flow-strip-types_vx.x.x.js
│       ├── babel-preset-es2015_vx.x.x.js
│       ├── babel-preset-stage-1_vx.x.x.js
│       ├── babel-watch_vx.x.x.js
│       ├── eslint-config-standard_vx.x.x.js
│       ├── eslint-plugin-flowtype_vx.x.x.js
│       ├── eslint-plugin-import_vx.x.x.js
│       ├── eslint-plugin-promise_vx.x.x.js
│       ├── eslint-plugin-standard_vx.x.x.js
│       ├── eslint_vx.x.x.js
│       ├── flow-bin_v0.x.x.js
│       ├── gonzales-pe_vx.x.x.js
│       ├── lodash_v4.x.x.js
│       ├── mocha_v3.1.x.js
│       └── nodemon_vx.x.x.js
├── lib/
│   ├── core/
│   │   ├── index.js
│   │   └── traversalUtils.js
│   ├── index.js
│   ├── rules/
│   │   ├── index.js
│   │   ├── no-undef-class.js
│   │   └── no-unused-class.js
│   └── types/
│       └── index.js
├── package.json
└── test/
    ├── files/
    │   ├── composes1.scss
    │   ├── composesMultiple1.scss
    │   ├── export1.scss
    │   ├── export2.scss
    │   ├── extend1.scss
    │   ├── foo.js
    │   ├── global1.scss
    │   ├── noUndefClass1.less
    │   ├── noUndefClass1.scss
    │   ├── noUndefClass3.scss
    │   ├── noUnusedClass1.less
    │   ├── noUnusedClass1.scss
    │   ├── noUnusedClass2.scss
    │   ├── noUnusedClass3.scss
    │   ├── parentSelector1.scss
    │   ├── parentSelector2.scss
    │   ├── parentSelector3.scss
    │   ├── parentSelector4.scss
    │   ├── parentSelector5.scss
    │   ├── parentSelector6.scss
    │   ├── parentSelector7.scss
    │   ├── parentSelector8.scss
    │   ├── root1.scss
    │   └── unparsable.scss
    ├── lib/
    │   ├── core/
    │   │   └── traversalUtils.test.js
    │   └── rules/
    │       ├── no-undef-class.test.js
    │       └── no-unused-class.test.js
    └── utils.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .babelrc
================================================
{
  "presets": ["@babel/preset-env"],
  "plugins": [
    "@babel/plugin-syntax-flow",
    "@babel/transform-flow-strip-types",
    "@babel/plugin-proposal-export-default-from"
  ],
  "sourceMaps": "inline"
}


================================================
FILE: .eslintrc
================================================
{
  "parser": "@babel/eslint-parser",
  "extends": [
    "standard",
    "plugin:import/errors",
    "plugin:import/warnings",
    "plugin:mocha/recommended"
  ],
  "env": {
    "es6": true,
    "node": true
  },
  "rules": {
    "semi": [1, "always"],
    "camelcase": 0,
    "comma-dangle": 0
  }
}


================================================
FILE: .flowconfig
================================================
[ignore]
build/

[include]
lib/

[version]
^0.36.0


================================================
FILE: .gitignore
================================================
node_modules
.DS_Store

build
npm-debug.log


================================================
FILE: .travis.yml
================================================
language: node_js
node_js:
  - 4
  - 6


================================================
FILE: README.md
================================================
# eslint-plugin-css-modules

[![Build Status](https://travis-ci.org/atfzl/eslint-plugin-css-modules.svg?branch=master)](https://travis-ci.org/atfzl/eslint-plugin-css-modules)

This plugin intends to help you in tracking down problems when you are using css-modules. It tells if you are using a non-existent css/scss/less class in js or if you forgot to use some classes which you declared in css/scss/less.

## Rules

* `css-modules/no-unused-class`: You must use all the classes defined in css/scss/less file.

>If you still want to mark a class as used, then use this comment on top of your file
```js
/* eslint css-modules/no-unused-class: [2, { markAsUsed: ['container'] }] */
```
where container is the css class that you want to mark as used.
Add all such classes in the array.

>If you use the `camelCase` option of `css-loader`, you must also enabled it for this plugin
```js
/* eslint css-modules/no-unused-class: [2, { camelCase: true }] */
```

* `css-modules/no-undef-class`: You must not use a non existing class, or a property that hasn't been exported using the [:export keyword](https://github.com/css-modules/icss#export).

>If you use the `camelCase` option of `css-loader`, you must also enabled it for this plugin
```js
/* eslint css-modules/no-undef-class: [2, { camelCase: true }] */
```

## Installation

```
npm i --save-dev eslint-plugin-css-modules
```

## Usage:

.eslintrc
```json
{
  "plugins": [
    "css-modules"
  ],
  "extends": [
    "plugin:css-modules/recommended"
  ]
}
```

You may also tweak the rules individually. For instance, if you use the [camelCase](https://github.com/webpack-contrib/css-loader#camelcase) option of webpack's css-loader:

```json
{
  "plugins": [
    "css-modules"
  ],
  "extends": [
    "plugin:css-modules/recommended"
  ],
  "rules": {
    "css-modules/no-unused-class": [2, { "camelCase": true }],
    "css-modules/no-undef-class": [2, { "camelCase": true }]
  }
}
```

The camelCase option has 4 possible values, see [css-loader#camelCase](https://github.com/webpack-contrib/css-loader#camelcase) for description:
```js
true | "dashes" | "only" | "dashes-only"
```

## Specifying base path

You can specify path for the base directory via plugin settings in .eslintrc. This is used by the plugin to resolve absolute (S)CSS paths:

```json
{
  "settings": {
    "css-modules": {
      "basePath": "app/scripts/..."
    }
  }
}
```

## Screen Shot

![ScreenShot](https://raw.githubusercontent.com/atfzl/eslint-plugin-css-modules/master/screenshots/screenshot3.png)

```
   1:8   error  Unused classes found: container  css-modules/no-unused-class
   5:17  error  Class 'containr' not found       css-modules/no-undef-class
  10:26  error  Class 'foo' not found            css-modules/no-undef-class
```

scss:

```scss
/* .head is global, will not be used in js */
:global(.head) {
  color: green;
}

.container {
  width: 116px;

  i {
    font-size: 2.2rem;
  }

  .button {
    padding: 7px 0 0 5px;
  }
}

.footer {
  color: cyan;
}
```


================================================
FILE: example/.eslintrc
================================================
{
  "plugins": [
    "css-modules"
  ],
  "extends": [
    "plugin:css-modules/recommended"
  ]
}


================================================
FILE: example/foo.scss
================================================
/* .head is global, will not be used in js */
:global(.head) {
  color: green;
}

.container {
  width: 116px;

  i {
    font-size: 2.2rem;
  }

  .button {
    padding: 7px 0 0 5px;
  }
}

.footer {
  color: cyan;
}


================================================
FILE: example/index.js
================================================
/* eslint css-modules/no-unused-class: [2, { markAsUsed: ['container'] }] */

import s from './foo.scss';

const component = () => {
  const cls = s['containr'];

  s[cls];

  s._getCss();

  return (
    <div className={`${s.foo}`}>
      text
      <div className={`${cls} ${s.button}`}>
      </div>
      <div className={s.footer}>
        Footer
      </div>
    </div>
  );
};

export default component;


================================================
FILE: example/tester.js
================================================
/*
   ignore this file. This just for checking logs
 */

import { RuleTester } from 'eslint';

import rule from '../lib/rules/no-undef-class';

import { test } from '../test/utils';

const ruleTester = new RuleTester();

ruleTester.run('no-undef-class', rule, {
  valid: [
    { code: '' },
  ],
  invalid: [
    test({
      code: `
        import s from './gonzalesFail1.css';

        export default Foo = () => (
           <div className={s.foo}></div>
        );
      `,
      errors: ['foo'],
    }),
  ]
});


================================================
FILE: flow-typed/npm/babel-cli_vx.x.x.js
================================================
// flow-typed signature: 670228b673fbf5d953585356d4345691
// flow-typed version: <<STUB>>/babel-cli_v^6.18.0/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'babel-cli'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'babel-cli' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'babel-cli/bin/babel-doctor' {
  declare module.exports: any;
}

declare module 'babel-cli/bin/babel-external-helpers' {
  declare module.exports: any;
}

declare module 'babel-cli/bin/babel-node' {
  declare module.exports: any;
}

declare module 'babel-cli/bin/babel' {
  declare module.exports: any;
}

declare module 'babel-cli/lib/_babel-node' {
  declare module.exports: any;
}

declare module 'babel-cli/lib/babel-external-helpers' {
  declare module.exports: any;
}

declare module 'babel-cli/lib/babel-node' {
  declare module.exports: any;
}

declare module 'babel-cli/lib/babel/dir' {
  declare module.exports: any;
}

declare module 'babel-cli/lib/babel/file' {
  declare module.exports: any;
}

declare module 'babel-cli/lib/babel/index' {
  declare module.exports: any;
}

declare module 'babel-cli/lib/babel/util' {
  declare module.exports: any;
}

// Filename aliases
declare module 'babel-cli/bin/babel-doctor.js' {
  declare module.exports: $Exports<'babel-cli/bin/babel-doctor'>;
}
declare module 'babel-cli/bin/babel-external-helpers.js' {
  declare module.exports: $Exports<'babel-cli/bin/babel-external-helpers'>;
}
declare module 'babel-cli/bin/babel-node.js' {
  declare module.exports: $Exports<'babel-cli/bin/babel-node'>;
}
declare module 'babel-cli/bin/babel.js' {
  declare module.exports: $Exports<'babel-cli/bin/babel'>;
}
declare module 'babel-cli/index' {
  declare module.exports: $Exports<'babel-cli'>;
}
declare module 'babel-cli/index.js' {
  declare module.exports: $Exports<'babel-cli'>;
}
declare module 'babel-cli/lib/_babel-node.js' {
  declare module.exports: $Exports<'babel-cli/lib/_babel-node'>;
}
declare module 'babel-cli/lib/babel-external-helpers.js' {
  declare module.exports: $Exports<'babel-cli/lib/babel-external-helpers'>;
}
declare module 'babel-cli/lib/babel-node.js' {
  declare module.exports: $Exports<'babel-cli/lib/babel-node'>;
}
declare module 'babel-cli/lib/babel/dir.js' {
  declare module.exports: $Exports<'babel-cli/lib/babel/dir'>;
}
declare module 'babel-cli/lib/babel/file.js' {
  declare module.exports: $Exports<'babel-cli/lib/babel/file'>;
}
declare module 'babel-cli/lib/babel/index.js' {
  declare module.exports: $Exports<'babel-cli/lib/babel/index'>;
}
declare module 'babel-cli/lib/babel/util.js' {
  declare module.exports: $Exports<'babel-cli/lib/babel/util'>;
}


================================================
FILE: flow-typed/npm/babel-eslint_vx.x.x.js
================================================
// flow-typed signature: c629444c86e11ef6fd2f3f7bc4c49632
// flow-typed version: <<STUB>>/babel-eslint_v^7.1.0/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'babel-eslint'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'babel-eslint' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'babel-eslint/babylon-to-espree/attachComments' {
  declare module.exports: any;
}

declare module 'babel-eslint/babylon-to-espree/convertTemplateType' {
  declare module.exports: any;
}

declare module 'babel-eslint/babylon-to-espree/index' {
  declare module.exports: any;
}

declare module 'babel-eslint/babylon-to-espree/toAST' {
  declare module.exports: any;
}

declare module 'babel-eslint/babylon-to-espree/toToken' {
  declare module.exports: any;
}

declare module 'babel-eslint/babylon-to-espree/toTokens' {
  declare module.exports: any;
}

// Filename aliases
declare module 'babel-eslint/babylon-to-espree/attachComments.js' {
  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/attachComments'>;
}
declare module 'babel-eslint/babylon-to-espree/convertTemplateType.js' {
  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/convertTemplateType'>;
}
declare module 'babel-eslint/babylon-to-espree/index.js' {
  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/index'>;
}
declare module 'babel-eslint/babylon-to-espree/toAST.js' {
  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/toAST'>;
}
declare module 'babel-eslint/babylon-to-espree/toToken.js' {
  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/toToken'>;
}
declare module 'babel-eslint/babylon-to-espree/toTokens.js' {
  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/toTokens'>;
}
declare module 'babel-eslint/index' {
  declare module.exports: $Exports<'babel-eslint'>;
}
declare module 'babel-eslint/index.js' {
  declare module.exports: $Exports<'babel-eslint'>;
}


================================================
FILE: flow-typed/npm/babel-plugin-syntax-flow_vx.x.x.js
================================================
// flow-typed signature: 5d7c2096f6bc30ca468313001f450834
// flow-typed version: <<STUB>>/babel-plugin-syntax-flow_v^6.18.0/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'babel-plugin-syntax-flow'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'babel-plugin-syntax-flow' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'babel-plugin-syntax-flow/lib/index' {
  declare module.exports: any;
}

// Filename aliases
declare module 'babel-plugin-syntax-flow/lib/index.js' {
  declare module.exports: $Exports<'babel-plugin-syntax-flow/lib/index'>;
}


================================================
FILE: flow-typed/npm/babel-plugin-transform-flow-strip-types_vx.x.x.js
================================================
// flow-typed signature: 855ea31ab2c7db08a247b6cee0c102cd
// flow-typed version: <<STUB>>/babel-plugin-transform-flow-strip-types_v^6.18.0/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'babel-plugin-transform-flow-strip-types'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'babel-plugin-transform-flow-strip-types' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'babel-plugin-transform-flow-strip-types/lib/index' {
  declare module.exports: any;
}

// Filename aliases
declare module 'babel-plugin-transform-flow-strip-types/lib/index.js' {
  declare module.exports: $Exports<'babel-plugin-transform-flow-strip-types/lib/index'>;
}


================================================
FILE: flow-typed/npm/babel-preset-es2015_vx.x.x.js
================================================
// flow-typed signature: bf7573d40f6e30c6231567a9e265e245
// flow-typed version: <<STUB>>/babel-preset-es2015_v^6.18.0/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'babel-preset-es2015'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'babel-preset-es2015' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'babel-preset-es2015/lib/index' {
  declare module.exports: any;
}

// Filename aliases
declare module 'babel-preset-es2015/lib/index.js' {
  declare module.exports: $Exports<'babel-preset-es2015/lib/index'>;
}


================================================
FILE: flow-typed/npm/babel-preset-stage-1_vx.x.x.js
================================================
// flow-typed signature: 1e58255aa40e674d103a1075688c9846
// flow-typed version: <<STUB>>/babel-preset-stage-1_v^6.16.0/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'babel-preset-stage-1'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'babel-preset-stage-1' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'babel-preset-stage-1/lib/index' {
  declare module.exports: any;
}

// Filename aliases
declare module 'babel-preset-stage-1/lib/index.js' {
  declare module.exports: $Exports<'babel-preset-stage-1/lib/index'>;
}


================================================
FILE: flow-typed/npm/babel-watch_vx.x.x.js
================================================
// flow-typed signature: 1a65215b23bad8b23f7a002ddcac8dd9
// flow-typed version: <<STUB>>/babel-watch_v^2.0.6/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'babel-watch'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'babel-watch' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'babel-watch/babel-watch' {
  declare module.exports: any;
}

declare module 'babel-watch/runner' {
  declare module.exports: any;
}

// Filename aliases
declare module 'babel-watch/babel-watch.js' {
  declare module.exports: $Exports<'babel-watch/babel-watch'>;
}
declare module 'babel-watch/runner.js' {
  declare module.exports: $Exports<'babel-watch/runner'>;
}


================================================
FILE: flow-typed/npm/eslint-config-standard_vx.x.x.js
================================================
// flow-typed signature: ca8fe33f0bf67720fe5e0b904410b0ae
// flow-typed version: <<STUB>>/eslint-config-standard_v^6.2.1/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'eslint-config-standard'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'eslint-config-standard' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'eslint-config-standard/test/basic' {
  declare module.exports: any;
}

declare module 'eslint-config-standard/test/validate-config' {
  declare module.exports: any;
}

// Filename aliases
declare module 'eslint-config-standard/index' {
  declare module.exports: $Exports<'eslint-config-standard'>;
}
declare module 'eslint-config-standard/index.js' {
  declare module.exports: $Exports<'eslint-config-standard'>;
}
declare module 'eslint-config-standard/test/basic.js' {
  declare module.exports: $Exports<'eslint-config-standard/test/basic'>;
}
declare module 'eslint-config-standard/test/validate-config.js' {
  declare module.exports: $Exports<'eslint-config-standard/test/validate-config'>;
}


================================================
FILE: flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js
================================================
// flow-typed signature: 4cafa5d0a40ca126758232e98e85e341
// flow-typed version: <<STUB>>/eslint-plugin-flowtype_v^2.25.0/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'eslint-plugin-flowtype'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'eslint-plugin-flowtype' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'eslint-plugin-flowtype/bin/readmeAssertions' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/index' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/booleanStyle' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/defineFlowType' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/delimiterDangle' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/genericSpacing' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/noDupeKeys' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/noPrimitiveConstructorTypes' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/noWeakTypes' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/objectTypeDelimiter' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/requireParameterType' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/requireReturnType' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/requireValidFileAnnotation' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/requireVariableType' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/semi' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/sortKeys' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/spaceAfterTypeColon' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/spaceBeforeGenericBracket' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/spaceBeforeTypeColon' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateFunctions' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeIndexer' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeProperty' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateReturnType' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypeCastExpression' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypical' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/index' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/reporter' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/typeIdMatch' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/unionIntersectionSpacing' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/useFlowType' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/rules/validSyntax' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/checkFlowFileAnnotation' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/fuzzyStringMatch' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/getParameterName' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/getTokenAfterParens' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/getTokenBeforeParens' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/index' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/isFlowFile' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/isFlowFileAnnotation' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/iterateFunctionNodes' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/quoteName' {
  declare module.exports: any;
}

declare module 'eslint-plugin-flowtype/dist/utilities/spacingFixers' {
  declare module.exports: any;
}

// Filename aliases
declare module 'eslint-plugin-flowtype/bin/readmeAssertions.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/bin/readmeAssertions'>;
}
declare module 'eslint-plugin-flowtype/dist/index.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/index'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/booleanStyle.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/booleanStyle'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/defineFlowType.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/defineFlowType'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/delimiterDangle.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/delimiterDangle'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/genericSpacing.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/genericSpacing'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/noDupeKeys.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noDupeKeys'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/noPrimitiveConstructorTypes.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noPrimitiveConstructorTypes'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/noWeakTypes.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noWeakTypes'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/objectTypeDelimiter.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/objectTypeDelimiter'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/requireParameterType.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireParameterType'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/requireReturnType.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireReturnType'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/requireValidFileAnnotation.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireValidFileAnnotation'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/requireVariableType.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireVariableType'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/semi.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/semi'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/sortKeys.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/sortKeys'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/spaceAfterTypeColon.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/spaceAfterTypeColon'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/spaceBeforeGenericBracket.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/spaceBeforeGenericBracket'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/spaceBeforeTypeColon.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/spaceBeforeTypeColon'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateFunctions.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateFunctions'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeIndexer.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeIndexer'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeProperty.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeProperty'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateReturnType.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateReturnType'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypeCastExpression.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypeCastExpression'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypical.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypical'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/index.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/index'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/reporter.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/reporter'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/typeIdMatch.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeIdMatch'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/unionIntersectionSpacing.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/unionIntersectionSpacing'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/useFlowType.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/useFlowType'>;
}
declare module 'eslint-plugin-flowtype/dist/rules/validSyntax.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/validSyntax'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/checkFlowFileAnnotation.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/checkFlowFileAnnotation'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/fuzzyStringMatch.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/fuzzyStringMatch'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/getParameterName.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/getParameterName'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/getTokenAfterParens.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/getTokenAfterParens'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/getTokenBeforeParens.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/getTokenBeforeParens'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/index.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/index'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/isFlowFile.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/isFlowFile'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/isFlowFileAnnotation.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/isFlowFileAnnotation'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/iterateFunctionNodes.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/iterateFunctionNodes'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/quoteName.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/quoteName'>;
}
declare module 'eslint-plugin-flowtype/dist/utilities/spacingFixers.js' {
  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/spacingFixers'>;
}


================================================
FILE: flow-typed/npm/eslint-plugin-import_vx.x.x.js
================================================
// flow-typed signature: ed95a0dbf4ede73fb2995e80197fc3e2
// flow-typed version: <<STUB>>/eslint-plugin-import_v^2.0.1/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'eslint-plugin-import'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'eslint-plugin-import' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'eslint-plugin-import/config/electron' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/config/errors' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/config/react-native' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/config/react' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/config/recommended' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/config/stage-0' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/config/warnings' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/core/importType' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/core/staticRequire' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/ExportMap' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/importDeclaration' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/index' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/default' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/export' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/extensions' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/first' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/imports-first' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/max-dependencies' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/named' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/namespace' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/newline-after-import' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-absolute-path' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-amd' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-commonjs' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-deprecated' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-duplicates' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-dynamic-require' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-extraneous-dependencies' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-internal-modules' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-mutable-exports' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-named-as-default-member' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-named-as-default' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-named-default' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-namespace' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-nodejs-modules' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-restricted-paths' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-unassigned-import' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-unresolved' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/no-webpack-loader-syntax' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/order' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/prefer-default-export' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/lib/rules/unambiguous' {
  declare module.exports: any;
}

declare module 'eslint-plugin-import/memo-parser/index' {
  declare module.exports: any;
}

// Filename aliases
declare module 'eslint-plugin-import/config/electron.js' {
  declare module.exports: $Exports<'eslint-plugin-import/config/electron'>;
}
declare module 'eslint-plugin-import/config/errors.js' {
  declare module.exports: $Exports<'eslint-plugin-import/config/errors'>;
}
declare module 'eslint-plugin-import/config/react-native.js' {
  declare module.exports: $Exports<'eslint-plugin-import/config/react-native'>;
}
declare module 'eslint-plugin-import/config/react.js' {
  declare module.exports: $Exports<'eslint-plugin-import/config/react'>;
}
declare module 'eslint-plugin-import/config/recommended.js' {
  declare module.exports: $Exports<'eslint-plugin-import/config/recommended'>;
}
declare module 'eslint-plugin-import/config/stage-0.js' {
  declare module.exports: $Exports<'eslint-plugin-import/config/stage-0'>;
}
declare module 'eslint-plugin-import/config/warnings.js' {
  declare module.exports: $Exports<'eslint-plugin-import/config/warnings'>;
}
declare module 'eslint-plugin-import/lib/core/importType.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/core/importType'>;
}
declare module 'eslint-plugin-import/lib/core/staticRequire.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/core/staticRequire'>;
}
declare module 'eslint-plugin-import/lib/ExportMap.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/ExportMap'>;
}
declare module 'eslint-plugin-import/lib/importDeclaration.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/importDeclaration'>;
}
declare module 'eslint-plugin-import/lib/index.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/index'>;
}
declare module 'eslint-plugin-import/lib/rules/default.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/default'>;
}
declare module 'eslint-plugin-import/lib/rules/export.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/export'>;
}
declare module 'eslint-plugin-import/lib/rules/extensions.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/extensions'>;
}
declare module 'eslint-plugin-import/lib/rules/first.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/first'>;
}
declare module 'eslint-plugin-import/lib/rules/imports-first.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/imports-first'>;
}
declare module 'eslint-plugin-import/lib/rules/max-dependencies.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/max-dependencies'>;
}
declare module 'eslint-plugin-import/lib/rules/named.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/named'>;
}
declare module 'eslint-plugin-import/lib/rules/namespace.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/namespace'>;
}
declare module 'eslint-plugin-import/lib/rules/newline-after-import.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/newline-after-import'>;
}
declare module 'eslint-plugin-import/lib/rules/no-absolute-path.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-absolute-path'>;
}
declare module 'eslint-plugin-import/lib/rules/no-amd.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-amd'>;
}
declare module 'eslint-plugin-import/lib/rules/no-commonjs.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-commonjs'>;
}
declare module 'eslint-plugin-import/lib/rules/no-deprecated.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-deprecated'>;
}
declare module 'eslint-plugin-import/lib/rules/no-duplicates.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-duplicates'>;
}
declare module 'eslint-plugin-import/lib/rules/no-dynamic-require.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-dynamic-require'>;
}
declare module 'eslint-plugin-import/lib/rules/no-extraneous-dependencies.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-extraneous-dependencies'>;
}
declare module 'eslint-plugin-import/lib/rules/no-internal-modules.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-internal-modules'>;
}
declare module 'eslint-plugin-import/lib/rules/no-mutable-exports.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-mutable-exports'>;
}
declare module 'eslint-plugin-import/lib/rules/no-named-as-default-member.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-named-as-default-member'>;
}
declare module 'eslint-plugin-import/lib/rules/no-named-as-default.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-named-as-default'>;
}
declare module 'eslint-plugin-import/lib/rules/no-named-default.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-named-default'>;
}
declare module 'eslint-plugin-import/lib/rules/no-namespace.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-namespace'>;
}
declare module 'eslint-plugin-import/lib/rules/no-nodejs-modules.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-nodejs-modules'>;
}
declare module 'eslint-plugin-import/lib/rules/no-restricted-paths.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-restricted-paths'>;
}
declare module 'eslint-plugin-import/lib/rules/no-unassigned-import.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-unassigned-import'>;
}
declare module 'eslint-plugin-import/lib/rules/no-unresolved.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-unresolved'>;
}
declare module 'eslint-plugin-import/lib/rules/no-webpack-loader-syntax.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/no-webpack-loader-syntax'>;
}
declare module 'eslint-plugin-import/lib/rules/order.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/order'>;
}
declare module 'eslint-plugin-import/lib/rules/prefer-default-export.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/prefer-default-export'>;
}
declare module 'eslint-plugin-import/lib/rules/unambiguous.js' {
  declare module.exports: $Exports<'eslint-plugin-import/lib/rules/unambiguous'>;
}
declare module 'eslint-plugin-import/memo-parser/index.js' {
  declare module.exports: $Exports<'eslint-plugin-import/memo-parser/index'>;
}


================================================
FILE: flow-typed/npm/eslint-plugin-promise_vx.x.x.js
================================================
// flow-typed signature: 5fd6942ecac535ed44e1bdbc2d708b19
// flow-typed version: <<STUB>>/eslint-plugin-promise_v^3.3.0/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'eslint-plugin-promise'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'eslint-plugin-promise' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'eslint-plugin-promise/rules/always-return' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/avoid-new' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/catch-or-return' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/lib/has-promise-callback' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/lib/is-callback' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/lib/is-inside-callback' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/lib/is-inside-promise' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/lib/is-named-callback' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/lib/is-promise' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/no-callback-in-promise' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/no-native' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/no-nesting' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/no-promise-in-callback' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/no-return-wrap' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/param-names' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/prefer-await-to-callbacks' {
  declare module.exports: any;
}

declare module 'eslint-plugin-promise/rules/prefer-await-to-then' {
  declare module.exports: any;
}

// Filename aliases
declare module 'eslint-plugin-promise/index' {
  declare module.exports: $Exports<'eslint-plugin-promise'>;
}
declare module 'eslint-plugin-promise/index.js' {
  declare module.exports: $Exports<'eslint-plugin-promise'>;
}
declare module 'eslint-plugin-promise/rules/always-return.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/always-return'>;
}
declare module 'eslint-plugin-promise/rules/avoid-new.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/avoid-new'>;
}
declare module 'eslint-plugin-promise/rules/catch-or-return.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/catch-or-return'>;
}
declare module 'eslint-plugin-promise/rules/lib/has-promise-callback.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/lib/has-promise-callback'>;
}
declare module 'eslint-plugin-promise/rules/lib/is-callback.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/lib/is-callback'>;
}
declare module 'eslint-plugin-promise/rules/lib/is-inside-callback.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/lib/is-inside-callback'>;
}
declare module 'eslint-plugin-promise/rules/lib/is-inside-promise.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/lib/is-inside-promise'>;
}
declare module 'eslint-plugin-promise/rules/lib/is-named-callback.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/lib/is-named-callback'>;
}
declare module 'eslint-plugin-promise/rules/lib/is-promise.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/lib/is-promise'>;
}
declare module 'eslint-plugin-promise/rules/no-callback-in-promise.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/no-callback-in-promise'>;
}
declare module 'eslint-plugin-promise/rules/no-native.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/no-native'>;
}
declare module 'eslint-plugin-promise/rules/no-nesting.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/no-nesting'>;
}
declare module 'eslint-plugin-promise/rules/no-promise-in-callback.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/no-promise-in-callback'>;
}
declare module 'eslint-plugin-promise/rules/no-return-wrap.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/no-return-wrap'>;
}
declare module 'eslint-plugin-promise/rules/param-names.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/param-names'>;
}
declare module 'eslint-plugin-promise/rules/prefer-await-to-callbacks.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/prefer-await-to-callbacks'>;
}
declare module 'eslint-plugin-promise/rules/prefer-await-to-then.js' {
  declare module.exports: $Exports<'eslint-plugin-promise/rules/prefer-await-to-then'>;
}


================================================
FILE: flow-typed/npm/eslint-plugin-standard_vx.x.x.js
================================================
// flow-typed signature: 6327ffe504a28c2a1c05f1c46aa1ec71
// flow-typed version: <<STUB>>/eslint-plugin-standard_v^2.0.1/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'eslint-plugin-standard'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'eslint-plugin-standard' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'eslint-plugin-standard/rules/array-bracket-even-spacing' {
  declare module.exports: any;
}

declare module 'eslint-plugin-standard/rules/computed-property-even-spacing' {
  declare module.exports: any;
}

declare module 'eslint-plugin-standard/rules/object-curly-even-spacing' {
  declare module.exports: any;
}

declare module 'eslint-plugin-standard/tests/array-bracket-even-spacing' {
  declare module.exports: any;
}

declare module 'eslint-plugin-standard/tests/computed-property-even-spacing' {
  declare module.exports: any;
}

declare module 'eslint-plugin-standard/tests/object-curly-even-spacing' {
  declare module.exports: any;
}

// Filename aliases
declare module 'eslint-plugin-standard/index' {
  declare module.exports: $Exports<'eslint-plugin-standard'>;
}
declare module 'eslint-plugin-standard/index.js' {
  declare module.exports: $Exports<'eslint-plugin-standard'>;
}
declare module 'eslint-plugin-standard/rules/array-bracket-even-spacing.js' {
  declare module.exports: $Exports<'eslint-plugin-standard/rules/array-bracket-even-spacing'>;
}
declare module 'eslint-plugin-standard/rules/computed-property-even-spacing.js' {
  declare module.exports: $Exports<'eslint-plugin-standard/rules/computed-property-even-spacing'>;
}
declare module 'eslint-plugin-standard/rules/object-curly-even-spacing.js' {
  declare module.exports: $Exports<'eslint-plugin-standard/rules/object-curly-even-spacing'>;
}
declare module 'eslint-plugin-standard/tests/array-bracket-even-spacing.js' {
  declare module.exports: $Exports<'eslint-plugin-standard/tests/array-bracket-even-spacing'>;
}
declare module 'eslint-plugin-standard/tests/computed-property-even-spacing.js' {
  declare module.exports: $Exports<'eslint-plugin-standard/tests/computed-property-even-spacing'>;
}
declare module 'eslint-plugin-standard/tests/object-curly-even-spacing.js' {
  declare module.exports: $Exports<'eslint-plugin-standard/tests/object-curly-even-spacing'>;
}


================================================
FILE: flow-typed/npm/eslint_vx.x.x.js
================================================
// flow-typed signature: 5f87357a0ad855387da13a010a5c9c1e
// flow-typed version: <<STUB>>/eslint_v^3.8.1/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'eslint'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'eslint' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'eslint/bin/eslint' {
  declare module.exports: any;
}

declare module 'eslint/conf/cli-options' {
  declare module.exports: any;
}

declare module 'eslint/conf/environments' {
  declare module.exports: any;
}

declare module 'eslint/conf/eslint-all' {
  declare module.exports: any;
}

declare module 'eslint/conf/eslint-recommended' {
  declare module.exports: any;
}

declare module 'eslint/lib/api' {
  declare module.exports: any;
}

declare module 'eslint/lib/ast-utils' {
  declare module.exports: any;
}

declare module 'eslint/lib/cli-engine' {
  declare module.exports: any;
}

declare module 'eslint/lib/cli' {
  declare module.exports: any;
}

declare module 'eslint/lib/code-path-analysis/code-path-analyzer' {
  declare module.exports: any;
}

declare module 'eslint/lib/code-path-analysis/code-path-segment' {
  declare module.exports: any;
}

declare module 'eslint/lib/code-path-analysis/code-path-state' {
  declare module.exports: any;
}

declare module 'eslint/lib/code-path-analysis/code-path' {
  declare module.exports: any;
}

declare module 'eslint/lib/code-path-analysis/debug-helpers' {
  declare module.exports: any;
}

declare module 'eslint/lib/code-path-analysis/fork-context' {
  declare module.exports: any;
}

declare module 'eslint/lib/code-path-analysis/id-generator' {
  declare module.exports: any;
}

declare module 'eslint/lib/config' {
  declare module.exports: any;
}

declare module 'eslint/lib/config/autoconfig' {
  declare module.exports: any;
}

declare module 'eslint/lib/config/config-file' {
  declare module.exports: any;
}

declare module 'eslint/lib/config/config-initializer' {
  declare module.exports: any;
}

declare module 'eslint/lib/config/config-ops' {
  declare module.exports: any;
}

declare module 'eslint/lib/config/config-rule' {
  declare module.exports: any;
}

declare module 'eslint/lib/config/config-validator' {
  declare module.exports: any;
}

declare module 'eslint/lib/config/environments' {
  declare module.exports: any;
}

declare module 'eslint/lib/config/plugins' {
  declare module.exports: any;
}

declare module 'eslint/lib/eslint' {
  declare module.exports: any;
}

declare module 'eslint/lib/file-finder' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/checkstyle' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/codeframe' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/compact' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/html' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/jslint-xml' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/json' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/junit' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/stylish' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/table' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/tap' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/unix' {
  declare module.exports: any;
}

declare module 'eslint/lib/formatters/visualstudio' {
  declare module.exports: any;
}

declare module 'eslint/lib/ignored-paths' {
  declare module.exports: any;
}

declare module 'eslint/lib/internal-rules/internal-consistent-docs-description' {
  declare module.exports: any;
}

declare module 'eslint/lib/internal-rules/internal-no-invalid-meta' {
  declare module.exports: any;
}

declare module 'eslint/lib/load-rules' {
  declare module.exports: any;
}

declare module 'eslint/lib/logging' {
  declare module.exports: any;
}

declare module 'eslint/lib/options' {
  declare module.exports: any;
}

declare module 'eslint/lib/rule-context' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/accessor-pairs' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/array-bracket-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/array-callback-return' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/arrow-body-style' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/arrow-parens' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/arrow-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/block-scoped-var' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/block-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/brace-style' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/callback-return' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/camelcase' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/capitalized-comments' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/class-methods-use-this' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/comma-dangle' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/comma-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/comma-style' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/complexity' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/computed-property-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/consistent-return' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/consistent-this' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/constructor-super' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/curly' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/default-case' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/dot-location' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/dot-notation' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/eol-last' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/eqeqeq' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/func-call-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/func-name-matching' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/func-names' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/func-style' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/generator-star-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/global-require' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/guard-for-in' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/handle-callback-err' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/id-blacklist' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/id-length' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/id-match' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/indent' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/init-declarations' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/jsx-quotes' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/key-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/keyword-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/line-comment-position' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/linebreak-style' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/lines-around-comment' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/lines-around-directive' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/max-depth' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/max-len' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/max-lines' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/max-nested-callbacks' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/max-params' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/max-statements-per-line' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/max-statements' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/multiline-ternary' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/new-cap' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/new-parens' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/newline-after-var' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/newline-before-return' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/newline-per-chained-call' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-alert' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-array-constructor' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-await-in-loop' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-bitwise' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-caller' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-case-declarations' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-catch-shadow' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-class-assign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-cond-assign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-confusing-arrow' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-console' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-const-assign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-constant-condition' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-continue' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-control-regex' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-debugger' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-delete-var' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-div-regex' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-dupe-args' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-dupe-class-members' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-dupe-keys' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-duplicate-case' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-duplicate-imports' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-else-return' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-empty-character-class' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-empty-function' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-empty-pattern' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-empty' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-eq-null' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-eval' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-ex-assign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-extend-native' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-extra-bind' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-extra-boolean-cast' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-extra-label' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-extra-parens' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-extra-semi' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-fallthrough' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-floating-decimal' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-func-assign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-global-assign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-implicit-coercion' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-implicit-globals' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-implied-eval' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-inline-comments' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-inner-declarations' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-invalid-regexp' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-invalid-this' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-irregular-whitespace' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-iterator' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-label-var' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-labels' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-lone-blocks' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-lonely-if' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-loop-func' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-magic-numbers' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-mixed-operators' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-mixed-requires' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-mixed-spaces-and-tabs' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-multi-assign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-multi-spaces' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-multi-str' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-multiple-empty-lines' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-native-reassign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-negated-condition' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-negated-in-lhs' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-nested-ternary' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-new-func' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-new-object' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-new-require' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-new-symbol' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-new-wrappers' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-new' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-obj-calls' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-octal-escape' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-octal' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-param-reassign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-path-concat' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-plusplus' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-process-env' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-process-exit' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-proto' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-prototype-builtins' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-redeclare' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-regex-spaces' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-restricted-globals' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-restricted-imports' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-restricted-modules' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-restricted-properties' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-restricted-syntax' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-return-assign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-return-await' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-script-url' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-self-assign' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-self-compare' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-sequences' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-shadow-restricted-names' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-shadow' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-spaced-func' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-sparse-arrays' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-sync' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-tabs' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-template-curly-in-string' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-ternary' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-this-before-super' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-throw-literal' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-trailing-spaces' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-undef-init' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-undef' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-undefined' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-underscore-dangle' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-unexpected-multiline' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-unmodified-loop-condition' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-unneeded-ternary' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-unreachable' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-unsafe-finally' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-unsafe-negation' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-unused-expressions' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-unused-labels' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-unused-vars' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-use-before-define' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-useless-call' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-useless-computed-key' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-useless-concat' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-useless-constructor' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-useless-escape' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-useless-rename' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-useless-return' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-var' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-void' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-warning-comments' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-whitespace-before-property' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/no-with' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/object-curly-newline' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/object-curly-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/object-property-newline' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/object-shorthand' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/one-var-declaration-per-line' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/one-var' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/operator-assignment' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/operator-linebreak' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/padded-blocks' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/prefer-arrow-callback' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/prefer-const' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/prefer-destructuring' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/prefer-numeric-literals' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/prefer-promise-reject-errors' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/prefer-reflect' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/prefer-rest-params' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/prefer-spread' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/prefer-template' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/quote-props' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/quotes' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/radix' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/require-await' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/require-jsdoc' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/require-yield' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/rest-spread-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/semi-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/semi' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/sort-imports' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/sort-keys' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/sort-vars' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/space-before-blocks' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/space-before-function-paren' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/space-in-parens' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/space-infix-ops' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/space-unary-ops' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/spaced-comment' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/strict' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/symbol-description' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/template-curly-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/template-tag-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/unicode-bom' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/use-isnan' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/valid-jsdoc' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/valid-typeof' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/vars-on-top' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/wrap-iife' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/wrap-regex' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/yield-star-spacing' {
  declare module.exports: any;
}

declare module 'eslint/lib/rules/yoda' {
  declare module.exports: any;
}

declare module 'eslint/lib/testers/event-generator-tester' {
  declare module.exports: any;
}

declare module 'eslint/lib/testers/rule-tester' {
  declare module.exports: any;
}

declare module 'eslint/lib/timing' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/backward-token-comment-cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/backward-token-cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/cursors' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/decorative-cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/filter-cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/forward-token-comment-cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/forward-token-cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/index' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/limit-cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/padded-token-cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/skip-cursor' {
  declare module.exports: any;
}

declare module 'eslint/lib/token-store/utils' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/comment-event-generator' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/glob-util' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/glob' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/hash' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/keywords' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/module-resolver' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/node-event-generator' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/npm-util' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/path-util' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/patterns/letters' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/rule-fixer' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/source-code-fixer' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/source-code-util' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/source-code' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/traverser' {
  declare module.exports: any;
}

declare module 'eslint/lib/util/xml-escape' {
  declare module.exports: any;
}

// Filename aliases
declare module 'eslint/bin/eslint.js' {
  declare module.exports: $Exports<'eslint/bin/eslint'>;
}
declare module 'eslint/conf/cli-options.js' {
  declare module.exports: $Exports<'eslint/conf/cli-options'>;
}
declare module 'eslint/conf/environments.js' {
  declare module.exports: $Exports<'eslint/conf/environments'>;
}
declare module 'eslint/conf/eslint-all.js' {
  declare module.exports: $Exports<'eslint/conf/eslint-all'>;
}
declare module 'eslint/conf/eslint-recommended.js' {
  declare module.exports: $Exports<'eslint/conf/eslint-recommended'>;
}
declare module 'eslint/lib/api.js' {
  declare module.exports: $Exports<'eslint/lib/api'>;
}
declare module 'eslint/lib/ast-utils.js' {
  declare module.exports: $Exports<'eslint/lib/ast-utils'>;
}
declare module 'eslint/lib/cli-engine.js' {
  declare module.exports: $Exports<'eslint/lib/cli-engine'>;
}
declare module 'eslint/lib/cli.js' {
  declare module.exports: $Exports<'eslint/lib/cli'>;
}
declare module 'eslint/lib/code-path-analysis/code-path-analyzer.js' {
  declare module.exports: $Exports<'eslint/lib/code-path-analysis/code-path-analyzer'>;
}
declare module 'eslint/lib/code-path-analysis/code-path-segment.js' {
  declare module.exports: $Exports<'eslint/lib/code-path-analysis/code-path-segment'>;
}
declare module 'eslint/lib/code-path-analysis/code-path-state.js' {
  declare module.exports: $Exports<'eslint/lib/code-path-analysis/code-path-state'>;
}
declare module 'eslint/lib/code-path-analysis/code-path.js' {
  declare module.exports: $Exports<'eslint/lib/code-path-analysis/code-path'>;
}
declare module 'eslint/lib/code-path-analysis/debug-helpers.js' {
  declare module.exports: $Exports<'eslint/lib/code-path-analysis/debug-helpers'>;
}
declare module 'eslint/lib/code-path-analysis/fork-context.js' {
  declare module.exports: $Exports<'eslint/lib/code-path-analysis/fork-context'>;
}
declare module 'eslint/lib/code-path-analysis/id-generator.js' {
  declare module.exports: $Exports<'eslint/lib/code-path-analysis/id-generator'>;
}
declare module 'eslint/lib/config.js' {
  declare module.exports: $Exports<'eslint/lib/config'>;
}
declare module 'eslint/lib/config/autoconfig.js' {
  declare module.exports: $Exports<'eslint/lib/config/autoconfig'>;
}
declare module 'eslint/lib/config/config-file.js' {
  declare module.exports: $Exports<'eslint/lib/config/config-file'>;
}
declare module 'eslint/lib/config/config-initializer.js' {
  declare module.exports: $Exports<'eslint/lib/config/config-initializer'>;
}
declare module 'eslint/lib/config/config-ops.js' {
  declare module.exports: $Exports<'eslint/lib/config/config-ops'>;
}
declare module 'eslint/lib/config/config-rule.js' {
  declare module.exports: $Exports<'eslint/lib/config/config-rule'>;
}
declare module 'eslint/lib/config/config-validator.js' {
  declare module.exports: $Exports<'eslint/lib/config/config-validator'>;
}
declare module 'eslint/lib/config/environments.js' {
  declare module.exports: $Exports<'eslint/lib/config/environments'>;
}
declare module 'eslint/lib/config/plugins.js' {
  declare module.exports: $Exports<'eslint/lib/config/plugins'>;
}
declare module 'eslint/lib/eslint.js' {
  declare module.exports: $Exports<'eslint/lib/eslint'>;
}
declare module 'eslint/lib/file-finder.js' {
  declare module.exports: $Exports<'eslint/lib/file-finder'>;
}
declare module 'eslint/lib/formatters/checkstyle.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/checkstyle'>;
}
declare module 'eslint/lib/formatters/codeframe.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/codeframe'>;
}
declare module 'eslint/lib/formatters/compact.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/compact'>;
}
declare module 'eslint/lib/formatters/html.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/html'>;
}
declare module 'eslint/lib/formatters/jslint-xml.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/jslint-xml'>;
}
declare module 'eslint/lib/formatters/json.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/json'>;
}
declare module 'eslint/lib/formatters/junit.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/junit'>;
}
declare module 'eslint/lib/formatters/stylish.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/stylish'>;
}
declare module 'eslint/lib/formatters/table.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/table'>;
}
declare module 'eslint/lib/formatters/tap.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/tap'>;
}
declare module 'eslint/lib/formatters/unix.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/unix'>;
}
declare module 'eslint/lib/formatters/visualstudio.js' {
  declare module.exports: $Exports<'eslint/lib/formatters/visualstudio'>;
}
declare module 'eslint/lib/ignored-paths.js' {
  declare module.exports: $Exports<'eslint/lib/ignored-paths'>;
}
declare module 'eslint/lib/internal-rules/internal-consistent-docs-description.js' {
  declare module.exports: $Exports<'eslint/lib/internal-rules/internal-consistent-docs-description'>;
}
declare module 'eslint/lib/internal-rules/internal-no-invalid-meta.js' {
  declare module.exports: $Exports<'eslint/lib/internal-rules/internal-no-invalid-meta'>;
}
declare module 'eslint/lib/load-rules.js' {
  declare module.exports: $Exports<'eslint/lib/load-rules'>;
}
declare module 'eslint/lib/logging.js' {
  declare module.exports: $Exports<'eslint/lib/logging'>;
}
declare module 'eslint/lib/options.js' {
  declare module.exports: $Exports<'eslint/lib/options'>;
}
declare module 'eslint/lib/rule-context.js' {
  declare module.exports: $Exports<'eslint/lib/rule-context'>;
}
declare module 'eslint/lib/rules.js' {
  declare module.exports: $Exports<'eslint/lib/rules'>;
}
declare module 'eslint/lib/rules/accessor-pairs.js' {
  declare module.exports: $Exports<'eslint/lib/rules/accessor-pairs'>;
}
declare module 'eslint/lib/rules/array-bracket-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/array-bracket-spacing'>;
}
declare module 'eslint/lib/rules/array-callback-return.js' {
  declare module.exports: $Exports<'eslint/lib/rules/array-callback-return'>;
}
declare module 'eslint/lib/rules/arrow-body-style.js' {
  declare module.exports: $Exports<'eslint/lib/rules/arrow-body-style'>;
}
declare module 'eslint/lib/rules/arrow-parens.js' {
  declare module.exports: $Exports<'eslint/lib/rules/arrow-parens'>;
}
declare module 'eslint/lib/rules/arrow-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/arrow-spacing'>;
}
declare module 'eslint/lib/rules/block-scoped-var.js' {
  declare module.exports: $Exports<'eslint/lib/rules/block-scoped-var'>;
}
declare module 'eslint/lib/rules/block-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/block-spacing'>;
}
declare module 'eslint/lib/rules/brace-style.js' {
  declare module.exports: $Exports<'eslint/lib/rules/brace-style'>;
}
declare module 'eslint/lib/rules/callback-return.js' {
  declare module.exports: $Exports<'eslint/lib/rules/callback-return'>;
}
declare module 'eslint/lib/rules/camelcase.js' {
  declare module.exports: $Exports<'eslint/lib/rules/camelcase'>;
}
declare module 'eslint/lib/rules/capitalized-comments.js' {
  declare module.exports: $Exports<'eslint/lib/rules/capitalized-comments'>;
}
declare module 'eslint/lib/rules/class-methods-use-this.js' {
  declare module.exports: $Exports<'eslint/lib/rules/class-methods-use-this'>;
}
declare module 'eslint/lib/rules/comma-dangle.js' {
  declare module.exports: $Exports<'eslint/lib/rules/comma-dangle'>;
}
declare module 'eslint/lib/rules/comma-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/comma-spacing'>;
}
declare module 'eslint/lib/rules/comma-style.js' {
  declare module.exports: $Exports<'eslint/lib/rules/comma-style'>;
}
declare module 'eslint/lib/rules/complexity.js' {
  declare module.exports: $Exports<'eslint/lib/rules/complexity'>;
}
declare module 'eslint/lib/rules/computed-property-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/computed-property-spacing'>;
}
declare module 'eslint/lib/rules/consistent-return.js' {
  declare module.exports: $Exports<'eslint/lib/rules/consistent-return'>;
}
declare module 'eslint/lib/rules/consistent-this.js' {
  declare module.exports: $Exports<'eslint/lib/rules/consistent-this'>;
}
declare module 'eslint/lib/rules/constructor-super.js' {
  declare module.exports: $Exports<'eslint/lib/rules/constructor-super'>;
}
declare module 'eslint/lib/rules/curly.js' {
  declare module.exports: $Exports<'eslint/lib/rules/curly'>;
}
declare module 'eslint/lib/rules/default-case.js' {
  declare module.exports: $Exports<'eslint/lib/rules/default-case'>;
}
declare module 'eslint/lib/rules/dot-location.js' {
  declare module.exports: $Exports<'eslint/lib/rules/dot-location'>;
}
declare module 'eslint/lib/rules/dot-notation.js' {
  declare module.exports: $Exports<'eslint/lib/rules/dot-notation'>;
}
declare module 'eslint/lib/rules/eol-last.js' {
  declare module.exports: $Exports<'eslint/lib/rules/eol-last'>;
}
declare module 'eslint/lib/rules/eqeqeq.js' {
  declare module.exports: $Exports<'eslint/lib/rules/eqeqeq'>;
}
declare module 'eslint/lib/rules/func-call-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/func-call-spacing'>;
}
declare module 'eslint/lib/rules/func-name-matching.js' {
  declare module.exports: $Exports<'eslint/lib/rules/func-name-matching'>;
}
declare module 'eslint/lib/rules/func-names.js' {
  declare module.exports: $Exports<'eslint/lib/rules/func-names'>;
}
declare module 'eslint/lib/rules/func-style.js' {
  declare module.exports: $Exports<'eslint/lib/rules/func-style'>;
}
declare module 'eslint/lib/rules/generator-star-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/generator-star-spacing'>;
}
declare module 'eslint/lib/rules/global-require.js' {
  declare module.exports: $Exports<'eslint/lib/rules/global-require'>;
}
declare module 'eslint/lib/rules/guard-for-in.js' {
  declare module.exports: $Exports<'eslint/lib/rules/guard-for-in'>;
}
declare module 'eslint/lib/rules/handle-callback-err.js' {
  declare module.exports: $Exports<'eslint/lib/rules/handle-callback-err'>;
}
declare module 'eslint/lib/rules/id-blacklist.js' {
  declare module.exports: $Exports<'eslint/lib/rules/id-blacklist'>;
}
declare module 'eslint/lib/rules/id-length.js' {
  declare module.exports: $Exports<'eslint/lib/rules/id-length'>;
}
declare module 'eslint/lib/rules/id-match.js' {
  declare module.exports: $Exports<'eslint/lib/rules/id-match'>;
}
declare module 'eslint/lib/rules/indent.js' {
  declare module.exports: $Exports<'eslint/lib/rules/indent'>;
}
declare module 'eslint/lib/rules/init-declarations.js' {
  declare module.exports: $Exports<'eslint/lib/rules/init-declarations'>;
}
declare module 'eslint/lib/rules/jsx-quotes.js' {
  declare module.exports: $Exports<'eslint/lib/rules/jsx-quotes'>;
}
declare module 'eslint/lib/rules/key-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/key-spacing'>;
}
declare module 'eslint/lib/rules/keyword-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/keyword-spacing'>;
}
declare module 'eslint/lib/rules/line-comment-position.js' {
  declare module.exports: $Exports<'eslint/lib/rules/line-comment-position'>;
}
declare module 'eslint/lib/rules/linebreak-style.js' {
  declare module.exports: $Exports<'eslint/lib/rules/linebreak-style'>;
}
declare module 'eslint/lib/rules/lines-around-comment.js' {
  declare module.exports: $Exports<'eslint/lib/rules/lines-around-comment'>;
}
declare module 'eslint/lib/rules/lines-around-directive.js' {
  declare module.exports: $Exports<'eslint/lib/rules/lines-around-directive'>;
}
declare module 'eslint/lib/rules/max-depth.js' {
  declare module.exports: $Exports<'eslint/lib/rules/max-depth'>;
}
declare module 'eslint/lib/rules/max-len.js' {
  declare module.exports: $Exports<'eslint/lib/rules/max-len'>;
}
declare module 'eslint/lib/rules/max-lines.js' {
  declare module.exports: $Exports<'eslint/lib/rules/max-lines'>;
}
declare module 'eslint/lib/rules/max-nested-callbacks.js' {
  declare module.exports: $Exports<'eslint/lib/rules/max-nested-callbacks'>;
}
declare module 'eslint/lib/rules/max-params.js' {
  declare module.exports: $Exports<'eslint/lib/rules/max-params'>;
}
declare module 'eslint/lib/rules/max-statements-per-line.js' {
  declare module.exports: $Exports<'eslint/lib/rules/max-statements-per-line'>;
}
declare module 'eslint/lib/rules/max-statements.js' {
  declare module.exports: $Exports<'eslint/lib/rules/max-statements'>;
}
declare module 'eslint/lib/rules/multiline-ternary.js' {
  declare module.exports: $Exports<'eslint/lib/rules/multiline-ternary'>;
}
declare module 'eslint/lib/rules/new-cap.js' {
  declare module.exports: $Exports<'eslint/lib/rules/new-cap'>;
}
declare module 'eslint/lib/rules/new-parens.js' {
  declare module.exports: $Exports<'eslint/lib/rules/new-parens'>;
}
declare module 'eslint/lib/rules/newline-after-var.js' {
  declare module.exports: $Exports<'eslint/lib/rules/newline-after-var'>;
}
declare module 'eslint/lib/rules/newline-before-return.js' {
  declare module.exports: $Exports<'eslint/lib/rules/newline-before-return'>;
}
declare module 'eslint/lib/rules/newline-per-chained-call.js' {
  declare module.exports: $Exports<'eslint/lib/rules/newline-per-chained-call'>;
}
declare module 'eslint/lib/rules/no-alert.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-alert'>;
}
declare module 'eslint/lib/rules/no-array-constructor.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-array-constructor'>;
}
declare module 'eslint/lib/rules/no-await-in-loop.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-await-in-loop'>;
}
declare module 'eslint/lib/rules/no-bitwise.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-bitwise'>;
}
declare module 'eslint/lib/rules/no-caller.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-caller'>;
}
declare module 'eslint/lib/rules/no-case-declarations.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-case-declarations'>;
}
declare module 'eslint/lib/rules/no-catch-shadow.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-catch-shadow'>;
}
declare module 'eslint/lib/rules/no-class-assign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-class-assign'>;
}
declare module 'eslint/lib/rules/no-cond-assign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-cond-assign'>;
}
declare module 'eslint/lib/rules/no-confusing-arrow.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-confusing-arrow'>;
}
declare module 'eslint/lib/rules/no-console.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-console'>;
}
declare module 'eslint/lib/rules/no-const-assign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-const-assign'>;
}
declare module 'eslint/lib/rules/no-constant-condition.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-constant-condition'>;
}
declare module 'eslint/lib/rules/no-continue.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-continue'>;
}
declare module 'eslint/lib/rules/no-control-regex.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-control-regex'>;
}
declare module 'eslint/lib/rules/no-debugger.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-debugger'>;
}
declare module 'eslint/lib/rules/no-delete-var.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-delete-var'>;
}
declare module 'eslint/lib/rules/no-div-regex.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-div-regex'>;
}
declare module 'eslint/lib/rules/no-dupe-args.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-dupe-args'>;
}
declare module 'eslint/lib/rules/no-dupe-class-members.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-dupe-class-members'>;
}
declare module 'eslint/lib/rules/no-dupe-keys.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-dupe-keys'>;
}
declare module 'eslint/lib/rules/no-duplicate-case.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-duplicate-case'>;
}
declare module 'eslint/lib/rules/no-duplicate-imports.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-duplicate-imports'>;
}
declare module 'eslint/lib/rules/no-else-return.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-else-return'>;
}
declare module 'eslint/lib/rules/no-empty-character-class.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-empty-character-class'>;
}
declare module 'eslint/lib/rules/no-empty-function.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-empty-function'>;
}
declare module 'eslint/lib/rules/no-empty-pattern.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-empty-pattern'>;
}
declare module 'eslint/lib/rules/no-empty.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-empty'>;
}
declare module 'eslint/lib/rules/no-eq-null.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-eq-null'>;
}
declare module 'eslint/lib/rules/no-eval.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-eval'>;
}
declare module 'eslint/lib/rules/no-ex-assign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-ex-assign'>;
}
declare module 'eslint/lib/rules/no-extend-native.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-extend-native'>;
}
declare module 'eslint/lib/rules/no-extra-bind.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-extra-bind'>;
}
declare module 'eslint/lib/rules/no-extra-boolean-cast.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-extra-boolean-cast'>;
}
declare module 'eslint/lib/rules/no-extra-label.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-extra-label'>;
}
declare module 'eslint/lib/rules/no-extra-parens.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-extra-parens'>;
}
declare module 'eslint/lib/rules/no-extra-semi.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-extra-semi'>;
}
declare module 'eslint/lib/rules/no-fallthrough.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-fallthrough'>;
}
declare module 'eslint/lib/rules/no-floating-decimal.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-floating-decimal'>;
}
declare module 'eslint/lib/rules/no-func-assign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-func-assign'>;
}
declare module 'eslint/lib/rules/no-global-assign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-global-assign'>;
}
declare module 'eslint/lib/rules/no-implicit-coercion.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-implicit-coercion'>;
}
declare module 'eslint/lib/rules/no-implicit-globals.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-implicit-globals'>;
}
declare module 'eslint/lib/rules/no-implied-eval.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-implied-eval'>;
}
declare module 'eslint/lib/rules/no-inline-comments.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-inline-comments'>;
}
declare module 'eslint/lib/rules/no-inner-declarations.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-inner-declarations'>;
}
declare module 'eslint/lib/rules/no-invalid-regexp.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-invalid-regexp'>;
}
declare module 'eslint/lib/rules/no-invalid-this.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-invalid-this'>;
}
declare module 'eslint/lib/rules/no-irregular-whitespace.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-irregular-whitespace'>;
}
declare module 'eslint/lib/rules/no-iterator.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-iterator'>;
}
declare module 'eslint/lib/rules/no-label-var.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-label-var'>;
}
declare module 'eslint/lib/rules/no-labels.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-labels'>;
}
declare module 'eslint/lib/rules/no-lone-blocks.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-lone-blocks'>;
}
declare module 'eslint/lib/rules/no-lonely-if.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-lonely-if'>;
}
declare module 'eslint/lib/rules/no-loop-func.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-loop-func'>;
}
declare module 'eslint/lib/rules/no-magic-numbers.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-magic-numbers'>;
}
declare module 'eslint/lib/rules/no-mixed-operators.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-mixed-operators'>;
}
declare module 'eslint/lib/rules/no-mixed-requires.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-mixed-requires'>;
}
declare module 'eslint/lib/rules/no-mixed-spaces-and-tabs.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-mixed-spaces-and-tabs'>;
}
declare module 'eslint/lib/rules/no-multi-assign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-multi-assign'>;
}
declare module 'eslint/lib/rules/no-multi-spaces.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-multi-spaces'>;
}
declare module 'eslint/lib/rules/no-multi-str.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-multi-str'>;
}
declare module 'eslint/lib/rules/no-multiple-empty-lines.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-multiple-empty-lines'>;
}
declare module 'eslint/lib/rules/no-native-reassign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-native-reassign'>;
}
declare module 'eslint/lib/rules/no-negated-condition.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-negated-condition'>;
}
declare module 'eslint/lib/rules/no-negated-in-lhs.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-negated-in-lhs'>;
}
declare module 'eslint/lib/rules/no-nested-ternary.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-nested-ternary'>;
}
declare module 'eslint/lib/rules/no-new-func.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-new-func'>;
}
declare module 'eslint/lib/rules/no-new-object.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-new-object'>;
}
declare module 'eslint/lib/rules/no-new-require.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-new-require'>;
}
declare module 'eslint/lib/rules/no-new-symbol.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-new-symbol'>;
}
declare module 'eslint/lib/rules/no-new-wrappers.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-new-wrappers'>;
}
declare module 'eslint/lib/rules/no-new.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-new'>;
}
declare module 'eslint/lib/rules/no-obj-calls.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-obj-calls'>;
}
declare module 'eslint/lib/rules/no-octal-escape.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-octal-escape'>;
}
declare module 'eslint/lib/rules/no-octal.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-octal'>;
}
declare module 'eslint/lib/rules/no-param-reassign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-param-reassign'>;
}
declare module 'eslint/lib/rules/no-path-concat.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-path-concat'>;
}
declare module 'eslint/lib/rules/no-plusplus.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-plusplus'>;
}
declare module 'eslint/lib/rules/no-process-env.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-process-env'>;
}
declare module 'eslint/lib/rules/no-process-exit.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-process-exit'>;
}
declare module 'eslint/lib/rules/no-proto.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-proto'>;
}
declare module 'eslint/lib/rules/no-prototype-builtins.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-prototype-builtins'>;
}
declare module 'eslint/lib/rules/no-redeclare.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-redeclare'>;
}
declare module 'eslint/lib/rules/no-regex-spaces.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-regex-spaces'>;
}
declare module 'eslint/lib/rules/no-restricted-globals.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-globals'>;
}
declare module 'eslint/lib/rules/no-restricted-imports.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-imports'>;
}
declare module 'eslint/lib/rules/no-restricted-modules.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-modules'>;
}
declare module 'eslint/lib/rules/no-restricted-properties.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-properties'>;
}
declare module 'eslint/lib/rules/no-restricted-syntax.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-syntax'>;
}
declare module 'eslint/lib/rules/no-return-assign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-return-assign'>;
}
declare module 'eslint/lib/rules/no-return-await.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-return-await'>;
}
declare module 'eslint/lib/rules/no-script-url.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-script-url'>;
}
declare module 'eslint/lib/rules/no-self-assign.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-self-assign'>;
}
declare module 'eslint/lib/rules/no-self-compare.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-self-compare'>;
}
declare module 'eslint/lib/rules/no-sequences.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-sequences'>;
}
declare module 'eslint/lib/rules/no-shadow-restricted-names.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-shadow-restricted-names'>;
}
declare module 'eslint/lib/rules/no-shadow.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-shadow'>;
}
declare module 'eslint/lib/rules/no-spaced-func.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-spaced-func'>;
}
declare module 'eslint/lib/rules/no-sparse-arrays.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-sparse-arrays'>;
}
declare module 'eslint/lib/rules/no-sync.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-sync'>;
}
declare module 'eslint/lib/rules/no-tabs.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-tabs'>;
}
declare module 'eslint/lib/rules/no-template-curly-in-string.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-template-curly-in-string'>;
}
declare module 'eslint/lib/rules/no-ternary.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-ternary'>;
}
declare module 'eslint/lib/rules/no-this-before-super.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-this-before-super'>;
}
declare module 'eslint/lib/rules/no-throw-literal.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-throw-literal'>;
}
declare module 'eslint/lib/rules/no-trailing-spaces.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-trailing-spaces'>;
}
declare module 'eslint/lib/rules/no-undef-init.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-undef-init'>;
}
declare module 'eslint/lib/rules/no-undef.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-undef'>;
}
declare module 'eslint/lib/rules/no-undefined.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-undefined'>;
}
declare module 'eslint/lib/rules/no-underscore-dangle.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-underscore-dangle'>;
}
declare module 'eslint/lib/rules/no-unexpected-multiline.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-unexpected-multiline'>;
}
declare module 'eslint/lib/rules/no-unmodified-loop-condition.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-unmodified-loop-condition'>;
}
declare module 'eslint/lib/rules/no-unneeded-ternary.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-unneeded-ternary'>;
}
declare module 'eslint/lib/rules/no-unreachable.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-unreachable'>;
}
declare module 'eslint/lib/rules/no-unsafe-finally.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-unsafe-finally'>;
}
declare module 'eslint/lib/rules/no-unsafe-negation.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-unsafe-negation'>;
}
declare module 'eslint/lib/rules/no-unused-expressions.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-unused-expressions'>;
}
declare module 'eslint/lib/rules/no-unused-labels.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-unused-labels'>;
}
declare module 'eslint/lib/rules/no-unused-vars.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-unused-vars'>;
}
declare module 'eslint/lib/rules/no-use-before-define.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-use-before-define'>;
}
declare module 'eslint/lib/rules/no-useless-call.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-useless-call'>;
}
declare module 'eslint/lib/rules/no-useless-computed-key.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-useless-computed-key'>;
}
declare module 'eslint/lib/rules/no-useless-concat.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-useless-concat'>;
}
declare module 'eslint/lib/rules/no-useless-constructor.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-useless-constructor'>;
}
declare module 'eslint/lib/rules/no-useless-escape.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-useless-escape'>;
}
declare module 'eslint/lib/rules/no-useless-rename.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-useless-rename'>;
}
declare module 'eslint/lib/rules/no-useless-return.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-useless-return'>;
}
declare module 'eslint/lib/rules/no-var.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-var'>;
}
declare module 'eslint/lib/rules/no-void.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-void'>;
}
declare module 'eslint/lib/rules/no-warning-comments.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-warning-comments'>;
}
declare module 'eslint/lib/rules/no-whitespace-before-property.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-whitespace-before-property'>;
}
declare module 'eslint/lib/rules/no-with.js' {
  declare module.exports: $Exports<'eslint/lib/rules/no-with'>;
}
declare module 'eslint/lib/rules/object-curly-newline.js' {
  declare module.exports: $Exports<'eslint/lib/rules/object-curly-newline'>;
}
declare module 'eslint/lib/rules/object-curly-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/object-curly-spacing'>;
}
declare module 'eslint/lib/rules/object-property-newline.js' {
  declare module.exports: $Exports<'eslint/lib/rules/object-property-newline'>;
}
declare module 'eslint/lib/rules/object-shorthand.js' {
  declare module.exports: $Exports<'eslint/lib/rules/object-shorthand'>;
}
declare module 'eslint/lib/rules/one-var-declaration-per-line.js' {
  declare module.exports: $Exports<'eslint/lib/rules/one-var-declaration-per-line'>;
}
declare module 'eslint/lib/rules/one-var.js' {
  declare module.exports: $Exports<'eslint/lib/rules/one-var'>;
}
declare module 'eslint/lib/rules/operator-assignment.js' {
  declare module.exports: $Exports<'eslint/lib/rules/operator-assignment'>;
}
declare module 'eslint/lib/rules/operator-linebreak.js' {
  declare module.exports: $Exports<'eslint/lib/rules/operator-linebreak'>;
}
declare module 'eslint/lib/rules/padded-blocks.js' {
  declare module.exports: $Exports<'eslint/lib/rules/padded-blocks'>;
}
declare module 'eslint/lib/rules/prefer-arrow-callback.js' {
  declare module.exports: $Exports<'eslint/lib/rules/prefer-arrow-callback'>;
}
declare module 'eslint/lib/rules/prefer-const.js' {
  declare module.exports: $Exports<'eslint/lib/rules/prefer-const'>;
}
declare module 'eslint/lib/rules/prefer-destructuring.js' {
  declare module.exports: $Exports<'eslint/lib/rules/prefer-destructuring'>;
}
declare module 'eslint/lib/rules/prefer-numeric-literals.js' {
  declare module.exports: $Exports<'eslint/lib/rules/prefer-numeric-literals'>;
}
declare module 'eslint/lib/rules/prefer-promise-reject-errors.js' {
  declare module.exports: $Exports<'eslint/lib/rules/prefer-promise-reject-errors'>;
}
declare module 'eslint/lib/rules/prefer-reflect.js' {
  declare module.exports: $Exports<'eslint/lib/rules/prefer-reflect'>;
}
declare module 'eslint/lib/rules/prefer-rest-params.js' {
  declare module.exports: $Exports<'eslint/lib/rules/prefer-rest-params'>;
}
declare module 'eslint/lib/rules/prefer-spread.js' {
  declare module.exports: $Exports<'eslint/lib/rules/prefer-spread'>;
}
declare module 'eslint/lib/rules/prefer-template.js' {
  declare module.exports: $Exports<'eslint/lib/rules/prefer-template'>;
}
declare module 'eslint/lib/rules/quote-props.js' {
  declare module.exports: $Exports<'eslint/lib/rules/quote-props'>;
}
declare module 'eslint/lib/rules/quotes.js' {
  declare module.exports: $Exports<'eslint/lib/rules/quotes'>;
}
declare module 'eslint/lib/rules/radix.js' {
  declare module.exports: $Exports<'eslint/lib/rules/radix'>;
}
declare module 'eslint/lib/rules/require-await.js' {
  declare module.exports: $Exports<'eslint/lib/rules/require-await'>;
}
declare module 'eslint/lib/rules/require-jsdoc.js' {
  declare module.exports: $Exports<'eslint/lib/rules/require-jsdoc'>;
}
declare module 'eslint/lib/rules/require-yield.js' {
  declare module.exports: $Exports<'eslint/lib/rules/require-yield'>;
}
declare module 'eslint/lib/rules/rest-spread-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/rest-spread-spacing'>;
}
declare module 'eslint/lib/rules/semi-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/semi-spacing'>;
}
declare module 'eslint/lib/rules/semi.js' {
  declare module.exports: $Exports<'eslint/lib/rules/semi'>;
}
declare module 'eslint/lib/rules/sort-imports.js' {
  declare module.exports: $Exports<'eslint/lib/rules/sort-imports'>;
}
declare module 'eslint/lib/rules/sort-keys.js' {
  declare module.exports: $Exports<'eslint/lib/rules/sort-keys'>;
}
declare module 'eslint/lib/rules/sort-vars.js' {
  declare module.exports: $Exports<'eslint/lib/rules/sort-vars'>;
}
declare module 'eslint/lib/rules/space-before-blocks.js' {
  declare module.exports: $Exports<'eslint/lib/rules/space-before-blocks'>;
}
declare module 'eslint/lib/rules/space-before-function-paren.js' {
  declare module.exports: $Exports<'eslint/lib/rules/space-before-function-paren'>;
}
declare module 'eslint/lib/rules/space-in-parens.js' {
  declare module.exports: $Exports<'eslint/lib/rules/space-in-parens'>;
}
declare module 'eslint/lib/rules/space-infix-ops.js' {
  declare module.exports: $Exports<'eslint/lib/rules/space-infix-ops'>;
}
declare module 'eslint/lib/rules/space-unary-ops.js' {
  declare module.exports: $Exports<'eslint/lib/rules/space-unary-ops'>;
}
declare module 'eslint/lib/rules/spaced-comment.js' {
  declare module.exports: $Exports<'eslint/lib/rules/spaced-comment'>;
}
declare module 'eslint/lib/rules/strict.js' {
  declare module.exports: $Exports<'eslint/lib/rules/strict'>;
}
declare module 'eslint/lib/rules/symbol-description.js' {
  declare module.exports: $Exports<'eslint/lib/rules/symbol-description'>;
}
declare module 'eslint/lib/rules/template-curly-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/template-curly-spacing'>;
}
declare module 'eslint/lib/rules/template-tag-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/template-tag-spacing'>;
}
declare module 'eslint/lib/rules/unicode-bom.js' {
  declare module.exports: $Exports<'eslint/lib/rules/unicode-bom'>;
}
declare module 'eslint/lib/rules/use-isnan.js' {
  declare module.exports: $Exports<'eslint/lib/rules/use-isnan'>;
}
declare module 'eslint/lib/rules/valid-jsdoc.js' {
  declare module.exports: $Exports<'eslint/lib/rules/valid-jsdoc'>;
}
declare module 'eslint/lib/rules/valid-typeof.js' {
  declare module.exports: $Exports<'eslint/lib/rules/valid-typeof'>;
}
declare module 'eslint/lib/rules/vars-on-top.js' {
  declare module.exports: $Exports<'eslint/lib/rules/vars-on-top'>;
}
declare module 'eslint/lib/rules/wrap-iife.js' {
  declare module.exports: $Exports<'eslint/lib/rules/wrap-iife'>;
}
declare module 'eslint/lib/rules/wrap-regex.js' {
  declare module.exports: $Exports<'eslint/lib/rules/wrap-regex'>;
}
declare module 'eslint/lib/rules/yield-star-spacing.js' {
  declare module.exports: $Exports<'eslint/lib/rules/yield-star-spacing'>;
}
declare module 'eslint/lib/rules/yoda.js' {
  declare module.exports: $Exports<'eslint/lib/rules/yoda'>;
}
declare module 'eslint/lib/testers/event-generator-tester.js' {
  declare module.exports: $Exports<'eslint/lib/testers/event-generator-tester'>;
}
declare module 'eslint/lib/testers/rule-tester.js' {
  declare module.exports: $Exports<'eslint/lib/testers/rule-tester'>;
}
declare module 'eslint/lib/timing.js' {
  declare module.exports: $Exports<'eslint/lib/timing'>;
}
declare module 'eslint/lib/token-store/backward-token-comment-cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/backward-token-comment-cursor'>;
}
declare module 'eslint/lib/token-store/backward-token-cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/backward-token-cursor'>;
}
declare module 'eslint/lib/token-store/cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/cursor'>;
}
declare module 'eslint/lib/token-store/cursors.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/cursors'>;
}
declare module 'eslint/lib/token-store/decorative-cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/decorative-cursor'>;
}
declare module 'eslint/lib/token-store/filter-cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/filter-cursor'>;
}
declare module 'eslint/lib/token-store/forward-token-comment-cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/forward-token-comment-cursor'>;
}
declare module 'eslint/lib/token-store/forward-token-cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/forward-token-cursor'>;
}
declare module 'eslint/lib/token-store/index.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/index'>;
}
declare module 'eslint/lib/token-store/limit-cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/limit-cursor'>;
}
declare module 'eslint/lib/token-store/padded-token-cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/padded-token-cursor'>;
}
declare module 'eslint/lib/token-store/skip-cursor.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/skip-cursor'>;
}
declare module 'eslint/lib/token-store/utils.js' {
  declare module.exports: $Exports<'eslint/lib/token-store/utils'>;
}
declare module 'eslint/lib/util/comment-event-generator.js' {
  declare module.exports: $Exports<'eslint/lib/util/comment-event-generator'>;
}
declare module 'eslint/lib/util/glob-util.js' {
  declare module.exports: $Exports<'eslint/lib/util/glob-util'>;
}
declare module 'eslint/lib/util/glob.js' {
  declare module.exports: $Exports<'eslint/lib/util/glob'>;
}
declare module 'eslint/lib/util/hash.js' {
  declare module.exports: $Exports<'eslint/lib/util/hash'>;
}
declare module 'eslint/lib/util/keywords.js' {
  declare module.exports: $Exports<'eslint/lib/util/keywords'>;
}
declare module 'eslint/lib/util/module-resolver.js' {
  declare module.exports: $Exports<'eslint/lib/util/module-resolver'>;
}
declare module 'eslint/lib/util/node-event-generator.js' {
  declare module.exports: $Exports<'eslint/lib/util/node-event-generator'>;
}
declare module 'eslint/lib/util/npm-util.js' {
  declare module.exports: $Exports<'eslint/lib/util/npm-util'>;
}
declare module 'eslint/lib/util/path-util.js' {
  declare module.exports: $Exports<'eslint/lib/util/path-util'>;
}
declare module 'eslint/lib/util/patterns/letters.js' {
  declare module.exports: $Exports<'eslint/lib/util/patterns/letters'>;
}
declare module 'eslint/lib/util/rule-fixer.js' {
  declare module.exports: $Exports<'eslint/lib/util/rule-fixer'>;
}
declare module 'eslint/lib/util/source-code-fixer.js' {
  declare module.exports: $Exports<'eslint/lib/util/source-code-fixer'>;
}
declare module 'eslint/lib/util/source-code-util.js' {
  declare module.exports: $Exports<'eslint/lib/util/source-code-util'>;
}
declare module 'eslint/lib/util/source-code.js' {
  declare module.exports: $Exports<'eslint/lib/util/source-code'>;
}
declare module 'eslint/lib/util/traverser.js' {
  declare module.exports: $Exports<'eslint/lib/util/traverser'>;
}
declare module 'eslint/lib/util/xml-escape.js' {
  declare module.exports: $Exports<'eslint/lib/util/xml-escape'>;
}


================================================
FILE: flow-typed/npm/flow-bin_v0.x.x.js
================================================
// flow-typed signature: 6a5610678d4b01e13bbfbbc62bdaf583
// flow-typed version: 3817bc6980/flow-bin_v0.x.x/flow_>=v0.25.x

declare module "flow-bin" {
  declare module.exports: string;
}


================================================
FILE: flow-typed/npm/gonzales-pe_vx.x.x.js
================================================
// flow-typed signature: 750b2d64f194658ee7d5900e8c71c6dd
// flow-typed version: <<STUB>>/gonzales-pe_v^4.0.3/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'gonzales-pe'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'gonzales-pe' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'gonzales-pe/bin/gonzales' {
  declare module.exports: any;
}

declare module 'gonzales-pe/lib/gonzales' {
  declare module.exports: any;
}

declare module 'gonzales-pe/webpack.config' {
  declare module.exports: any;
}

// Filename aliases
declare module 'gonzales-pe/bin/gonzales.js' {
  declare module.exports: $Exports<'gonzales-pe/bin/gonzales'>;
}
declare module 'gonzales-pe/lib/gonzales.js' {
  declare module.exports: $Exports<'gonzales-pe/lib/gonzales'>;
}
declare module 'gonzales-pe/webpack.config.js' {
  declare module.exports: $Exports<'gonzales-pe/webpack.config'>;
}


================================================
FILE: flow-typed/npm/lodash_v4.x.x.js
================================================
// flow-typed signature: f0ca92a5557e6def26ab8132bc2ae10f
// flow-typed version: 12af8270f6/lodash_v4.x.x/flow_>=v0.28.x_<=v0.37.x

declare module 'lodash' {
  declare type TemplateSettings = {
    escape?: RegExp,
    evaluate?: RegExp,
    imports?: Object,
    interpolate?: RegExp,
    variable?: string,
  };

  declare type TruncateOptions = {
    length?: number,
    omission?: string,
    separator?: RegExp|string,
  };

  declare type DebounceOptions = {
    leading?: bool,
    maxWait?: number,
    trailing?: bool,
  };

  declare type ThrottleOptions = {
    leading?: bool,
    trailing?: bool,
  };

  declare type NestedArray<T> = Array<Array<T>>;

  declare type matchesIterateeShorthand = Object;
  declare type matchesPropertyIterateeShorthand = [string, any];
  declare type propertyIterateeShorthand = string;

  declare type OPredicate<A, O> =
    | ((value: A, key: string, object: O) => any)
    | matchesIterateeShorthand
    | matchesPropertyIterateeShorthand
    | propertyIterateeShorthand;

  declare type OIterateeWithResult<V, O, R> = Object|string|((value: V, key: string, object: O) => R);
  declare type OIteratee<O> = OIterateeWithResult<any, O, any>;
  declare type OFlatMapIteratee<T, U> = OIterateeWithResult<any, T, Array<U>>;

  declare type Predicate<T> =
    | ((value: T, index: number, array: Array<T>) => any)
    | matchesIterateeShorthand
    | matchesPropertyIterateeShorthand
    | propertyIterateeShorthand;

  declare type _Iteratee<T> = (item: T, index: number, array: ?Array<T>) => mixed;
  declare type Iteratee<T> = _Iteratee<T>|Object|string;
  declare type Iteratee2<T, U> = ((item: T, index: number, array: ?Array<T>) => U)|Object|string;
  declare type FlatMapIteratee<T, U> = ((item: T, index: number, array: ?Array<T>) => Array<U>)|Object|string;
  declare type Comparator<T> = (item: T, item2: T) => bool;

  declare type MapIterator<T,U> =
    | ((item: T, index: number, array: Array<T>) => U)
    | propertyIterateeShorthand;

  declare type OMapIterator<T,O,U> =
    | ((item: T, key: string, object: O) => U)
    | propertyIterateeShorthand;

  declare class Lodash {
    // Array
    chunk<T>(array: ?Array<T>, size?: number): Array<Array<T>>;
    compact<T,N:?T>(array: Array<N>): Array<T>;
    concat<T>(base: Array<T>, ...elements: Array<any>): Array<T|any>;
    difference<T>(array: ?Array<T>, values?: Array<T>): Array<T>;
    differenceBy<T>(array: ?Array<T>, values: Array<T>, iteratee: Iteratee<T>): T[];
    differenceWith<T>(array: T[], values: T[], comparator?: Comparator<T>): T[];
    drop<T>(array: ?Array<T>, n?: number): Array<T>;
    dropRight<T>(array: ?Array<T>, n?: number): Array<T>;
    dropRightWhile<T>(array: ?Array<T>, predicate?: Predicate<T>): Array<T>;
    dropWhile<T>(array: ?Array<T>, predicate?: Predicate<T>): Array<T>;
    fill<T, U>(array: ?Array<T>, value: U, start?: number, end?: number): Array<T|U>;
    findIndex<T>(array: ?Array<T>, predicate?: Predicate<T>): number;
    findLastIndex<T>(array: ?Array<T>, predicate?: Predicate<T>): number;
    // alias of _.head
    first<T>(array: ?Array<T>): T;
    flatten<T,X>(array: Array<Array<T>|X>): Array<T|X>;
    flattenDeep<T>(array: any[]): Array<T>;
    flattenDepth(array: any[], depth?: number): any[];
    fromPairs<T>(pairs: Array<T>): Object;
    head<T>(array: ?Array<T>): T;
    indexOf<T>(array: ?Array<T>, value: T, fromIndex?: number): number;
    initial<T>(array: ?Array<T>): Array<T>;
    intersection<T>(...arrays: Array<Array<T>>): Array<T>;
    //Workaround until (...parameter: T, parameter2: U) works
    intersectionBy<T>(a1: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    intersectionBy<T>(a1: Array<T>, a2: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    intersectionBy<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    intersectionBy<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, a4: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    //Workaround until (...parameter: T, parameter2: U) works
    intersectionWith<T>(a1: Array<T>, comparator: Comparator<T>): Array<T>;
    intersectionWith<T>(a1: Array<T>, a2: Array<T>, comparator: Comparator<T>): Array<T>;
    intersectionWith<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, comparator: Comparator<T>): Array<T>;
    intersectionWith<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, a4: Array<T>, comparator: Comparator<T>): Array<T>;
    join<T>(array: ?Array<T>, separator?: string): string;
    last<T>(array: ?Array<T>): T;
    lastIndexOf<T>(array: ?Array<T>, value: T, fromIndex?: number): number;
    nth<T>(array: T[], n?: number): T;
    pull<T>(array: ?Array<T>, ...values?: Array<T>): Array<T>;
    pullAll<T>(array: ?Array<T>, values: Array<T>): Array<T>;
    pullAllBy<T>(array: ?Array<T>, values: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    pullAllWith<T>(array?: T[], values: T[], comparator?: Function): T[];
    pullAt<T>(array: ?Array<T>, ...indexed?: Array<number>): Array<T>;
    pullAt<T>(array: ?Array<T>, indexed?: Array<number>): Array<T>;
    remove<T>(array: ?Array<T>, predicate?: Predicate<T>): Array<T>;
    reverse<T>(array: ?Array<T>): Array<T>;
    slice<T>(array: ?Array<T>, start?: number, end?: number): Array<T>;
    sortedIndex<T>(array: ?Array<T>, value: T): number;
    sortedIndexBy<T>(array: ?Array<T>, value: T, iteratee?: Iteratee<T>): number;
    sortedIndexOf<T>(array: ?Array<T>, value: T): number;
    sortedLastIndex<T>(array: ?Array<T>, value: T): number;
    sortedLastIndexBy<T>(array: ?Array<T>, value: T, iteratee?: Iteratee<T>): number;
    sortedLastIndexOf<T>(array: ?Array<T>, value: T): number;
    sortedUniq<T>(array: ?Array<T>): Array<T>;
    sortedUniqBy<T>(array: ?Array<T>, iteratee?: (value: T) => mixed): Array<T>;
    tail<T>(array: ?Array<T>): Array<T>;
    take<T>(array: ?Array<T>, n?: number): Array<T>;
    takeRight<T>(array: ?Array<T>, n?: number): Array<T>;
    takeRightWhile<T>(array: ?Array<T>, predicate?: Predicate<T>): Array<T>;
    takeWhile<T>(array: ?Array<T>, predicate?: Predicate<T>): Array<T>;
    union<T>(...arrays?: Array<Array<T>>): Array<T>;
    //Workaround until (...parameter: T, parameter2: U) works
    unionBy<T>(a1: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    unionBy<T>(a1: Array<T>, a2: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    unionBy<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    unionBy<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, a4: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    //Workaround until (...parameter: T, parameter2: U) works
    unionWith<T>(a1: Array<T>, comparator?: Comparator<T>): Array<T>;
    unionWith<T>(a1: Array<T>, a2: Array<T>, comparator?: Comparator<T>): Array<T>;
    unionWith<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, comparator?: Comparator<T>): Array<T>;
    unionWith<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, a4: Array<T>, comparator?: Comparator<T>): Array<T>;
    uniq<T>(array: ?Array<T>): Array<T>;
    uniqBy<T>(array: ?Array<T>, iteratee?: Iteratee<T>): Array<T>;
    uniqWith<T>(array: ?Array<T>, comparator?: Comparator<T>): Array<T>;
    unzip<T>(array: ?Array<T>): Array<T>;
    unzipWith<T>(array: ?Array<T>, iteratee?: Iteratee<T>): Array<T>;
    without<T>(array: ?Array<T>, ...values?: Array<T>): Array<T>;
    xor<T>(...array: Array<Array<T>>): Array<T>;
    //Workaround until (...parameter: T, parameter2: U) works
    xorBy<T>(a1: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    xorBy<T>(a1: Array<T>, a2: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    xorBy<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    xorBy<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, a4: Array<T>, iteratee?: Iteratee<T>): Array<T>;
    //Workaround until (...parameter: T, parameter2: U) works
    xorWith<T>(a1: Array<T>, comparator?: Comparator<T>): Array<T>;
    xorWith<T>(a1: Array<T>, a2: Array<T>, comparator?: Comparator<T>): Array<T>;
    xorWith<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, comparator?: Comparator<T>): Array<T>;
    xorWith<T>(a1: Array<T>, a2: Array<T>, a3: Array<T>, a4: Array<T>, comparator?: Comparator<T>): Array<T>;
    zip<A, B>(a1: A[], a2: B[]): Array<[A, B]>;
    zip<A, B, C>(a1: A[], a2: B[], a3: C[]): Array<[A, B, C]>;
    zip<A, B, C, D>(a1: A[], a2: B[], a3: C[], a4: D[]): Array<[A, B, C, D]>;
    zip<A, B, C, D, E>(a1: A[], a2: B[], a3: C[], a4: D[], a5: E[]): Array<[A, B, C, D, E]>;

    zipObject(props?: Array<any>, values?: Array<any>): Object;
    zipObjectDeep(props?: any[], values?: any): Object;
    //Workaround until (...parameter: T, parameter2: U) works
    zipWith<T>(a1: NestedArray<T>, iteratee?: Iteratee<T>): Array<T>;
    zipWith<T>(a1: NestedArray<T>, a2: NestedArray<T>, iteratee?: Iteratee<T>): Array<T>;
    zipWith<T>(a1: NestedArray<T>, a2: NestedArray<T>, a3: NestedArray<T>, iteratee?: Iteratee<T>): Array<T>;
    zipWith<T>(a1: NestedArray<T>, a2: NestedArray<T>, a3: NestedArray<T>, a4: NestedArray<T>, iteratee?: Iteratee<T>): Array<T>;

    // Collection
    countBy<T>(array: ?Array<T>, iteratee?: Iteratee<T>): Object;
    countBy<T: Object>(object: T, iteratee?: OIteratee<T>): Object;
    // alias of _.forEach
    each<T>(array: ?Array<T>, iteratee?: Iteratee<T>): Array<T>;
    each<T: Object>(object: T, iteratee?: OIteratee<T>): T;
    // alias of _.forEachRight
    eachRight<T>(array: ?Array<T>, iteratee?: Iteratee<T>): Array<T>;
    eachRight<T: Object>(object: T, iteratee?: OIteratee<T>): T;
    every<T>(array: ?Array<T>, iteratee?: Iteratee<T>): bool;
    every<T: Object>(object: T, iteratee?: OIteratee<T>): bool;
    filter<T>(array: ?Array<T>, predicate?: Predicate<T>): Array<T>;
    filter<A, T: {[id: string]: A}>(object: T, predicate?: OPredicate<A, T>): Array<A>;
    find<T>(array: ?Array<T>, predicate?: Predicate<T>): T;
    find<V, A, T: {[id: string]: A}>(object: T, predicate?: OPredicate<A, T>): V;
    findLast<T>(array: ?Array<T>, predicate?: Predicate<T>): T;
    findLast<V, A, T: {[id: string]: A}>(object: T, predicate?: OPredicate<A, T>): V;
    flatMap<T, U>(array: ?Array<T>, iteratee?: FlatMapIteratee<T, U>): Array<U>;
    flatMap<T: Object, U>(object: T, iteratee?: OFlatMapIteratee<T, U>): Array<U>;
    flatMapDeep<T, U>(array: ?Array<T>, iteratee?: FlatMapIteratee<T, U>): Array<U>;
    flatMapDeep<T: Object, U>(object: T, iteratee?: OFlatMapIteratee<T, U>): Array<U>;
    flatMapDepth<T, U>(array: ?Array<T>, iteratee?: FlatMapIteratee<T, U>, depth?: number): Array<U>;
    flatMapDepth<T: Object, U>(object: T, iteratee?: OFlatMapIteratee<T, U>, depth?: number): Array<U>;
    forEach<T>(array: ?Array<T>, iteratee?: Iteratee<T>): Array<T>;
    forEach<T: Object>(object: T, iteratee?: OIteratee<T>): T;
    forEachRight<T>(array: ?Array<T>, iteratee?: Iteratee<T>): Array<T>;
    forEachRight<T: Object>(object: T, iteratee?: OIteratee<T>): T;
    groupBy<T>(array: ?Array<T>, iteratee?: Iteratee<T>): Object;
    groupBy<T: Object>(object: T, iteratee?: OIteratee<T>): Object;
    includes<T>(array: ?Array<T>, value: T, fromIndex?: number): bool;
    includes<T: Object>(object: T, value: any, fromIndex?: number): bool;
    includes(str: string, value: string, fromIndex?: number): bool;
    invokeMap<T>(array: ?Array<T>, path: ((value: T) => Array<string>|string)|Array<string>|string, ...args?: Array<any>): Array<any>;
    invokeMap<T: Object>(object: T, path: ((value: any) => Array<string>|string)|Array<string>|string, ...args?: Array<any>): Array<any>;
    keyBy<T, V>(array: ?Array<T>, iteratee?: Iteratee2<T, V>): {[key: V]: T};
    keyBy<V, T: Object>(object: T, iteratee?: OIteratee<T>): Object;
    map<T, U>(array: ?Array<T>, iteratee?: MapIterator<T, U>): Array<U>;
    map<V, T: Object, U>(object: ?T, iteratee?: OMapIterator<V, T, U>): Array<U>;
    map(str: ?string, iteratee?: (char: string, index: number, str: string) => any): string;
    orderBy<T>(array: ?Array<T>, iteratees?: Array<Iteratee<T>>|string, orders?: Array<'asc'|'desc'>|string): Array<T>;
    orderBy<V, T: Object>(object: T, iteratees?: Array<OIteratee<*>>|string, orders?: Array<'asc'|'desc'>|string): Array<V>;
    partition<T>(array: ?Array<T>, predicate?: Predicate<T>): NestedArray<T>;
    partition<V, A, T: {[id: string]: A}>(object: T, predicate?: OPredicate<A, T>): NestedArray<V>;
    reduce<T, U>(array: ?Array<T>, iteratee?: (accumulator: U, value: T, index: number, array: ?Array<T>) => U, accumulator?: U): U;
    reduce<T: Object, U>(object: T, iteratee?: (accumulator: U, value: any, key: string, object: T) => U, accumulator?: U): U;
    reduceRight<T, U>(array: ?Array<T>, iteratee?: (accumulator: U, value: T, index: number, array: ?Array<T>) => U, accumulator?: U): U;
    reduceRight<T: Object, U>(object: T, iteratee?: (accumulator: U, value: any, key: string, object: T) => U, accumulator?: U): U;
    reject<T>(array: ?Array<T>, predicate?: Predicate<T>): Array<T>;
    reject<V: Object, A, T: {[id: string]: A}>(object: T, predicate?: OPredicate<A, T>): Array<V>;
    sample<T>(array: ?Array<T>): T;
    sample<V, T: Object>(object: T): V;
    sampleSize<T>(array: ?Array<T>, n?: number): Array<T>;
    sampleSize<V, T: Object>(object: T, n?: number): Array<V>;
    shuffle<T>(array: ?Array<T>): Array<T>;
    shuffle<V, T: Object>(object: T): Array<V>;
    size(collection: Array<any>|Object): number;
    some<T>(array: ?Array<T>, predicate?: Predicate<T>): bool;
    some<A, T: {[id: string]: A}>(object?: ?T, predicate?: OPredicate<A, T>): bool;
    sortBy<T>(array: ?Array<T>, ...iteratees?: Array<Iteratee<T>>): Array<T>;
    sortBy<T>(array: ?Array<T>, iteratees?: Array<Iteratee<T>>): Array<T>;
    sortBy<V, T: Object>(object: T, ...iteratees?: Array<OIteratee<T>>): Array<V>;
    sortBy<V, T: Object>(object: T, iteratees?: Array<OIteratee<T>>): Array<V>;

    // Date
    now(): number;

    // Function
    after(n: number, fn: Function): Function;
    ary(func: Function, n?: number): Function;
    before(n: number, fn: Function): Function;
    bind(func: Function, thisArg: any, ...partials: Array<any>): Function;
    bindKey(obj: Object, key: string, ...partials: Array<any>): Function;
    curry(func: Function, arity?: number): Function;
    curryRight(func: Function, arity?: number): Function;
    debounce(func: Function, wait?: number, options?: DebounceOptions): Function;
    defer(func: Function, ...args?: Array<any>): number;
    delay(func: Function, wait: number, ...args?: Array<any>): number;
    flip(func: Function): Function;
    memoize(func: Function, resolver?: Function): Function;
    negate(predicate: Function): Function;
    once(func: Function): Function;
    overArgs(func: Function, ...transforms: Array<Function>): Function;
    overArgs(func: Function, transforms: Array<Function>): Function;
    partial(func: Function, ...partials: any[]): Function;
    partialRight(func: Function, ...partials: Array<any>): Function;
    partialRight(func: Function, partials: Array<any>): Function;
    rearg(func: Function, ...indexes: Array<number>): Function;
    rearg(func: Function, indexes: Array<number>): Function;
    rest(func: Function, start?: number): Function;
    spread(func: Function): Function;
    throttle(func: Function, wait?: number, options?: ThrottleOptions): Function;
    unary(func: Function): Function;
    wrap(value: any, wrapper: Function): Function;

    // Lang
    castArray(value: *): any[];
    clone<T>(value: T): T;
    cloneDeep<T>(value: T): T;
    cloneDeepWith<T, U>(value: T, customizer?: ?(value: T, key: number|string, object: T, stack: any) => U): U;
    cloneWith<T, U>(value: T, customizer?: ?(value: T, key: number|string, object: T, stack: any) => U): U;
    conformsTo<T:{[key:string]:mixed}>(source: T, predicates: T&{[key:string]:(x:any)=>boolean}): boolean;
    eq(value: any, other: any): bool;
    gt(value: any, other: any): bool;
    gte(value: any, other: any): bool;
    isArguments(value: any): bool;
    isArray(value: any): bool;
    isArrayBuffer(value: any): bool;
    isArrayLike(value: any): bool;
    isArrayLikeObject(value: any): bool;
    isBoolean(value: any): bool;
    isBuffer(value: any): bool;
    isDate(value: any): bool;
    isElement(value: any): bool;
    isEmpty(value: any): bool;
    isEqual(value: any, other: any): bool;
    isEqualWith<T, U>(value: T, other: U, customizer?: (objValue: any, otherValue: any, key: number|string, object: T, other: U, stack: any) => bool|void): bool;
    isError(value: any): bool;
    isFinite(value: any): bool;
    isFunction(value: Function): true;
    isFunction(value: number|string|void|null|Object): false;
    isInteger(value: any): bool;
    isLength(value: any): bool;
    isMap(value: any): bool;
    isMatch(object?: ?Object, source: Object): bool;
    isMatchWith<T: Object, U: Object>(object: T, source: U, customizer?: (objValue: any, srcValue: any, key: number|string, object: T, source: U) => bool|void): bool;
    isNaN(value: any): bool;
    isNative(value: any): bool;
    isNil(value: any): bool;
    isNull(value: any): bool;
    isNumber(value: any): bool;
    isObject(value: any): bool;
    isObjectLike(value: any): bool;
    isPlainObject(value: any): bool;
    isRegExp(value: any): bool;
    isSafeInteger(value: any): bool;
    isSet(value: any): bool;
    isString(value: string): true;
    isString(value: number|Function|void|null|Object|Array<any>): false;
    isSymbol(value: any): bool;
    isTypedArray(value: any): bool;
    isUndefined(value: any): bool;
    isWeakMap(value: any): bool;
    isWeakSet(value: any): bool;
    lt(value: any, other: any): bool;
    lte(value: any, other: any): bool;
    toArray(value: any): Array<any>;
    toFinite(value: any): number;
    toInteger(value: any): number;
    toLength(value: any): number;
    toNumber(value: any): number;
    toPlainObject(value: any): Object;
    toSafeInteger(value: any): number;
    toString(value: any): string;

    // Math
    add(augend: number, addend: number): number;
    ceil(number: number, precision?: number): number;
    divide(dividend: number, divisor: number): number;
    floor(number: number, precision?: number): number;
    max<T>(array: ?Array<T>): T;
    maxBy<T>(array: ?Array<T>, iteratee?: Iteratee<T>): T;
    mean(array: Array<*>): number;
    meanBy<T>(array: Array<T>, iteratee?: Iteratee<T>): number;
    min<T>(array: ?Array<T>): T;
    minBy<T>(array: ?Array<T>, iteratee?: Iteratee<T>): T;
    multiply(multiplier: number, multiplicand: number): number;
    round(number: number, precision?: number): number;
    subtract(minuend: number, subtrahend: number): number;
    sum(array: Array<*>): number;
    sumBy<T>(array: Array<T>, iteratee?: Iteratee<T>): number;

    // number
    clamp(number: number, lower?: number, upper: number): number;
    inRange(number: number, start?: number, end: number): bool;
    random(lower?: number, upper?: number, floating?: bool): number;

    // Object
    assign(object?: ?Object, ...sources?: Array<Object>): Object;
    assignIn<A, B>(a: A, b: B): A & B;
    assignIn<A, B, C>(a: A, b: B, c: C): A & B & C;
    assignIn<A, B, C, D>(a: A, b: B, c: C, d: D): A & B & C & D;
    assignIn<A, B, C, D, E>(a: A, b: B, c: C, d: D, e: E): A & B & C & D & E;
    assignInWith<T: Object, A: Object>(object: T, s1: A, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A) => any|void): Object;
    assignInWith<T: Object, A: Object, B: Object>(object: T, s1: A, s2: B, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B) => any|void): Object;
    assignInWith<T: Object, A: Object, B: Object, C: Object>(object: T, s1: A, s2: B, s3: C, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B|C) => any|void): Object;
    assignInWith<T: Object, A: Object, B: Object, C: Object, D: Object>(object: T, s1: A, s2: B, s3: C, s4: D, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B|C|D) => any|void): Object;
    assignWith<T: Object, A: Object>(object: T, s1: A, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A) => any|void): Object;
    assignWith<T: Object, A: Object, B: Object>(object: T, s1: A, s2: B, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B) => any|void): Object;
    assignWith<T: Object, A: Object, B: Object, C: Object>(object: T, s1: A, s2: B, s3: C, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B|C) => any|void): Object;
    assignWith<T: Object, A: Object, B: Object, C: Object, D: Object>(object: T, s1: A, s2: B, s3: C, s4: D, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B|C|D) => any|void): Object;
    at(object?: ?Object, ...paths: Array<string>): Array<any>;
    at(object?: ?Object, paths: Array<string>): Array<any>;
    create<T>(prototype: T, properties?: Object): $Supertype<T>;
    defaults(object?: ?Object, ...sources?: Array<Object>): Object;
    defaultsDeep(object?: ?Object, ...sources?: Array<Object>): Object;
    // alias for _.toPairs
    entries(object?: ?Object): NestedArray<any>;
    // alias for _.toPairsIn
    entriesIn(object?: ?Object): NestedArray<any>;
    // alias for _.assignIn
    extend<A, B>(a: A, b: B): A & B;
    extend<A, B, C>(a: A, b: B, c: C): A & B & C;
    extend<A, B, C, D>(a: A, b: B, c: C, d: D): A & B & C & D;
    extend<A, B, C, D, E>(a: A, b: B, c: C, d: D, e: E): A & B & C & D & E;
    // alias for _.assignInWith
    extendWith<T: Object, A: Object>(object: T, s1: A, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A) => any|void): Object;
    extendWith<T: Object, A: Object, B: Object>(object: T, s1: A, s2: B, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B) => any|void): Object;
    extendWith<T: Object, A: Object, B: Object, C: Object>(object: T, s1: A, s2: B, s3: C, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B|C) => any|void): Object;
    extendWith<T: Object, A: Object, B: Object, C: Object, D: Object>(object: T, s1: A, s2: B, s3: C, s4: D, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B|C|D) => any|void): Object;
    findKey<A, T: {[id: string]: A}>(object?: ?T, predicate?: OPredicate<A, T>): string|void;
    findLastKey<A, T: {[id: string]: A}>(object?: ?T, predicate?: OPredicate<A, T>): string|void;
    forIn(object?: ?Object, iteratee?: OIteratee<*>): Object;
    forInRight(object?: ?Object, iteratee?: OIteratee<*>): Object;
    forOwn(object?: ?Object, iteratee?: OIteratee<*>): Object;
    forOwnRight(object?: ?Object, iteratee?: OIteratee<*>): Object;
    functions(object?: ?Object): Array<string>;
    functionsIn(object?: ?Object): Array<string>;
    get(object?: ?Object, path?: ?Array<string>|string, defaultValue?: any): any;
    has(object?: ?Object, path?: ?Array<string>|string): bool;
    hasIn(object?: ?Object, path?: ?Array<string>|string): bool;
    invert(object?: ?Object, multiVal?: bool): Object;
    invertBy(object: ?Object, iteratee?: Function): Object;
    invoke(object?: ?Object, path?: ?Array<string>|string, ...args?: Array<any>): any;
    keys(object?: ?Object): Array<string>;
    keysIn(object?: ?Object): Array<string>;
    mapKeys(object?: ?Object, iteratee?: OIteratee<*>): Object;
    mapValues(object?: ?Object, iteratee?: OIteratee<*>): Object;
    merge(object?: ?Object, ...sources?: Array<?Object>): Object;
    mergeWith<T: Object, A: Object>(object: T, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A) => any|void): Object;
    mergeWith<T: Object, A: Object, B: Object>(object: T, s1: A, s2: B, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B) => any|void): Object;
    mergeWith<T: Object, A: Object, B: Object, C: Object>(object: T, s1: A, s2: B, s3: C, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B|C) => any|void): Object;
    mergeWith<T: Object, A: Object, B: Object, C: Object, D: Object>(object: T, s1: A, s2: B, s3: C, s4: D, customizer?: (objValue: any, srcValue: any, key: string, object: T, source: A|B|C|D) => any|void): Object;
    omit(object?: ?Object, ...props: Array<string>): Object;
    omit(object?: ?Object, props: Array<string>): Object;
    omitBy<A, T: {[id: string]: A}>(object?: ?T, predicate?: OPredicate<A, T>): Object;
    pick(object?: ?Object, ...props: Array<string>): Object;
    pick(object?: ?Object, props: Array<string>): Object;
    pickBy<A, T: {[id: string]: A}>(object?: ?T, predicate?: OPredicate<A, T>): Object;
    result(object?: ?Object, path?: ?Array<string>|string, defaultValue?: any): any;
    set(object?: ?Object, path?: ?Array<string>|string, value: any): Object;
    setWith<T>(object: T, path?: ?Array<string>|string, value: any, customizer?: (nsValue: any, key: string, nsObject: T) => any): Object;
    toPairs(object?: ?Object|Array<*>): NestedArray<any>;
    toPairsIn(object?: ?Object): NestedArray<any>;
    transform(collection: Object|Array<any>, iteratee?: OIteratee<*>, accumulator?: any): any;
    unset(object?: ?Object, path?: ?Array<string>|string): bool;
    update(object: Object, path: string[]|string, updater: Function): Object;
    updateWith(object: Object, path: string[]|string, updater: Function, customizer?: Function): Object;
    values(object?: ?Object): Array<any>;
    valuesIn(object?: ?Object): Array<any>;

    // Seq
    // harder to read, but this is _()
    (value: any): any;
    chain<T>(value: T): any;
    tap<T>(value: T, interceptor: (value:T)=>any): T;
    thru<T1,T2>(value: T1, interceptor: (value:T1)=>T2): T2;
    // TODO: _.prototype.*

    // String
    camelCase(string?: ?string): string;
    capitalize(string?: string): string;
    deburr(string?: string): string;
    endsWith(string?: string, target?: string, position?: number): bool;
    escape(string?: string): string;
    escapeRegExp(string?: string): string;
    kebabCase(string?: string): string;
    lowerCase(string?: string): string;
    lowerFirst(string?: string): string;
    pad(string?: string, length?: number, chars?: string): string;
    padEnd(string?: string, length?: number, chars?: string): string;
    padStart(string?: string, length?: number, chars?: string): string;
    parseInt(string: string, radix?: number): number;
    repeat(string?: string, n?: number): string;
    replace(string?: string, pattern: RegExp|string, replacement: ((string: string) => string)|string): string;
    snakeCase(string?: string): string;
    split(string?: string, separator: RegExp|string, limit?: number): Array<string>;
    startCase(string?: string): string;
    startsWith(string?: string, target?: string, position?: number): bool;
    template(string?: string, options?: TemplateSettings): Function;
    toLower(string?: string): string;
    toUpper(string?: string): string;
    trim(string?: string, chars?: string): string;
    trimEnd(string?: string, chars?: string): string;
    trimStart(string?: string, chars?: string): string;
    truncate(string?: string, options?: TruncateOptions): string;
    unescape(string?: string): string;
    upperCase(string?: string): string;
    upperFirst(string?: string): string;
    words(string?: string, pattern?: RegExp|string): Array<string>;

    // Util
    attempt(func: Function): any;
    bindAll(object?: ?Object, methodNames: Array<string>): Object;
    bindAll(object?: ?Object, ...methodNames: Array<string>): Object;
    cond(pairs: NestedArray<Function>): Function;
    conforms(source: Object): Function;
    constant<T>(value: T): () => T;
    defaultTo<T1:string|boolean|Object,T2>(value: T1, default: T2): T1;
    // NaN is a number instead of its own type, otherwise it would behave like null/void
    defaultTo<T1:number,T2>(value: T1, default: T2): T1|T2;
    defaultTo<T1:void|null,T2>(value: T1, default: T2): T2;
    flow(...funcs?: Array<Function>): Function;
    flow(funcs?: Array<Function>): Function;
    flowRight(...funcs?: Array<Function>): Function;
    flowRight(funcs?: Array<Function>): Function;
    identity<T>(value: T): T;
    iteratee(func?: any): Function;
    matches(source: Object): Function;
    matchesProperty(path?: ?Array<string>|string, srcValue: any): Function;
    method(path?: ?Array<string>|string, ...args?: Array<any>): Function;
    methodOf(object?: ?Object, ...args?: Array<any>): Function;
    mixin<T: Function|Object>(object?: T, source: Object, options?: { chain: bool }): T;
    noConflict(): Lodash;
    noop(): void;
    nthArg(n?: number): Function;
    over(...iteratees: Array<Function>): Function;
    over(iteratees: Array<Function>): Function;
    overEvery(...predicates: Array<Function>): Function;
    overEvery(predicates: Array<Function>): Function;
    overSome(...predicates: Array<Function>): Function;
    overSome(predicates: Array<Function>): Function;
    property(path?: ?Array<string>|string): Function;
    propertyOf(object?: ?Object): Function;
    range(start: number, end: number, step?: number): Array<number>;
    range(end: number, step?: number): Array<number>;
    rangeRight(start: number, end: number, step?: number): Array<number>;
    rangeRight(end: number, step?: number): Array<number>;
    runInContext(context?: Object): Function;

    stubArray(): Array<*>;
    stubFalse(): false;
    stubObject(): {};
    stubString(): '';
    stubTrue(): true;
    times(n: number, ...rest: Array<void>): Array<number>;
    times<T>(n: number, iteratee: ((i: number) => T)): Array<T>;
    toPath(value: any): Array<string>;
    uniqueId(prefix?: string): string;

    // Properties
    VERSION: string;
    templateSettings: TemplateSettings;
  }

  declare var exports: Lodash;
}


================================================
FILE: flow-typed/npm/mocha_v3.1.x.js
================================================
// flow-typed signature: 6b82cf8c1da27b4f0fa7a58e5ed5babf
// flow-typed version: edf70dde46/mocha_v3.1.x/flow_>=v0.22.x

type TestFunction = ((done: () => void) => void | Promise<mixed>);

declare var describe : {
    (name:string, spec:() => void): void;
    only(description:string, spec:() => void): void;
    skip(description:string, spec:() => void): void;
    timeout(ms:number): void;
};

declare var context : typeof describe;

declare var it : {
    (name:string, spec?:TestFunction): void;
    only(description:string, spec:TestFunction): void;
    skip(description:string, spec:TestFunction): void;
    timeout(ms:number): void;
};

declare function before(method : TestFunction):void;
declare function beforeEach(method : TestFunction):void;
declare function after(method : TestFunction):void;
declare function afterEach(method : TestFunction):void;


================================================
FILE: flow-typed/npm/nodemon_vx.x.x.js
================================================
// flow-typed signature: ecc82da093280a7b0eef229e40c481bc
// flow-typed version: <<STUB>>/nodemon_v^1.11.0/flow_v0.36.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'nodemon'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'nodemon' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'nodemon/bin/nodemon' {
  declare module.exports: any;
}

declare module 'nodemon/lib/cli/index' {
  declare module.exports: any;
}

declare module 'nodemon/lib/cli/parse' {
  declare module.exports: any;
}

declare module 'nodemon/lib/config/command' {
  declare module.exports: any;
}

declare module 'nodemon/lib/config/defaults' {
  declare module.exports: any;
}

declare module 'nodemon/lib/config/exec' {
  declare module.exports: any;
}

declare module 'nodemon/lib/config/index' {
  declare module.exports: any;
}

declare module 'nodemon/lib/config/load' {
  declare module.exports: any;
}

declare module 'nodemon/lib/help/index' {
  declare module.exports: any;
}

declare module 'nodemon/lib/index' {
  declare module.exports: any;
}

declare module 'nodemon/lib/monitor/index' {
  declare module.exports: any;
}

declare module 'nodemon/lib/monitor/match' {
  declare module.exports: any;
}

declare module 'nodemon/lib/monitor/run' {
  declare module.exports: any;
}

declare module 'nodemon/lib/monitor/watch' {
  declare module.exports: any;
}

declare module 'nodemon/lib/nodemon' {
  declare module.exports: any;
}

declare module 'nodemon/lib/rules/add' {
  declare module.exports: any;
}

declare module 'nodemon/lib/rules/index' {
  declare module.exports: any;
}

declare module 'nodemon/lib/rules/parse' {
  declare module.exports: any;
}

declare module 'nodemon/lib/spawn' {
  declare module.exports: any;
}

declare module 'nodemon/lib/utils/bus' {
  declare module.exports: any;
}

declare module 'nodemon/lib/utils/clone' {
  declare module.exports: any;
}

declare module 'nodemon/lib/utils/colour' {
  declare module.exports: any;
}

declare module 'nodemon/lib/utils/index' {
  declare module.exports: any;
}

declare module 'nodemon/lib/utils/log' {
  declare module.exports: any;
}

declare module 'nodemon/lib/utils/merge' {
  declare module.exports: any;
}

declare module 'nodemon/lib/version' {
  declare module.exports: any;
}

declare module 'nodemon/web/index' {
  declare module.exports: any;
}

// Filename aliases
declare module 'nodemon/bin/nodemon.js' {
  declare module.exports: $Exports<'nodemon/bin/nodemon'>;
}
declare module 'nodemon/lib/cli/index.js' {
  declare module.exports: $Exports<'nodemon/lib/cli/index'>;
}
declare module 'nodemon/lib/cli/parse.js' {
  declare module.exports: $Exports<'nodemon/lib/cli/parse'>;
}
declare module 'nodemon/lib/config/command.js' {
  declare module.exports: $Exports<'nodemon/lib/config/command'>;
}
declare module 'nodemon/lib/config/defaults.js' {
  declare module.exports: $Exports<'nodemon/lib/config/defaults'>;
}
declare module 'nodemon/lib/config/exec.js' {
  declare module.exports: $Exports<'nodemon/lib/config/exec'>;
}
declare module 'nodemon/lib/config/index.js' {
  declare module.exports: $Exports<'nodemon/lib/config/index'>;
}
declare module 'nodemon/lib/config/load.js' {
  declare module.exports: $Exports<'nodemon/lib/config/load'>;
}
declare module 'nodemon/lib/help/index.js' {
  declare module.exports: $Exports<'nodemon/lib/help/index'>;
}
declare module 'nodemon/lib/index.js' {
  declare module.exports: $Exports<'nodemon/lib/index'>;
}
declare module 'nodemon/lib/monitor/index.js' {
  declare module.exports: $Exports<'nodemon/lib/monitor/index'>;
}
declare module 'nodemon/lib/monitor/match.js' {
  declare module.exports: $Exports<'nodemon/lib/monitor/match'>;
}
declare module 'nodemon/lib/monitor/run.js' {
  declare module.exports: $Exports<'nodemon/lib/monitor/run'>;
}
declare module 'nodemon/lib/monitor/watch.js' {
  declare module.exports: $Exports<'nodemon/lib/monitor/watch'>;
}
declare module 'nodemon/lib/nodemon.js' {
  declare module.exports: $Exports<'nodemon/lib/nodemon'>;
}
declare module 'nodemon/lib/rules/add.js' {
  declare module.exports: $Exports<'nodemon/lib/rules/add'>;
}
declare module 'nodemon/lib/rules/index.js' {
  declare module.exports: $Exports<'nodemon/lib/rules/index'>;
}
declare module 'nodemon/lib/rules/parse.js' {
  declare module.exports: $Exports<'nodemon/lib/rules/parse'>;
}
declare module 'nodemon/lib/spawn.js' {
  declare module.exports: $Exports<'nodemon/lib/spawn'>;
}
declare module 'nodemon/lib/utils/bus.js' {
  declare module.exports: $Exports<'nodemon/lib/utils/bus'>;
}
declare module 'nodemon/lib/utils/clone.js' {
  declare module.exports: $Exports<'nodemon/lib/utils/clone'>;
}
declare module 'nodemon/lib/utils/colour.js' {
  declare module.exports: $Exports<'nodemon/lib/utils/colour'>;
}
declare module 'nodemon/lib/utils/index.js' {
  declare module.exports: $Exports<'nodemon/lib/utils/index'>;
}
declare module 'nodemon/lib/utils/log.js' {
  declare module.exports: $Exports<'nodemon/lib/utils/log'>;
}
declare module 'nodemon/lib/utils/merge.js' {
  declare module.exports: $Exports<'nodemon/lib/utils/merge'>;
}
declare module 'nodemon/lib/version.js' {
  declare module.exports: $Exports<'nodemon/lib/version'>;
}
declare module 'nodemon/web/index.js' {
  declare module.exports: $Exports<'nodemon/web/index'>;
}


================================================
FILE: lib/core/index.js
================================================
// @flow

import fs from 'fs';
import path from 'path';
import fp from 'lodash/fp';
import _ from 'lodash';
import gonzales from 'gonzales-pe';

import type { JsNode, gASTNode } from '../types';

import {
  getRegularClassesMap,
  getComposesClassesMap,
  getExtendClassesMap,
  getParentSelectorClassesMap,
  getICSSExportPropsMap,
  eliminateGlobals,
} from './traversalUtils';

const styleExtensionRegex = /\.(s?css|less)$/;

function dashesCamelCase (str: string) {
  return str.replace(/-+(\w)/g, function (match, firstLetter) {
    return firstLetter.toUpperCase();
  });
}

export const getFilePath = (context, styleFilePath) => {
  const settings = context.settings['css-modules'];

  const dirName = path.dirname(context.getFilename());
  const basePath = (settings && settings.basePath) ? settings.basePath : '';

  return styleFilePath.startsWith('.')
    ? path.resolve(dirName, styleFilePath)
    : path.resolve(basePath, styleFilePath);
};

export const getPropertyName = (node: JsNode): ?string => {
  const propertyName = node.computed
    /*
       square braces eg s['header']
       we won't use node.property.name because it is for cases like
       s[abc] where abc is a variable
     */
    ? node.property.value
    /* dot notation, eg s.header */
    : node.property.name;

  /*
     skip property names starting with _
     eg. special functions provided
     by css modules like _getCss()

     Tried to just skip function calls, but the parser
     thinks of normal property access like s._getCss and
     function calls like s._getCss() as same.
   */
  if (!propertyName || _.startsWith(propertyName, '_')) {
    return null;
  }

  return propertyName;
};

export const getClassesMap = (classes: Object, camelCase: string|boolean): Object => {
  const classesMap = {};

  // Unroll the loop because of performance!
  // Remember that this function will run on every lint (e.g.: on file save)
  switch (camelCase) {
    case true:
      _.forIn(classes, (value, className) => {
        classesMap[className] = className;
        classesMap[_.camelCase(className)] = className;
      });
      break;
    case 'dashes':
      _.forIn(classes, (value, className) => {
        classesMap[className] = className;
        classesMap[dashesCamelCase(className)] = className;
      });
      break;
    case 'only':
      _.forIn(classes, (value, className) => {
        classesMap[_.camelCase(className)] = className;
      });
      break;
    case 'dashes-only':
      _.forIn(classes, (value, className) => {
        classesMap[dashesCamelCase(className)] = className;
      });
      break;
    default:
      _.forIn(classes, (value, className) => {
        classesMap[className] = className;
      });
  }

  return classesMap;
};

export const getStyleImportNodeData = (node: JsNode): ?Object => {
  // path from which it was imported
  const styleFilePath = fp.get('source.value')(node);

  if (styleFilePath && styleExtensionRegex.test(styleFilePath)) {
    const importNode = fp.compose(
      fp.find({ type: 'ImportDefaultSpecifier' }),
      fp.get('specifiers'),
    )(node);

    // the default imported name
    const importName = fp.get('local.name')(importNode);

    if (importName) { // it had a default import
      return { importName, styleFilePath, importNode };
    }
  }
};

export const fileExists = (filePath: string): boolean => {
  try {
    // check if file exists
    fs.statSync(filePath);
    return true;
  } catch (e) {
    return false;
  }
};

/**
 * @returns AST of the parsed file or null if parse failed
 */
export const getAST = (filePath: string): gASTNode | null => {
  const fileContent = fs.readFileSync(filePath);

  const syntax = path.extname(filePath).slice(1); // remove leading .

  try {
    return gonzales.parse(fileContent.toString(), { syntax });
  } catch (e) {
    return null;
  }
};

export const getStyleClasses = (ast: gASTNode): ?Object => {
  /*
     mutates ast by removing :global scopes
   */
  eliminateGlobals(ast);

  const classesMap = getRegularClassesMap(ast);
  const composedClassesMap = getComposesClassesMap(ast);
  const extendClassesMap = getExtendClassesMap(ast);
  const parentSelectorClassesMap = getParentSelectorClassesMap(ast);

  return {
    ...classesMap,
    ...composedClassesMap,
    ...extendClassesMap,
    ...parentSelectorClassesMap
  };
};

export const getExportPropsMap = (ast: gASTNode): ?Object => {
  const exportPropsMap = getICSSExportPropsMap(ast);
  return {
    ...exportPropsMap
  };
};


================================================
FILE: lib/core/traversalUtils.js
================================================
// @flow
/* eslint-disable no-param-reassign */
import fp from 'lodash/fp';

import type { gASTNode } from '../types';

type classMapType = {
  [key: string]: boolean,
}

export const getICSSExportPropsMap = (ast: gASTNode): classMapType => {
  const ruleSets: Array<gASTNode> = [];
  ast.traverseByType('ruleset', node => ruleSets.push(node));

  return fp.compose(
    fp.reduce((result, key) => {
      const prop = fp.compose(fp.nth(0), fp.map('content'))(key);
      result[prop] = prop; // e.g. { myProp: 'myProp' }
      return result;
    }, {}),
    fp.map('content'),
    fp.filter({ type: 'property' }),
    fp.flatMap('content'),
    fp.filter({ type: 'declaration' }),
    fp.flatMap('content'),
    fp.filter({ type: 'block' }),
    fp.flatMap('content'),
    fp.filter({
      content: [{
        type: 'selector',
        content: [{
          type: 'pseudoClass',
          content: [{
            type: 'ident', content: 'export'
          }]
        }]
      }]
    })
  )(ruleSets);
};

export const getRegularClassesMap = (ast: gASTNode): classMapType => {
  const ruleSets: Array<gASTNode> = [];
  ast.traverseByType('ruleset', node => ruleSets.push(node));

  return fp.compose(
    fp.reduce((result, key) => {
      result[key] = false; // classes haven't been used
      return result;
    }, {}),
    fp.map('content'),
    fp.filter({ type: 'ident' }),
    fp.flatMap('content'),
    fp.filter({ type: 'class' }),
    fp.flatMap('content'),
    fp.filter({ type: 'selector' }),
    fp.flatMap('content'),
  )(ruleSets);
};

export const getComposesClassesMap = (ast: gASTNode): classMapType => {
  const declarations = [];
  ast.traverseByType('declaration', node => declarations.push(node));

  return fp.compose(
    fp.reduce((result, key) => {
      result[key] = true; // mark composed classes as true
      return result;
    }, {}),
    fp.flatMap(fp.compose(
      fp.map(fp.get('content')),
      fp.filter({ type: 'ident' }),
      fp.get('content'),
      fp.find({ type: 'value' }),
      fp.get('content'),
    )),
    /*
       reject classes composing from other files
       eg.
       .foo {
       composes: .bar from './otherFile';
       }
     */
    fp.reject(fp.compose(
      fp.find({ type: 'ident', content: 'from' }),
      fp.get('content'),
      fp.find({ type: 'value' }),
      fp.get('content'),
    )),
    fp.filter(fp.compose(
      fp.find({ type: 'ident', content: 'composes' }),
      fp.get('content'),
      fp.find({ type: 'property' }),
      fp.get('content'),
    )),
  )(declarations);
};

export const getExtendClassesMap = (ast: gASTNode): classMapType => {
  const extendNodes = [];
  ast.traverseByType('extend', node => extendNodes.push(node));

  return fp.compose(
    fp.reduce((result, key) => {
      result[key] = true; // mark extend classes as true
      return result;
    }, {}),
    fp.map(fp.compose(
      fp.get('content'),
      fp.find({ type: 'ident' }),
      fp.get('content'),
      fp.find({ type: 'class' }),
      fp.get('content'),
      fp.find({ type: 'selector' }),
      fp.get('content'),
    )),
  )(extendNodes);
};

/**
 * Resolves parent selectors to their full class names.
 *
 * E.g. `.foo { &_bar {color: blue } }` to `.foo_bar`.
 */
export const getParentSelectorClassesMap = (ast: gASTNode): classMapType => {
  const classesMap: classMapType = {};

  // Recursively traverses down the tree looking for parent selector
  // extensions. Recursion is necessary as these selectors can be nested.
  const getExtensions = nodeContent => {
    const blockContent = fp.compose(
      fp.flatMap('content'),
      fp.filter({ type: 'block' })
    )(nodeContent);

    const rulesetsContent = fp.flatMap('content', fp.concat(
      // `ruleset` children
      fp.filter({ type: 'ruleset' }, blockContent),

      // `ruleset` descendants nested in `include` nodes
      fp.compose(
        fp.filter({ type: 'ruleset' }),
        fp.flatMap('content'),
        fp.filter({ type: 'block' }),
        fp.flatMap('content'),
        fp.filter({ type: 'include' })
      )(blockContent)
    ));

    const extensions = fp.compose(
      fp.map('content'),
      fp.filter({ type: 'ident' }),
      fp.flatMap('content'),
      fp.filter({ type: 'parentSelectorExtension' }),
      fp.flatMap('content'),
      fp.filter({ type: 'selector' })
    )(rulesetsContent);

    if (!extensions.length) return [];

    const nestedExtensions = getExtensions(rulesetsContent);
    const result = extensions;
    if (nestedExtensions.length) {
      nestedExtensions.forEach(nestedExt => {
        extensions.forEach(ext => {
          result.push(ext + nestedExt);
        });
      });
    }

    return result;
  };

  ast.traverseByType('ruleset', node => {
    const classNames = fp.compose(
      fp.map('content'),
      fp.filter({ type: 'ident' }),
      fp.flatMap('content'),
      fp.filter({ type: 'class' }),
      fp.flatMap('content'),
      fp.filter({ type: 'selector' })
    )(node.content);

    if (!classNames.length) return;

    const extensions = getExtensions(node.content);
    if (!extensions.length) return;

    classNames.forEach(className => {
      extensions.forEach(ext => {
        classesMap[className + ext] = false;
      });

      // Ignore the base class if it only exists for nesting parent selectors
      const hasDeclarations = fp.compose(
        fp.filter({ type: 'declaration' }),
        fp.flatMap('content'),
        fp.filter({ type: 'block' })
      )(node.content).length > 0;
      if (!hasDeclarations) classesMap[className] = true;
    });
  });

  return classesMap;
};

/**
 * Mutates the AST by removing `:global` instances.
 *
 * For the AST structure:
 * @see https://github.com/css/gonzales/blob/master/doc/AST.CSSP.en.md
 */
export const eliminateGlobals = (ast: gASTNode) => {
  // Remove all :global/:global(...) in selectors
  ast.traverseByType('selector', (selectorNode) => {
    const selectorContent = selectorNode.content;
    let hasGlobalWithNoArgs = false;
    let i = 0;
    let currNode = selectorContent[i];
    while (currNode) {
      if (currNode.is('pseudoClass')) {
        // Remove all :global/:global(...) and trailing space
        const identifierNode = currNode.content[0];
        if (identifierNode && identifierNode.content === 'global') {
          if (currNode.content.length === 1) hasGlobalWithNoArgs = true;
          selectorNode.removeChild(i);
          if (selectorContent[i] && selectorContent[i].is('space')) {
            selectorNode.removeChild(i);
          }
        } else {
          i++;
        }
      } else if (currNode.is('class') && hasGlobalWithNoArgs) {
        // Remove all class after :global and their trailing space
        selectorNode.removeChild(i);
        if (selectorContent[i] && selectorContent[i].is('space')) {
          selectorNode.removeChild(i);
        }
      } else {
        i++;
      }

      currNode = selectorContent[i];
    }
  });

  // Remove all ruleset with no selectors
  ast.traverseByType('ruleset', (node, index, parent) => {
    const rulesetContent = node.content;

    // Remove empty selectors and trailing deliminator and space
    let i = 0;
    let currNode = rulesetContent[i];
    while (currNode) {
      if (currNode.is('selector') && currNode.content.length === 0) {
        node.removeChild(i);
        if (rulesetContent[i].is('delimiter')) node.removeChild(i);
        if (rulesetContent[i].is('space')) node.removeChild(i);
      } else {
        i++;
      }
      currNode = rulesetContent[i];
    }

    // Remove the ruleset if no selectors
    if (rulesetContent.filter((node) => node.is('selector')).length === 0) {
      parent.removeChild(index);
    }
  });
};


================================================
FILE: lib/index.js
================================================
export rules from './rules';

export const configs = {
  recommended: {
    rules: {
      'css-modules/no-unused-class': 2, // error
      'css-modules/no-undef-class': 2, // error
    }
  }
};


================================================
FILE: lib/rules/index.js
================================================
import noUnusedClass from './no-unused-class';
import noUndefClass from './no-undef-class';

export default {
  'no-unused-class': noUnusedClass,
  'no-undef-class': noUndefClass,
};


================================================
FILE: lib/rules/no-undef-class.js
================================================
/* @flow */
import _ from 'lodash';

import {
  getStyleImportNodeData,
  getAST,
  fileExists,
  getStyleClasses,
  getPropertyName,
  getClassesMap,
  getExportPropsMap,
  getFilePath,
} from '../core';

import type { JsNode } from '../types';

export default {
  meta: {
    docs: {
      description: 'Checks that you are using the existent css/scss/less classes',
      recommended: true,
    },
    schema: [
      {
        type: 'object',
        properties: {
          camelCase: { enum: [true, 'dashes', 'only', 'dashes-only'] }
        },
      }
    ],
  },
  create (context: Object) {
    const camelCase = _.get(context, 'options[0].camelCase');

    /*
       maps variable name to property Object
       map = {
         [variableName]: {
           classesMap: { foo: 'foo', fooBar: 'foo-bar', 'foo-bar': 'foo-bar' },
           node: {...}
         }
       }

       example:
       import s from './foo.scss';
       s is variable name

       property Object has two keys
       1. classesMap: an object with propertyName as key and its className as value
       2. node: node that correspond to s (see example above)
     */
    const map = {};

    return {
      ImportDeclaration (node: JsNode) {
        const styleImportNodeData = getStyleImportNodeData(node);

        if (!styleImportNodeData) {
          return;
        }

        const {
          importName,
          styleFilePath,
          importNode,
        } = styleImportNodeData;

        const styleFileAbsolutePath = getFilePath(context, styleFilePath);
        let classesMap = {};
        let exportPropsMap = {};

        if (fileExists(styleFileAbsolutePath)) {
          const ast = getAST(styleFileAbsolutePath);
          const classes = ast && getStyleClasses(ast);

          classesMap = classes && getClassesMap(classes, camelCase);
          exportPropsMap = ast && getExportPropsMap(ast);
        }

        // this will be used to check if classes are defined
        _.set(map, `${importName}.classesMap`, classesMap);

        // this will be used to check if :export properties are defined
        _.set(map, `${importName}.exportPropsMap`, exportPropsMap);

        // save node for reporting unused styles
        _.set(map, `${importName}.node`, importNode);
      },
      MemberExpression: (node: JsNode) => {
        /*
           Check if property exists in css/scss file as class
         */

        const objectName = node.object.name;

        const propertyName = getPropertyName(node, camelCase);

        if (!propertyName) {
          return;
        }

        const classesMap = _.get(map, `${objectName}.classesMap`);
        const exportPropsMap = _.get(map, `${objectName}.exportPropsMap`);

        if (classesMap && classesMap[propertyName] == null &&
            exportPropsMap && exportPropsMap[propertyName] == null) {
          context.report(node.property, `Class or exported property '${propertyName}' not found`);
        }
      }
    };
  }
};


================================================
FILE: lib/rules/no-unused-class.js
================================================
/* @flow */
import fp from 'lodash/fp';
import _ from 'lodash';
import path from 'path';

import {
  getStyleImportNodeData,
  getStyleClasses,
  getPropertyName,
  getClassesMap,
  getFilePath,
  getAST,
  fileExists,
} from '../core';

import type { JsNode } from '../types';

export default {
  meta: {
    docs: {
      description: 'Checks that you are using all css/scss/less classes',
      recommended: true,
    },
    schema: [
      {
        type: 'object',
        properties: {
          camelCase: { enum: [true, 'dashes', 'only', 'dashes-only'] },
          markAsUsed: { type: 'array' },
        },
      }
    ],
  },
  create (context: Object) {
    const markAsUsed = _.get(context, 'options[0].markAsUsed');
    const camelCase = _.get(context, 'options[0].camelCase');

    /*
       maps variable name to property Object
       map = {
         [variableName]: {
           classes: { foo: false, 'foo-bar': false },
           classesMap: { foo: 'foo', fooBar: 'foo-bar', 'foo-bar': 'foo-bar' },
           node: {...}
         }
       }

       example:
       import s from './foo.scss';
       s is variable name

       property Object has two keys
       1. classes: an object with className as key and a boolean as value. The boolean is marked if it is used in file
       2. classesMap: an object with propertyName as key and its className as value
       3. node: node that correspond to s (see example above)
     */
    const map = {};

    return {
      ImportDeclaration (node: JsNode) {
        const styleImportNodeData = getStyleImportNodeData(node);

        if (!styleImportNodeData) {
          return;
        }

        const {
          importName,
          styleFilePath,
          importNode,
        } = styleImportNodeData;

        const styleFileAbsolutePath = getFilePath(context, styleFilePath);

        let classes = {};
        let classesMap = {};

        if (fileExists(styleFileAbsolutePath)) {
          // this will be used to mark s.foo as used in MemberExpression
          const ast = getAST(styleFileAbsolutePath);
          classes = ast && getStyleClasses(ast);
          classesMap = classes && getClassesMap(classes, camelCase);
        }

        _.set(map, `${importName}.classes`, classes);
        _.set(map, `${importName}.classesMap`, classesMap);

        // save node for reporting unused styles
        _.set(map, `${importName}.node`, importNode);

        // save file path for reporting unused styles
        _.set(map, `${importName}.filePath`, styleFilePath);
      },
      MemberExpression: (node: JsNode) => {
        /*
           Check if property exists in css/scss file as class
         */

        const objectName = node.object.name;
        const propertyName = getPropertyName(node, camelCase);

        if (!propertyName) {
          return;
        }

        const className = _.get(map, `${objectName}.classesMap.${propertyName}`);

        if (className == null) {
          return;
        }

        // mark this property has used
        _.set(map, `${objectName}.classes.${className}`, true);
      },
      'Program:exit' () {
        /*
           Check if all classes defined in css/scss file are used
         */

        /*
           we are looping over each import style node in program
           example:
           ```
             import s from './foo.css';
             import x from './bar.scss';
           ```
           then the loop will be run 2 times
         */
        _.forIn(map, (o) => {
          const { classes, node, filePath } = o;

          /*
             if option is passed to mark a class as used, example:
             eslint css-modules/no-unused-class: [2, { markAsUsed: ['container'] }]
           */
          _.forEach(markAsUsed, (usedClass) => {
            classes[usedClass] = true;
          });

          // classNames not marked as true are unused
          const unusedClasses = fp.compose(
            fp.keys,
            fp.omitBy(fp.identity), // omit truthy values
          )(classes);

          if (!_.isEmpty(unusedClasses)) {
            context.report(node, `Unused classes found in ${path.basename(filePath)}: ${unusedClasses.join(', ')}`);
          }
        });
      }
    };
  }
};


================================================
FILE: lib/types/index.js
================================================
// js Node
export type Position = {
  line: number, // 1 indexed
  column: number, // 0 indexed
};

export type SourceLocation = {
  start: Position,
  end: Position,
  identifierName?: string,
};

export type JsNode = {
  type: 'ImportDeclaration' | 'ImportDefaultSpecifier',
  start: number,
  end: number,
  loc: JsNode,
  local?: JsNode,
  name?: string,
  value?: string,
  specifiers?: Array<JsNode>,
  importKind?: 'value',
  extra?: {
    rawValue: string,
    raw: string,
  },
  source: JsNode,
  range: Array<number>, // most probably array of 2 numbers ?,
  _babelType: string,
  parent: JsNode,
};

// gonzales AST Node Type
export type gASTNode = {
  traverseByType: Function,

  type: 'stylesheet'
      | 'ident'
      | 'class'
      | 'selector'
      | 'value'
      | 'property'
      | 'ruleset'
      | 'extend'
      | 'declaration',
  content: string | Array<gASTNode>,
  syntax: 'css' | 'scss' | 'less',
};


================================================
FILE: package.json
================================================
{
  "name": "eslint-plugin-css-modules",
  "version": "2.12.0",
  "description": "Checks that you are using the existent css/scss/less classes, no more no less",
  "main": "build/index.js",
  "files": [
    "build",
    "packages"
  ],
  "scripts": {
    "watch": "babel lib -d build --watch",
    "build": "rm -rf build && babel lib -d build",
    "lint": "eslint lib test",
    "test": "mocha 'test/**/*.test.js' --compilers js:@babel/register",
    "my-pre-publish": "npm run test && npm run build",
    "my-publish": "npm run my-pre-publish && yarn publish"
  },
  "engines": {
    "node": ">=4.0.0"
  },
  "keywords": [
    "eslint",
    "eslintplugin",
    "eslint-plugin",
    "css-modules"
  ],
  "author": {
    "name": "Atif Afzal",
    "email": "atif5801@gmail.com",
    "url": "http://atfzl.me"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/atfzl/eslint-plugin-css-modules.git"
  },
  "license": "MIT",
  "peerDependencies": {
    "eslint": ">=2.0.0"
  },
  "devDependencies": {
    "@babel/cli": "^7.23.0",
    "@babel/core": "^7.23.0",
    "@babel/eslint-parser": "^7.22.15",
    "@babel/plugin-proposal-export-default-from": "^7.22.17",
    "@babel/plugin-syntax-flow": "^7.22.5",
    "@babel/plugin-transform-flow-strip-types": "^7.22.5",
    "@babel/preset-env": "^7.22.20",
    "@babel/register": "^7.22.15",
    "chai": "^4.3.9",
    "eslint": "^8.50.0",
    "eslint-config-standard": "^17.1.0",
    "eslint-plugin-import": "^2.28.1",
    "eslint-plugin-mocha": "^10.2.0",
    "eslint-plugin-n": "^16.1.0",
    "eslint-plugin-promise": "^6.1.1",
    "flow-bin": "^0.36.0",
    "mocha": "^3.2.0",
    "nodemon": "^3.0.1"
  },
  "dependencies": {
    "gonzales-pe": "^4.3.0",
    "lodash": "^4.17.2"
  }
}


================================================
FILE: test/files/composes1.scss
================================================
.foo {
  font-weight: 300;
}

.bar {
  color: red;
  composes: foo;
}

.baz {
  composes: other from './otherfile';
  color: blue;
}


================================================
FILE: test/files/composesMultiple1.scss
================================================
.foo {
  font-weight: 300;
}

.tar {
  color: black;
}

.bar {
  color: red;
  composes: foo tar;
}

.baz {
  composes: other from './otherfile';
  color: blue;
}


================================================
FILE: test/files/export1.scss
================================================
.bar {
  color: blue;
}

:export {
  myProp: something;
}


================================================
FILE: test/files/export2.scss
================================================
.bar {
  color: blue;
}

:export {
  otherProp: something;
}


================================================
FILE: test/files/extend1.scss
================================================
.foo {
  font-weight: 300;
}

.bar {
  @extend .foo;
  color: red;
}

.baz {
  width: 100px;
}


================================================
FILE: test/files/foo.js
================================================
/*
   nothing to see here
   this file will be provided as filename parameter for RuleTester.
   This file is referred in utils.js
 */


================================================
FILE: test/files/global1.scss
================================================
.local1 {}

.local2 {
  :global(.global1) {}
}

:global .global1 {}

:global(.global2) {}

:global {
  .global1 {

  }
}

.local3 {
  :global {
    .global2 {}
  }
}

.local4 :global .global1 .global2 {}

.local5 :global(.global1, .global2) .local6 {}

================================================
FILE: test/files/noUndefClass1.less
================================================
:global(.bold) {
  font-weight: bold;
}


================================================
FILE: test/files/noUndefClass1.scss
================================================
.container {
  min-width: 1024px;
}


================================================
FILE: test/files/noUndefClass3.scss
================================================
.foo-bar {
  display: flex;
}

.bar-foo {
  display: flex;
}

.alreadyCamelCased {
    display: flex;
}

.snake_cased {
    display: flex;
}

:global(.bar) {
  font-weight: bold;
}


================================================
FILE: test/files/noUnusedClass1.less
================================================
.foo {
  display: flex;
}

:global(.bar) {
  font-weight: bold;
}


================================================
FILE: test/files/noUnusedClass1.scss
================================================
.foo {
  width: 100px;
}

.bar {
  height: 100%;

  .bold {
    font-weight: bold;
  }
}


================================================
FILE: test/files/noUnusedClass2.scss
================================================
.foo {
  display: flex;
}

:global(.bar) {
  font-weight: bold;
}


================================================
FILE: test/files/noUnusedClass3.scss
================================================
.foo-bar {
  display: flex;
}

.bar-foo {
  display: flex;
}

.alreadyCamelCased {
    display: flex;
}

.snake_cased {
    display: flex;
}

:global(.bar) {
  font-weight: bold;
}


================================================
FILE: test/files/parentSelector1.scss
================================================
.foo {
  font-weight: 300;

  &_bar {
    width: 100px;
  }
}


================================================
FILE: test/files/parentSelector2.scss
================================================
.foo {
  font-weight: 300;

  .bar {
    &_baz {
      width: 100px;
    }
  }
}


================================================
FILE: test/files/parentSelector3.scss
================================================
.foo {
  font-weight: 300;

  &_baz {
    width: 100px;
  }

  &_bar {
    width: 100px;
  }
}


================================================
FILE: test/files/parentSelector4.scss
================================================
.foo {
  font-weight: 300;

  &_baz, &_bar {
    width: 100px;
  }
}


================================================
FILE: test/files/parentSelector5.scss
================================================
.foo, .bar {
  font-weight: 300;

  &_baz {
    font-weight: 300;
  }
}


================================================
FILE: test/files/parentSelector6.scss
================================================
.foo {
  font-weight: 300;

  &_bar {
    font-weight: 300;

    &_baz {
      font-weight: 300;
    }
  }
}


================================================
FILE: test/files/parentSelector7.scss
================================================
.foo {
  &_bar {
    font-weight: 300;
  }

  &_baz {
    font-weight: 300;
  }
}


================================================
FILE: test/files/parentSelector8.scss
================================================
@import "~styles/media-queries";

.foo {
  @include match-medium {
    &_bar {
      font-weight: 300;
    }
  };
}


================================================
FILE: test/files/root1.scss
================================================
:root {
  --color: red;
}

.foo {}


================================================
FILE: test/files/unparsable.scss
================================================
safslf f sf


================================================
FILE: test/lib/core/traversalUtils.test.js
================================================
/* eslint-env mocha */

import { expect } from 'chai';
import gonzales from 'gonzales-pe';

import { eliminateGlobals } from '../../../lib/core/traversalUtils';

describe('eliminateGlobals()', function () {
  describe('resolving :global pseudo class', function () {
    it('should remove :global operator and the global class', function () {
      const content = `
      :global .global {}
      `;

      const ast = gonzales.parse(content, { syntax: 'scss' });

      eliminateGlobals(ast);

      expect(ast.toString().trim()).to.be.equal('');
    });

    it('should remove :global operator and the global classes', function () {
      const content = `
      :global .global1 .global2 .global3.global4 {}
      `;

      const ast = gonzales.parse(content, { syntax: 'scss' });

      eliminateGlobals(ast);

      expect(ast.toString().trim()).to.be.equal('');
    });

    it('should only remove :global operator and the global classes', function () {
      const content = `
      .local1 :global .global1 :local(.local2) .global2 :local(.local3), .local4 {}
      `;

      const ast = gonzales.parse(content, { syntax: 'scss' });

      eliminateGlobals(ast);

      expect(ast.toString().trim()).to.be.equal(
        '.local1 :local(.local2) :local(.local3), .local4 {}'
      );
    });
  });

  describe('resolving :global() pseudo class', function () {
    it('should remove :global() pseudo class and its argument class', function () {
      const content = `
      :global(.global1) {}
      `;

      const ast = gonzales.parse(content, { syntax: 'scss' });

      eliminateGlobals(ast);

      expect(ast.toString().trim()).to.be.equal('');
    });

    it('should remove :global() pseudo class and its argument classes', function () {
      const content = `
      :global(.global1) :global(.global2, .global3), :global(.global4.global5) {}
      `;

      const ast = gonzales.parse(content, { syntax: 'scss' });

      eliminateGlobals(ast);

      expect(ast.toString().trim()).to.be.equal('');
    });

    it('should only remove :global() pseudo class and its argument classes', function () {
      const content = `
      .local1 :global(.global1) .local2, .local3 :global(.global2, .global3) :local(.local4) {}
      `;

      const ast = gonzales.parse(content, { syntax: 'scss' });

      eliminateGlobals(ast);

      expect(ast.toString().trim()).to.be.equal(
        '.local1 .local2, .local3 :local(.local4) {}'
      );
    });
  });
});


================================================
FILE: test/lib/rules/no-undef-class.test.js
================================================
/* eslint-disable mocha/no-setup-in-describe */
import rule from '../../../lib/rules/no-undef-class';
import { RuleTester, addFilenameOption } from '../../utils';

const ruleTester = new RuleTester();

/**
 * ESLint ruleTester uses its own `describe` and `it` functions. This Mocha
 * `describe` is used merely for test output formatting. Disabling the
 * `mocha/no-setup-in-describe` rule to allow running rule tester in it.
 */
describe('no-undef-class', function () {
  ruleTester.run('no-undef-class', rule, {
    valid: [
      {
        name: "absolute import eg: 'foo/bar.scss'",
        code: `
          import s from 'test/files/noUndefClass1.scss';

          export default Foo = () => (
            <div className={s.container}></div>
          );
        `,
      },
      {
        name: 'dot notation eg: s.container',
        code: `
          import s from './noUndefClass1.scss';

          export default Foo = () => (
            <div className={s.container}></div>
          );
        `,
      },
      {
        name: "square bracket string key eg: s['container']",
        code: `
          import s from './noUndefClass1.scss';

          export default Foo = () => (
            <div className={s['container']}></div>
          );
        `,
      },
      {
        name: 'does not check for dynamic properties eg: s[dynamicValue]',
        code: `
          import s from './noUndefClass1.scss';

          export default Foo = (props) => (
            <div className={s[props.primary]}></div>
          );
        `,
      },
      {
        name: 'names starting with _ will be ignored',
        code: `
          import s from './noUndefClass1.scss';

          export default Foo = () => (
            <div>
              {s._getCss()}
            </div>
          );
        `,
      },
      {
        name: 'using composes',
        code: `
          import s from './composes1.scss';

          export default Foo = () => (
            <div className={s.bar}>
              <div className={s.baz}></div>
            </div>
          );
        `,
      },
      {
        name: 'composing with multiple classes',
        code: `
          import s from './composesMultiple1.scss';

          export default Foo = () => (
            <div className={s.bar}>
              <div className={s.baz}></div>
            </div>
          );
        `,
      },
      {
        name: 'using @extend',
        code: `
          import s from './extend1.scss';

          export default Foo = () => (
            <div className={s.bar}>
              <div className={s.baz}></div>
            </div>
          );
        `,
      },
      {
        name: 'using parent selector (`&`)',
        code: `
          import s from './parentSelector1.scss';

          export default Foo = () => (
            <div className={s.foo}>
              <div className={s.foo_bar}></div>
            </div>
          );
        `,
      },
      {
        name: 'Add support for parent selectors (&).',
        code: `
          import s from './parentSelector2.scss';

          export default Foo = () => (
            <div className={s.foo}>
              <div className={s.bar}></div>
              <div className={s.bar_baz}></div>
            </div>
          );
        `,
      },
      {
        name: 'Add support for parent selectors (&).',
        code: `
          import s from './parentSelector3.scss';

          export default Foo = () => (
            <div className={s.foo}>
              <div className={s.foo_bar}></div>
              <div className={s.foo_baz}></div>
            </div>
          );
        `,
      },
      {
        name: 'Add support for parent selectors (&).',
        code: `
          import s from './parentSelector4.scss';

          export default Foo = () => (
            <div className={s.foo}>
              <div className={s.foo_bar}></div>
              <div className={s.foo_baz}></div>
            </div>
          );
        `,
      },
      {
        name: 'Add support for parent selectors (&).',
        code: `
          import s from './parentSelector5.scss';

          export default Foo = () => (
            <div className={s.foo}>
              <div className={s.foo_baz}></div>
              <div className={s.bar_baz}></div>
            </div>
          );
        `,
      },
      {
        name: 'Add support for parent selectors (&).',
        code: `
          import s from './parentSelector6.scss';

          export default Foo = () => (
            <div className={s.foo}>
              <div className={s.foo_bar}></div>
              <div className={s.foo_bar_baz}></div>
            </div>
          );
        `,
      },
      {
        name: 'Support parent selectors in include blocks (aka mixins).',
        code: `
          import s from './parentSelector8.scss';

          export default Foo = () => (
            <div className={s.foo}>
              <div className={s.foo_bar}></div>
            </div>
          );
        `,
      },
      {
        name: "file that can't be parsed should not give any error",
        code: `
          import s from './unparsable.scss';

          export default Foo = () => (
            <div className={s.bar}>
              <div className={s.baz}></div>
            </div>
          );
        `,
      },
      {
        name: 'global is ignored',
        code: `
          import s from './global1.scss';

          export default Foo = () => (
            <div className={s.local1, s.local2, s.local3, s.local4, s.local5, s.local6}>
            </div>
          );
        `,
      },
      {
        name: 'ICSS :export pseudo-selector with a correct prop name should not give error',
        code: `
          import s from './export1.scss';

          export default Foo = () => (
            <div className={s.bar}>
              <div className={s.myProp}>
              </div>
            </div>
          );
        `,
      },
      {
        name: 'check if camelCase=true classes work as expected',
        code: `
          import s from './noUndefClass3.scss';

          export default Foo = () => (
            <div className={s.fooBar}>
              <div className={s.barFoo}></div>
              <div className={s.alreadyCamelCased}></div>
              <div className={s.snakeCased}></div>
            </div>
          );
        `,
        options: [{ camelCase: true }],
      },
      {
        name: 'Add support for all variants of the camelCase options.',
        code: `
          import s from './noUndefClass3.scss';

          export default Foo = () => (
            <div className={s['foo-bar']}>
              <div className={s['bar-foo']}></div>
              <div className={s.alreadyCamelCased}></div>
              <div className={s.snake_cased}></div>
            </div>
          );
        `,
        options: [{ camelCase: true }],
      },
      {
        name: 'check if camelCase=dashes classes work as expected',
        code: `
          import s from './noUndefClass3.scss';

          export default Foo = () => (
            <div className={s.fooBar}>
              <div className={s.barFoo}></div>
              <div className={s.alreadyCamelCased}></div>
              <div className={s.snake_cased}></div>
            </div>
          );
        `,
        options: [{ camelCase: 'dashes' }],
      },
      {
        name: 'Add camelCase option',
        code: `
          import s from './noUndefClass3.scss';

          export default Foo = () => (
            <div className={s['foo-bar']}>
              <div className={s['bar-foo']}></div>
              <div className={s.alreadyCamelCased}></div>
              <div className={s.snake_cased}></div>
            </div>
          );
        `,
        options: [{ camelCase: 'dashes' }],
      },
      {
        name: 'check if camelCase=only classes work as expected',
        code: `
          import s from './noUndefClass3.scss';

          export default Foo = () => (
            <div className={s.fooBar}>
              <div className={s.barFoo}></div>
              <div className={s.alreadyCamelCased}></div>
              <div className={s.snakeCased}></div>
            </div>
          );
        `,
        options: [{ camelCase: 'only' }],
      },
      {
        name: 'check if camelCase=dashes-only classes work as expected',
        code: `
          import s from './noUndefClass3.scss';

          export default Foo = () => (
            <div className={s.fooBar}>
              <div className={s.barFoo}></div>
              <div className={s.alreadyCamelCased}></div>
              <div className={s.snake_cased}></div>
            </div>
          );
        `,
        options: [{ camelCase: 'dashes-only' }],
      },
    ].map((testCase) => addFilenameOption(testCase)),
    invalid: [
      {
        name: 'dot notation',
        code: `
          import s from './noUndefClass1.scss';

          export default Foo = () => (
            <div className={s.containr}></div>
          );
        `,
        errors: ["Class or exported property 'containr'
Download .txt
gitextract_5yr9mmz_/

├── .babelrc
├── .eslintrc
├── .flowconfig
├── .gitignore
├── .travis.yml
├── README.md
├── example/
│   ├── .eslintrc
│   ├── foo.scss
│   ├── index.js
│   └── tester.js
├── flow-typed/
│   └── npm/
│       ├── babel-cli_vx.x.x.js
│       ├── babel-eslint_vx.x.x.js
│       ├── babel-plugin-syntax-flow_vx.x.x.js
│       ├── babel-plugin-transform-flow-strip-types_vx.x.x.js
│       ├── babel-preset-es2015_vx.x.x.js
│       ├── babel-preset-stage-1_vx.x.x.js
│       ├── babel-watch_vx.x.x.js
│       ├── eslint-config-standard_vx.x.x.js
│       ├── eslint-plugin-flowtype_vx.x.x.js
│       ├── eslint-plugin-import_vx.x.x.js
│       ├── eslint-plugin-promise_vx.x.x.js
│       ├── eslint-plugin-standard_vx.x.x.js
│       ├── eslint_vx.x.x.js
│       ├── flow-bin_v0.x.x.js
│       ├── gonzales-pe_vx.x.x.js
│       ├── lodash_v4.x.x.js
│       ├── mocha_v3.1.x.js
│       └── nodemon_vx.x.x.js
├── lib/
│   ├── core/
│   │   ├── index.js
│   │   └── traversalUtils.js
│   ├── index.js
│   ├── rules/
│   │   ├── index.js
│   │   ├── no-undef-class.js
│   │   └── no-unused-class.js
│   └── types/
│       └── index.js
├── package.json
└── test/
    ├── files/
    │   ├── composes1.scss
    │   ├── composesMultiple1.scss
    │   ├── export1.scss
    │   ├── export2.scss
    │   ├── extend1.scss
    │   ├── foo.js
    │   ├── global1.scss
    │   ├── noUndefClass1.less
    │   ├── noUndefClass1.scss
    │   ├── noUndefClass3.scss
    │   ├── noUnusedClass1.less
    │   ├── noUnusedClass1.scss
    │   ├── noUnusedClass2.scss
    │   ├── noUnusedClass3.scss
    │   ├── parentSelector1.scss
    │   ├── parentSelector2.scss
    │   ├── parentSelector3.scss
    │   ├── parentSelector4.scss
    │   ├── parentSelector5.scss
    │   ├── parentSelector6.scss
    │   ├── parentSelector7.scss
    │   ├── parentSelector8.scss
    │   ├── root1.scss
    │   └── unparsable.scss
    ├── lib/
    │   ├── core/
    │   │   └── traversalUtils.test.js
    │   └── rules/
    │       ├── no-undef-class.test.js
    │       └── no-unused-class.test.js
    └── utils.js
Download .txt
SYMBOL INDEX (4 symbols across 4 files)

FILE: lib/core/index.js
  function dashesCamelCase (line 22) | function dashesCamelCase (str: string) {

FILE: lib/rules/no-undef-class.js
  method create (line 32) | create (context: Object) {

FILE: lib/rules/no-unused-class.js
  method create (line 34) | create (context: Object) {

FILE: test/utils.js
  function addFilenameOption (line 6) | function addFilenameOption (testCase) {
Condensed preview — 64 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (222K chars).
[
  {
    "path": ".babelrc",
    "chars": 208,
    "preview": "{\n  \"presets\": [\"@babel/preset-env\"],\n  \"plugins\": [\n    \"@babel/plugin-syntax-flow\",\n    \"@babel/transform-flow-strip-t"
  },
  {
    "path": ".eslintrc",
    "chars": 301,
    "preview": "{\n  \"parser\": \"@babel/eslint-parser\",\n  \"extends\": [\n    \"standard\",\n    \"plugin:import/errors\",\n    \"plugin:import/warn"
  },
  {
    "path": ".flowconfig",
    "chars": 51,
    "preview": "[ignore]\nbuild/\n\n[include]\nlib/\n\n[version]\n^0.36.0\n"
  },
  {
    "path": ".gitignore",
    "chars": 44,
    "preview": "node_modules\n.DS_Store\n\nbuild\nnpm-debug.log\n"
  },
  {
    "path": ".travis.yml",
    "chars": 39,
    "preview": "language: node_js\nnode_js:\n  - 4\n  - 6\n"
  },
  {
    "path": "README.md",
    "chars": 3009,
    "preview": "# eslint-plugin-css-modules\n\n[![Build Status](https://travis-ci.org/atfzl/eslint-plugin-css-modules.svg?branch=master)]("
  },
  {
    "path": "example/.eslintrc",
    "chars": 98,
    "preview": "{\n  \"plugins\": [\n    \"css-modules\"\n  ],\n  \"extends\": [\n    \"plugin:css-modules/recommended\"\n  ]\n}\n"
  },
  {
    "path": "example/foo.scss",
    "chars": 218,
    "preview": "/* .head is global, will not be used in js */\n:global(.head) {\n  color: green;\n}\n\n.container {\n  width: 116px;\n\n  i {\n  "
  },
  {
    "path": "example/index.js",
    "chars": 410,
    "preview": "/* eslint css-modules/no-unused-class: [2, { markAsUsed: ['container'] }] */\n\nimport s from './foo.scss';\n\nconst compone"
  },
  {
    "path": "example/tester.js",
    "chars": 517,
    "preview": "/*\n   ignore this file. This just for checking logs\n */\n\nimport { RuleTester } from 'eslint';\n\nimport rule from '../lib/"
  },
  {
    "path": "flow-typed/npm/babel-cli_vx.x.x.js",
    "chars": 3008,
    "preview": "// flow-typed signature: 670228b673fbf5d953585356d4345691\n// flow-typed version: <<STUB>>/babel-cli_v^6.18.0/flow_v0.36."
  },
  {
    "path": "flow-typed/npm/babel-eslint_vx.x.x.js",
    "chars": 2307,
    "preview": "// flow-typed signature: c629444c86e11ef6fd2f3f7bc4c49632\n// flow-typed version: <<STUB>>/babel-eslint_v^7.1.0/flow_v0.3"
  },
  {
    "path": "flow-typed/npm/babel-plugin-syntax-flow_vx.x.x.js",
    "chars": 932,
    "preview": "// flow-typed signature: 5d7c2096f6bc30ca468313001f450834\n// flow-typed version: <<STUB>>/babel-plugin-syntax-flow_v^6.1"
  },
  {
    "path": "flow-typed/npm/babel-plugin-transform-flow-strip-types_vx.x.x.js",
    "chars": 1022,
    "preview": "// flow-typed signature: 855ea31ab2c7db08a247b6cee0c102cd\n// flow-typed version: <<STUB>>/babel-plugin-transform-flow-st"
  },
  {
    "path": "flow-typed/npm/babel-preset-es2015_vx.x.x.js",
    "chars": 902,
    "preview": "// flow-typed signature: bf7573d40f6e30c6231567a9e265e245\n// flow-typed version: <<STUB>>/babel-preset-es2015_v^6.18.0/f"
  },
  {
    "path": "flow-typed/npm/babel-preset-stage-1_vx.x.x.js",
    "chars": 908,
    "preview": "// flow-typed signature: 1e58255aa40e674d103a1075688c9846\n// flow-typed version: <<STUB>>/babel-preset-stage-1_v^6.16.0/"
  },
  {
    "path": "flow-typed/npm/babel-watch_vx.x.x.js",
    "chars": 1032,
    "preview": "// flow-typed signature: 1a65215b23bad8b23f7a002ddcac8dd9\n// flow-typed version: <<STUB>>/babel-watch_v^2.0.6/flow_v0.36"
  },
  {
    "path": "flow-typed/npm/eslint-config-standard_vx.x.x.js",
    "chars": 1397,
    "preview": "// flow-typed signature: ca8fe33f0bf67720fe5e0b904410b0ae\n// flow-typed version: <<STUB>>/eslint-config-standard_v^6.2.1"
  },
  {
    "path": "flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js",
    "chars": 12495,
    "preview": "// flow-typed signature: 4cafa5d0a40ca126758232e98e85e341\n// flow-typed version: <<STUB>>/eslint-plugin-flowtype_v^2.25."
  },
  {
    "path": "flow-typed/npm/eslint-plugin-import_vx.x.x.js",
    "chars": 11347,
    "preview": "// flow-typed signature: ed95a0dbf4ede73fb2995e80197fc3e2\n// flow-typed version: <<STUB>>/eslint-plugin-import_v^2.0.1/f"
  },
  {
    "path": "flow-typed/npm/eslint-plugin-promise_vx.x.x.js",
    "chars": 5236,
    "preview": "// flow-typed signature: 5fd6942ecac535ed44e1bdbc2d708b19\n// flow-typed version: <<STUB>>/eslint-plugin-promise_v^3.3.0/"
  },
  {
    "path": "flow-typed/npm/eslint-plugin-standard_vx.x.x.js",
    "chars": 2653,
    "preview": "// flow-typed signature: 6327ffe504a28c2a1c05f1c46aa1ec71\n// flow-typed version: <<STUB>>/eslint-plugin-standard_v^2.0.1"
  },
  {
    "path": "flow-typed/npm/eslint_vx.x.x.js",
    "chars": 69272,
    "preview": "// flow-typed signature: 5f87357a0ad855387da13a010a5c9c1e\n// flow-typed version: <<STUB>>/eslint_v^3.8.1/flow_v0.36.0\n\n/"
  },
  {
    "path": "flow-typed/npm/flow-bin_v0.x.x.js",
    "chars": 188,
    "preview": "// flow-typed signature: 6a5610678d4b01e13bbfbbc62bdaf583\n// flow-typed version: 3817bc6980/flow-bin_v0.x.x/flow_>=v0.25"
  },
  {
    "path": "flow-typed/npm/gonzales-pe_vx.x.x.js",
    "chars": 1250,
    "preview": "// flow-typed signature: 750b2d64f194658ee7d5900e8c71c6dd\n// flow-typed version: <<STUB>>/gonzales-pe_v^4.0.3/flow_v0.36"
  },
  {
    "path": "flow-typed/npm/lodash_v4.x.x.js",
    "chars": 29791,
    "preview": "// flow-typed signature: f0ca92a5557e6def26ab8132bc2ae10f\n// flow-typed version: 12af8270f6/lodash_v4.x.x/flow_>=v0.28.x"
  },
  {
    "path": "flow-typed/npm/mocha_v3.1.x.js",
    "chars": 862,
    "preview": "// flow-typed signature: 6b82cf8c1da27b4f0fa7a58e5ed5babf\n// flow-typed version: edf70dde46/mocha_v3.1.x/flow_>=v0.22.x\n"
  },
  {
    "path": "flow-typed/npm/nodemon_vx.x.x.js",
    "chars": 5658,
    "preview": "// flow-typed signature: ecc82da093280a7b0eef229e40c481bc\n// flow-typed version: <<STUB>>/nodemon_v^1.11.0/flow_v0.36.0\n"
  },
  {
    "path": "lib/core/index.js",
    "chars": 4518,
    "preview": "// @flow\n\nimport fs from 'fs';\nimport path from 'path';\nimport fp from 'lodash/fp';\nimport _ from 'lodash';\nimport gonza"
  },
  {
    "path": "lib/core/traversalUtils.js",
    "chars": 7737,
    "preview": "// @flow\n/* eslint-disable no-param-reassign */\nimport fp from 'lodash/fp';\n\nimport type { gASTNode } from '../types';\n\n"
  },
  {
    "path": "lib/index.js",
    "chars": 195,
    "preview": "export rules from './rules';\n\nexport const configs = {\n  recommended: {\n    rules: {\n      'css-modules/no-unused-class'"
  },
  {
    "path": "lib/rules/index.js",
    "chars": 183,
    "preview": "import noUnusedClass from './no-unused-class';\nimport noUndefClass from './no-undef-class';\n\nexport default {\n  'no-unus"
  },
  {
    "path": "lib/rules/no-undef-class.js",
    "chars": 2988,
    "preview": "/* @flow */\nimport _ from 'lodash';\n\nimport {\n  getStyleImportNodeData,\n  getAST,\n  fileExists,\n  getStyleClasses,\n  get"
  },
  {
    "path": "lib/rules/no-unused-class.js",
    "chars": 4257,
    "preview": "/* @flow */\nimport fp from 'lodash/fp';\nimport _ from 'lodash';\nimport path from 'path';\n\nimport {\n  getStyleImportNodeD"
  },
  {
    "path": "lib/types/index.js",
    "chars": 932,
    "preview": "// js Node\nexport type Position = {\n  line: number, // 1 indexed\n  column: number, // 0 indexed\n};\n\nexport type SourceLo"
  },
  {
    "path": "package.json",
    "chars": 1748,
    "preview": "{\n  \"name\": \"eslint-plugin-css-modules\",\n  \"version\": \"2.12.0\",\n  \"description\": \"Checks that you are using the existent"
  },
  {
    "path": "test/files/composes1.scss",
    "chars": 133,
    "preview": ".foo {\n  font-weight: 300;\n}\n\n.bar {\n  color: red;\n  composes: foo;\n}\n\n.baz {\n  composes: other from './otherfile';\n  co"
  },
  {
    "path": "test/files/composesMultiple1.scss",
    "chars": 163,
    "preview": ".foo {\n  font-weight: 300;\n}\n\n.tar {\n  color: black;\n}\n\n.bar {\n  color: red;\n  composes: foo tar;\n}\n\n.baz {\n  composes: "
  },
  {
    "path": "test/files/export1.scss",
    "chars": 58,
    "preview": ".bar {\n  color: blue;\n}\n\n:export {\n  myProp: something;\n}\n"
  },
  {
    "path": "test/files/export2.scss",
    "chars": 61,
    "preview": ".bar {\n  color: blue;\n}\n\n:export {\n  otherProp: something;\n}\n"
  },
  {
    "path": "test/files/extend1.scss",
    "chars": 95,
    "preview": ".foo {\n  font-weight: 300;\n}\n\n.bar {\n  @extend .foo;\n  color: red;\n}\n\n.baz {\n  width: 100px;\n}\n"
  },
  {
    "path": "test/files/foo.js",
    "chars": 135,
    "preview": "/*\n   nothing to see here\n   this file will be provided as filename parameter for RuleTester.\n   This file is referred i"
  },
  {
    "path": "test/files/global1.scss",
    "chars": 251,
    "preview": ".local1 {}\n\n.local2 {\n  :global(.global1) {}\n}\n\n:global .global1 {}\n\n:global(.global2) {}\n\n:global {\n  .global1 {\n\n  }\n}"
  },
  {
    "path": "test/files/noUndefClass1.less",
    "chars": 40,
    "preview": ":global(.bold) {\n  font-weight: bold;\n}\n"
  },
  {
    "path": "test/files/noUndefClass1.scss",
    "chars": 36,
    "preview": ".container {\n  min-width: 1024px;\n}\n"
  },
  {
    "path": "test/files/noUndefClass3.scss",
    "chars": 181,
    "preview": ".foo-bar {\n  display: flex;\n}\n\n.bar-foo {\n  display: flex;\n}\n\n.alreadyCamelCased {\n    display: flex;\n}\n\n.snake_cased {\n"
  },
  {
    "path": "test/files/noUnusedClass1.less",
    "chars": 66,
    "preview": ".foo {\n  display: flex;\n}\n\n:global(.bar) {\n  font-weight: bold;\n}\n"
  },
  {
    "path": "test/files/noUnusedClass1.scss",
    "chars": 89,
    "preview": ".foo {\n  width: 100px;\n}\n\n.bar {\n  height: 100%;\n\n  .bold {\n    font-weight: bold;\n  }\n}\n"
  },
  {
    "path": "test/files/noUnusedClass2.scss",
    "chars": 66,
    "preview": ".foo {\n  display: flex;\n}\n\n:global(.bar) {\n  font-weight: bold;\n}\n"
  },
  {
    "path": "test/files/noUnusedClass3.scss",
    "chars": 181,
    "preview": ".foo-bar {\n  display: flex;\n}\n\n.bar-foo {\n  display: flex;\n}\n\n.alreadyCamelCased {\n    display: flex;\n}\n\n.snake_cased {\n"
  },
  {
    "path": "test/files/parentSelector1.scss",
    "chars": 62,
    "preview": ".foo {\n  font-weight: 300;\n\n  &_bar {\n    width: 100px;\n  }\n}\n"
  },
  {
    "path": "test/files/parentSelector2.scss",
    "chars": 81,
    "preview": ".foo {\n  font-weight: 300;\n\n  .bar {\n    &_baz {\n      width: 100px;\n    }\n  }\n}\n"
  },
  {
    "path": "test/files/parentSelector3.scss",
    "chars": 95,
    "preview": ".foo {\n  font-weight: 300;\n\n  &_baz {\n    width: 100px;\n  }\n\n  &_bar {\n    width: 100px;\n  }\n}\n"
  },
  {
    "path": "test/files/parentSelector4.scss",
    "chars": 69,
    "preview": ".foo {\n  font-weight: 300;\n\n  &_baz, &_bar {\n    width: 100px;\n  }\n}\n"
  },
  {
    "path": "test/files/parentSelector5.scss",
    "chars": 72,
    "preview": ".foo, .bar {\n  font-weight: 300;\n\n  &_baz {\n    font-weight: 300;\n  }\n}\n"
  },
  {
    "path": "test/files/parentSelector6.scss",
    "chars": 109,
    "preview": ".foo {\n  font-weight: 300;\n\n  &_bar {\n    font-weight: 300;\n\n    &_baz {\n      font-weight: 300;\n    }\n  }\n}\n"
  },
  {
    "path": "test/files/parentSelector7.scss",
    "chars": 82,
    "preview": ".foo {\n  &_bar {\n    font-weight: 300;\n  }\n\n  &_baz {\n    font-weight: 300;\n  }\n}\n"
  },
  {
    "path": "test/files/parentSelector8.scss",
    "chars": 116,
    "preview": "@import \"~styles/media-queries\";\n\n.foo {\n  @include match-medium {\n    &_bar {\n      font-weight: 300;\n    }\n  };\n}\n"
  },
  {
    "path": "test/files/root1.scss",
    "chars": 35,
    "preview": ":root {\n  --color: red;\n}\n\n.foo {}\n"
  },
  {
    "path": "test/files/unparsable.scss",
    "chars": 12,
    "preview": "safslf f sf\n"
  },
  {
    "path": "test/lib/core/traversalUtils.test.js",
    "chars": 2472,
    "preview": "/* eslint-env mocha */\n\nimport { expect } from 'chai';\nimport gonzales from 'gonzales-pe';\n\nimport { eliminateGlobals } "
  },
  {
    "path": "test/lib/rules/no-undef-class.test.js",
    "chars": 17008,
    "preview": "/* eslint-disable mocha/no-setup-in-describe */\nimport rule from '../../../lib/rules/no-undef-class';\nimport { RuleTeste"
  },
  {
    "path": "test/lib/rules/no-unused-class.test.js",
    "chars": 10652,
    "preview": "/* eslint-disable mocha/no-setup-in-describe */\nimport rule from '../../../lib/rules/no-unused-class';\nimport { RuleTest"
  },
  {
    "path": "test/utils.js",
    "chars": 892,
    "preview": "import path from 'path';\nimport { RuleTester as EslintRuleTester } from 'eslint';\nimport { test } from 'mocha';\n\n/* patt"
  }
]

About this extraction

This page contains the full source code of the atfzl/eslint-plugin-css-modules GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 64 files (206.1 KB), approximately 55.4k tokens, and a symbol index with 4 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!