Initial portage to TypeScript.
authorJérôme Benoit <jerome.benoit@sap.com>
Sun, 1 Nov 2020 18:26:04 +0000 (19:26 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Sun, 1 Nov 2020 18:26:04 +0000 (19:26 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
32 files changed:
.eslintrc
flow-typed/npm/babel-eslint_vx.x.x.js [deleted file]
flow-typed/npm/clinic_vx.x.x.js [deleted file]
flow-typed/npm/eslint-config-google_vx.x.x.js [deleted file]
flow-typed/npm/eslint-config-node_vx.x.x.js [deleted file]
flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js [deleted file]
flow-typed/npm/eslint_vx.x.x.js [deleted file]
flow-typed/npm/flow-bin_v0.x.x.js [deleted file]
flow-typed/npm/flow-typed_vx.x.x.js [deleted file]
flow-typed/npm/npm-check_vx.x.x.js [deleted file]
flow-typed/npm/uuid_v8.x.x.js [deleted file]
flow-typed/npm/winston_v3.x.x.js [deleted file]
flow-typed/npm/worker-threads-pool_vx.x.x.js [deleted file]
flow-typed/npm/ws_v7.x.x.js [deleted file]
package-lock.json
package.json
src/assets/station-templates/abb-atg.station-template.json [new file with mode: 0644]
src/charging-station/AutomaticTransactionGenerator.js [deleted file]
src/charging-station/AutomaticTransactionGenerator.ts [new file with mode: 0644]
src/charging-station/ChargingStation.ts [moved from src/charging-station/ChargingStation.js with 81% similarity]
src/charging-station/OcppError.ts [moved from src/charging-station/OcppError.js with 66% similarity]
src/charging-station/StationWorker.ts [moved from src/charging-station/StationWorker.js with 53% similarity]
src/charging-station/Worker.ts [moved from src/charging-station/Worker.js with 67% similarity]
src/start.ts [moved from src/start.js with 79% similarity]
src/types/MeasurandValues.ts [new file with mode: 0644]
src/utils/Configuration.ts [moved from src/utils/Configuration.js with 98% similarity]
src/utils/Constants.ts [moved from src/utils/Constants.js with 93% similarity]
src/utils/ElectricUtils.ts [moved from src/utils/ElectricUtils.js with 67% similarity]
src/utils/Logger.ts [moved from src/utils/Logger.js with 77% similarity]
src/utils/Statistics.ts [moved from src/utils/Statistics.js with 86% similarity]
src/utils/Utils.ts [moved from src/utils/Utils.js with 71% similarity]
tsconfig.json [new file with mode: 0644]

index e34e03a96d318d80b28435c21b53dfccce0ea7d3..f44ad63d64f4b97fb1c47dd26ac273bd3a60c1ed 100644 (file)
--- a/.eslintrc
+++ b/.eslintrc
 {
-  "parser": "babel-eslint",
+  "root": true,
+  "parser": "@typescript-eslint/parser",
+  "parserOptions": {
+    "project": "./tsconfig.json"
+  },
   "extends": [
     "eslint:recommended",
-    "plugin:flowtype/recommended",
-    "node",
-    "google"
+    "plugin:@typescript-eslint/recommended",
+    "plugin:@typescript-eslint/recommended-requiring-type-checking"
   ],
   "plugins": [
-    "flowtype"
+    "@typescript-eslint"
   ],
   "rules": {
-    "require-jsdoc": 0,
-    "import/no-commonjs": [
+    "indent": "off",
+    "@typescript-eslint/indent": [
+      "error",
       2,
       {
-        "allowRequire": true,
-        "allowPrimitiveModules": true
+        "SwitchCase": 1
       }
     ],
-    "import/no-nodejs-modules": 0,
-    "flowtype/no-types-missing-file-annotation": 0,
+    "@typescript-eslint/array-type": "off",
+    "semi": "off",
+    "@typescript-eslint/semi": [
+      "error",
+      "always"
+    ],
+    "space-before-blocks": [
+      "error",
+      "always"
+    ],
+    "@typescript-eslint/no-empty-function": [
+      "warn",
+      {
+        "allow": [
+          "arrowFunctions",
+          "methods"
+        ]
+      }
+    ],
+    "@typescript-eslint/member-ordering": "error",
+    "@typescript-eslint/await-thenable": "error",
+    "@typescript-eslint/no-floating-promises": "error",
+    "@typescript-eslint/promise-function-async": "error",
+    "@typescript-eslint/no-misused-promises": "error",
+    "curly": "error",
+    "brace-style": "error",
+    "eqeqeq": [
+      "error",
+      "always"
+    ],
+    "no-else-return": "error",
+    "no-eq-null": "error",
+    "no-undefined": "error",
+    "no-extra-bind": "error",
+    "no-lone-blocks": "error",
+    "no-multi-spaces": "error",
+    "no-empty": "error",
+    "no-return-assign": [
+      "error",
+      "always"
+    ],
+    "no-useless-catch": "error",
+    "no-useless-return": "error",
+    "no-shadow": "error",
+    "no-multiple-empty-lines": [
+      "error",
+      {
+        "max": 2,
+        "maxEOF": 1
+      }
+    ],
+    "block-spacing": "error",
+    "capitalized-comments": [
+      "error",
+      "always",
+      {
+        "ignoreConsecutiveComments": true,
+        "ignorePattern": "pragma|ignored"
+      }
+    ],
+    "eol-last": [
+      "error",
+      "always"
+    ],
+    "consistent-this": [
+      "error",
+      "self"
+    ],
+    "func-call-spacing": [
+      "error",
+      "never"
+    ],
+    "keyword-spacing": [
+      "error"
+    ],
+    "linebreak-style": [
+      "error",
+      "unix"
+    ],
     "max-len": [
       "warn",
       {
         "ignoreRegExpLiterals": true,
         "ignorePattern": "(^(import|export)|(public|private))\\s.+;"
       }
+    ],
+    "no-lonely-if": "error",
+    "no-trailing-spaces": "error",
+    "no-whitespace-before-property": "error",
+    "space-before-function-paren": [
+      "error",
+      {
+        "anonymous": "never",
+        "named": "never",
+        "asyncArrow": "always"
+      }
+    ],
+    "space-in-parens": [
+      "error",
+      "never"
+    ],
+    "space-infix-ops": "error",
+    "space-unary-ops": "error",
+    "spaced-comment": [
+      "error",
+      "always"
+    ],
+    "switch-colon-spacing": "error",
+    "arrow-body-style": [
+      "error",
+      "as-needed"
+    ],
+    "arrow-parens": [
+      "error",
+      "always"
+    ],
+    "arrow-spacing": "error",
+    "no-duplicate-imports": "error",
+    "no-var": "error",
+    "prefer-const": "error",
+    "sort-imports": [
+      "warn",
+      {
+        "ignoreCase": false,
+        "ignoreDeclarationSort": false,
+        "ignoreMemberSort": false,
+        "memberSyntaxSortOrder": [
+          "none",
+          "all",
+          "multiple",
+          "single"
+        ]
+      }
+    ],
+    "object-curly-spacing": [
+      "error",
+      "always"
+    ],
+    "lines-between-class-members": [
+      "error",
+      "always",
+      {
+        "exceptAfterSingleLine": true
+      }
+    ],
+    "quotes": [
+      "error",
+      "single"
     ]
   }
 }
diff --git a/flow-typed/npm/babel-eslint_vx.x.x.js b/flow-typed/npm/babel-eslint_vx.x.x.js
deleted file mode 100644 (file)
index 05f5265..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-// flow-typed signature: 6334367253781eafb63df8d92be47d8d
-// flow-typed version: <<STUB>>/babel-eslint_v^10.1.0/flow_v0.136.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/lib/analyze-scope' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/babylon-to-espree/attachComments' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/babylon-to-espree/convertComments' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/babylon-to-espree/convertTemplateType' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/babylon-to-espree' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/babylon-to-espree/toAST' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/babylon-to-espree/toToken' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/babylon-to-espree/toTokens' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/parse-with-scope' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/parse' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/require-from-eslint' {
-  declare module.exports: any;
-}
-
-declare module 'babel-eslint/lib/visitor-keys' {
-  declare module.exports: any;
-}
-
-// Filename aliases
-declare module 'babel-eslint/lib/analyze-scope.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/analyze-scope'>;
-}
-declare module 'babel-eslint/lib/babylon-to-espree/attachComments.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/attachComments'>;
-}
-declare module 'babel-eslint/lib/babylon-to-espree/convertComments.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/convertComments'>;
-}
-declare module 'babel-eslint/lib/babylon-to-espree/convertTemplateType.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/convertTemplateType'>;
-}
-declare module 'babel-eslint/lib/babylon-to-espree/index' {
-  declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree'>;
-}
-declare module 'babel-eslint/lib/babylon-to-espree/index.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree'>;
-}
-declare module 'babel-eslint/lib/babylon-to-espree/toAST.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/toAST'>;
-}
-declare module 'babel-eslint/lib/babylon-to-espree/toToken.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/toToken'>;
-}
-declare module 'babel-eslint/lib/babylon-to-espree/toTokens.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/toTokens'>;
-}
-declare module 'babel-eslint/lib/index' {
-  declare module.exports: $Exports<'babel-eslint/lib'>;
-}
-declare module 'babel-eslint/lib/index.js' {
-  declare module.exports: $Exports<'babel-eslint/lib'>;
-}
-declare module 'babel-eslint/lib/parse-with-scope.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/parse-with-scope'>;
-}
-declare module 'babel-eslint/lib/parse.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/parse'>;
-}
-declare module 'babel-eslint/lib/require-from-eslint.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/require-from-eslint'>;
-}
-declare module 'babel-eslint/lib/visitor-keys.js' {
-  declare module.exports: $Exports<'babel-eslint/lib/visitor-keys'>;
-}
diff --git a/flow-typed/npm/clinic_vx.x.x.js b/flow-typed/npm/clinic_vx.x.x.js
deleted file mode 100644 (file)
index 7d649e0..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-// flow-typed signature: 7ce143f62e46f69c1f0d226420c51772
-// flow-typed version: <<STUB>>/clinic_v^7.0.0/flow_v0.136.0
-
-/**
- * This is an autogenerated libdef stub for:
- *
- *   'clinic'
- *
- * 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 'clinic' {
-  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 'clinic/bin' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/lib/authenticate' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/lib/clean' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/lib/get-ask-message' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/lib/help-formatter' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/lib/tar-and-upload' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test-local/cli-doctor-collect-only.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test-local/cli-flame-collect-only.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test-local/cli-flame-full.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test-local/cli-flame-passthrough-flags' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test-local/cli-flame-visualize-only.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/authenticate.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-ask-full.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-ask-help.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-ask-no-args.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-autocannon.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-bubbleprof-collect-only.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-bubbleprof-full.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-bubbleprof-help.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-bubbleprof-no-args.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-bubbleprof-non-node.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-bubbleprof-version.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-bubbleprof-visualize-only.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-clean-full.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-clean-help.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-clinic-help.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-clinic-no-args.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-clinic-version.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-doctor-collect-only.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-doctor-full.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-doctor-help.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-doctor-no-args.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-doctor-non-node.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-doctor-version.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-doctor-visualize-only.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-flame-full.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-flame-help.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-flame-no-args.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-flame-non-node.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-flame-upload.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-flame-version.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-flame-visualize-only.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-login-logout.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-upload-files.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-upload-help.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli-upload-no-args.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/cli' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/fake-upload-server' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/help-formatter.test' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/server' {
-  declare module.exports: any;
-}
-
-declare module 'clinic/test/tar-and-upload.test' {
-  declare module.exports: any;
-}
-
-// Filename aliases
-declare module 'clinic/bin.js' {
-  declare module.exports: $Exports<'clinic/bin'>;
-}
-declare module 'clinic/lib/authenticate.js' {
-  declare module.exports: $Exports<'clinic/lib/authenticate'>;
-}
-declare module 'clinic/lib/clean.js' {
-  declare module.exports: $Exports<'clinic/lib/clean'>;
-}
-declare module 'clinic/lib/get-ask-message.js' {
-  declare module.exports: $Exports<'clinic/lib/get-ask-message'>;
-}
-declare module 'clinic/lib/help-formatter.js' {
-  declare module.exports: $Exports<'clinic/lib/help-formatter'>;
-}
-declare module 'clinic/lib/tar-and-upload.js' {
-  declare module.exports: $Exports<'clinic/lib/tar-and-upload'>;
-}
-declare module 'clinic/test-local/cli-doctor-collect-only.test.js' {
-  declare module.exports: $Exports<'clinic/test-local/cli-doctor-collect-only.test'>;
-}
-declare module 'clinic/test-local/cli-flame-collect-only.test.js' {
-  declare module.exports: $Exports<'clinic/test-local/cli-flame-collect-only.test'>;
-}
-declare module 'clinic/test-local/cli-flame-full.test.js' {
-  declare module.exports: $Exports<'clinic/test-local/cli-flame-full.test'>;
-}
-declare module 'clinic/test-local/cli-flame-passthrough-flags.js' {
-  declare module.exports: $Exports<'clinic/test-local/cli-flame-passthrough-flags'>;
-}
-declare module 'clinic/test-local/cli-flame-visualize-only.test.js' {
-  declare module.exports: $Exports<'clinic/test-local/cli-flame-visualize-only.test'>;
-}
-declare module 'clinic/test/authenticate.test.js' {
-  declare module.exports: $Exports<'clinic/test/authenticate.test'>;
-}
-declare module 'clinic/test/cli-ask-full.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-ask-full.test'>;
-}
-declare module 'clinic/test/cli-ask-help.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-ask-help.test'>;
-}
-declare module 'clinic/test/cli-ask-no-args.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-ask-no-args.test'>;
-}
-declare module 'clinic/test/cli-autocannon.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-autocannon.test'>;
-}
-declare module 'clinic/test/cli-bubbleprof-collect-only.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-bubbleprof-collect-only.test'>;
-}
-declare module 'clinic/test/cli-bubbleprof-full.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-bubbleprof-full.test'>;
-}
-declare module 'clinic/test/cli-bubbleprof-help.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-bubbleprof-help.test'>;
-}
-declare module 'clinic/test/cli-bubbleprof-no-args.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-bubbleprof-no-args.test'>;
-}
-declare module 'clinic/test/cli-bubbleprof-non-node.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-bubbleprof-non-node.test'>;
-}
-declare module 'clinic/test/cli-bubbleprof-version.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-bubbleprof-version.test'>;
-}
-declare module 'clinic/test/cli-bubbleprof-visualize-only.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-bubbleprof-visualize-only.test'>;
-}
-declare module 'clinic/test/cli-clean-full.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-clean-full.test'>;
-}
-declare module 'clinic/test/cli-clean-help.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-clean-help.test'>;
-}
-declare module 'clinic/test/cli-clinic-help.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-clinic-help.test'>;
-}
-declare module 'clinic/test/cli-clinic-no-args.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-clinic-no-args.test'>;
-}
-declare module 'clinic/test/cli-clinic-version.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-clinic-version.test'>;
-}
-declare module 'clinic/test/cli-doctor-collect-only.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-doctor-collect-only.test'>;
-}
-declare module 'clinic/test/cli-doctor-full.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-doctor-full.test'>;
-}
-declare module 'clinic/test/cli-doctor-help.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-doctor-help.test'>;
-}
-declare module 'clinic/test/cli-doctor-no-args.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-doctor-no-args.test'>;
-}
-declare module 'clinic/test/cli-doctor-non-node.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-doctor-non-node.test'>;
-}
-declare module 'clinic/test/cli-doctor-version.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-doctor-version.test'>;
-}
-declare module 'clinic/test/cli-doctor-visualize-only.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-doctor-visualize-only.test'>;
-}
-declare module 'clinic/test/cli-flame-full.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-flame-full.test'>;
-}
-declare module 'clinic/test/cli-flame-help.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-flame-help.test'>;
-}
-declare module 'clinic/test/cli-flame-no-args.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-flame-no-args.test'>;
-}
-declare module 'clinic/test/cli-flame-non-node.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-flame-non-node.test'>;
-}
-declare module 'clinic/test/cli-flame-upload.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-flame-upload.test'>;
-}
-declare module 'clinic/test/cli-flame-version.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-flame-version.test'>;
-}
-declare module 'clinic/test/cli-flame-visualize-only.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-flame-visualize-only.test'>;
-}
-declare module 'clinic/test/cli-login-logout.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-login-logout.test'>;
-}
-declare module 'clinic/test/cli-upload-files.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-upload-files.test'>;
-}
-declare module 'clinic/test/cli-upload-help.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-upload-help.test'>;
-}
-declare module 'clinic/test/cli-upload-no-args.test.js' {
-  declare module.exports: $Exports<'clinic/test/cli-upload-no-args.test'>;
-}
-declare module 'clinic/test/cli.js' {
-  declare module.exports: $Exports<'clinic/test/cli'>;
-}
-declare module 'clinic/test/fake-upload-server.js' {
-  declare module.exports: $Exports<'clinic/test/fake-upload-server'>;
-}
-declare module 'clinic/test/help-formatter.test.js' {
-  declare module.exports: $Exports<'clinic/test/help-formatter.test'>;
-}
-declare module 'clinic/test/server.js' {
-  declare module.exports: $Exports<'clinic/test/server'>;
-}
-declare module 'clinic/test/tar-and-upload.test.js' {
-  declare module.exports: $Exports<'clinic/test/tar-and-upload.test'>;
-}
diff --git a/flow-typed/npm/eslint-config-google_vx.x.x.js b/flow-typed/npm/eslint-config-google_vx.x.x.js
deleted file mode 100644 (file)
index 850c7cf..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// flow-typed signature: 6d53b8beb7564f054aa77b01a0bdc854
-// flow-typed version: <<STUB>>/eslint-config-google_v^0.14.0/flow_v0.136.0
-
-/**
- * This is an autogenerated libdef stub for:
- *
- *   'eslint-config-google'
- *
- * 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-google' {
-  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.
- */
-
-
-// Filename aliases
-declare module 'eslint-config-google/index' {
-  declare module.exports: $Exports<'eslint-config-google'>;
-}
-declare module 'eslint-config-google/index.js' {
-  declare module.exports: $Exports<'eslint-config-google'>;
-}
diff --git a/flow-typed/npm/eslint-config-node_vx.x.x.js b/flow-typed/npm/eslint-config-node_vx.x.x.js
deleted file mode 100644 (file)
index 439e5a7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-// flow-typed signature: 266abab1324d9dc432f9945dfa50e622
-// flow-typed version: <<STUB>>/eslint-config-node_v^4.1.0/flow_v0.136.0
-
-/**
- * This is an autogenerated libdef stub for:
- *
- *   'eslint-config-node'
- *
- * 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-node' {
-  declare module.exports: any;
-}
diff --git a/flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js b/flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js
deleted file mode 100644 (file)
index 8e204c6..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-// flow-typed signature: 8758aa073e18e09c34d2f362252e3a67
-// flow-typed version: <<STUB>>/eslint-plugin-flowtype_v^5.2.0/flow_v0.136.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/dist/bin/addAssertions' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/bin/checkDocs' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/bin/checkTests' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/bin/utilities' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyle' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyle/isSimpleType' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyle/needWrap' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyleComplexType' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyleSimpleType' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/arrowParens' {
-  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/newlineAfterFlowAnnotation' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/noDupeKeys' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/noExistentialType' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/noFlowFixMeComments' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/noMixed' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/noMutableArray' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/noPrimitiveConstructorTypes' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/noTypesMissingFileAnnotation' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/noUnusedExpressions' {
-  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/requireCompoundTypeAlias' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/requireExactType' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/requireIndexerName' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/requireInexactType' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/requireParameterType' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/requireReadonlyReactProps' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/requireReturnType' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/requireTypesAtTop' {
-  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/spreadExactType' {
-  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/evaluateVariables' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing' {
-  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/typeImportStyle' {
-  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' {
-  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/isNoFlowFile' {
-  declare module.exports: any;
-}
-
-declare module 'eslint-plugin-flowtype/dist/utilities/isNoFlowFileAnnotation' {
-  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/dist/bin/addAssertions.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/bin/addAssertions'>;
-}
-declare module 'eslint-plugin-flowtype/dist/bin/checkDocs.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/bin/checkDocs'>;
-}
-declare module 'eslint-plugin-flowtype/dist/bin/checkTests.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/bin/checkTests'>;
-}
-declare module 'eslint-plugin-flowtype/dist/bin/utilities.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/bin/utilities'>;
-}
-declare module 'eslint-plugin-flowtype/dist/index' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist'>;
-}
-declare module 'eslint-plugin-flowtype/dist/index.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyle/index' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/arrayStyle'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyle/index.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/arrayStyle'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyle/isSimpleType.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/arrayStyle/isSimpleType'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyle/needWrap.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/arrayStyle/needWrap'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyleComplexType.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/arrayStyleComplexType'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/arrayStyleSimpleType.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/arrayStyleSimpleType'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/arrowParens.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/arrowParens'>;
-}
-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/newlineAfterFlowAnnotation.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/newlineAfterFlowAnnotation'>;
-}
-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/noExistentialType.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noExistentialType'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/noFlowFixMeComments.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noFlowFixMeComments'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/noMixed.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noMixed'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/noMutableArray.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noMutableArray'>;
-}
-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/noTypesMissingFileAnnotation.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noTypesMissingFileAnnotation'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/noUnusedExpressions.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noUnusedExpressions'>;
-}
-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/requireCompoundTypeAlias.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireCompoundTypeAlias'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/requireExactType.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireExactType'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/requireIndexerName.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireIndexerName'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/requireInexactType.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireInexactType'>;
-}
-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/requireReadonlyReactProps.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireReadonlyReactProps'>;
-}
-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/requireTypesAtTop.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireTypesAtTop'>;
-}
-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/spreadExactType.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/spreadExactType'>;
-}
-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/evaluateVariables.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateVariables'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/index' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing'>;
-}
-declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/index.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing'>;
-}
-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/typeImportStyle.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeImportStyle'>;
-}
-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' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities'>;
-}
-declare module 'eslint-plugin-flowtype/dist/utilities/index.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities'>;
-}
-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/isNoFlowFile.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/isNoFlowFile'>;
-}
-declare module 'eslint-plugin-flowtype/dist/utilities/isNoFlowFileAnnotation.js' {
-  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/isNoFlowFileAnnotation'>;
-}
-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'>;
-}
diff --git a/flow-typed/npm/eslint_vx.x.x.js b/flow-typed/npm/eslint_vx.x.x.js
deleted file mode 100644 (file)
index ff8969c..0000000
+++ /dev/null
@@ -1,2726 +0,0 @@
-// flow-typed signature: 87284ccc293a1202f0475fb0dde28ec3
-// flow-typed version: <<STUB>>/eslint_v^7.11.0/flow_v0.136.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/config-schema' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/conf/default-cli-options' {
-  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/cli-engine/cascading-config-array-factory' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/cli-engine' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/config-array-factory' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/config-array/config-array' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/config-array/config-dependency' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/config-array/extracted-config' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/config-array/ignore-pattern' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/config-array' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/config-array/override-tester' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/file-enumerator' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/checkstyle' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/codeframe' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/compact' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/html' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/jslint-xml' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/json-with-metadata' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/json' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/junit' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/stylish' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/table' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/tap' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/unix' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/formatters/visualstudio' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/hash' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/lint-result-cache' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/load-rules' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli-engine/xml-escape' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/cli' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/eslint/eslint' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/eslint' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/init/autoconfig' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/init/config-file' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/init/config-initializer' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/init/config-rule' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/init/npm-utils' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/init/source-code-utils' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/apply-disable-directives' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/code-path-analysis/code-path-analyzer' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/code-path-analysis/code-path-segment' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/code-path-analysis/code-path-state' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/code-path-analysis/code-path' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/code-path-analysis/debug-helpers' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/code-path-analysis/fork-context' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/code-path-analysis/id-generator' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/config-comment-parser' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/interpolate' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/linter' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/node-event-generator' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/report-translator' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/rule-fixer' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/rules' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/safe-emitter' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/source-code-fixer' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/linter/timing' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/options' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rule-tester' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rule-tester/rule-tester' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/accessor-pairs' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/array-bracket-newline' {
-  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/array-element-newline' {
-  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-last' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/default-case' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/default-param-last' {
-  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/for-direction' {
-  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/function-call-argument-newline' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/function-paren-newline' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/generator-star-spacing' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/getter-return' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/global-require' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/grouped-accessor-pairs' {
-  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-denylist' {
-  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/implicit-arrow-linebreak' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/indent-legacy' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/indent' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules' {
-  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/lines-between-class-members' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/max-classes-per-file' {
-  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-per-function' {
-  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-comment-style' {
-  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-async-promise-executor' {
-  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-buffer-constructor' {
-  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-compare-neg-zero' {
-  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-constructor-return' {
-  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-else-if' {
-  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-import-assign' {
-  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-loss-of-precision' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/no-magic-numbers' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/no-misleading-character-class' {
-  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-promise-executor-return' {
-  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-exports' {
-  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-setter-return' {
-  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-loop' {
-  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-backreference' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/no-useless-call' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/no-useless-catch' {
-  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/nonblock-statement-body-position' {
-  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/padding-line-between-statements' {
-  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-exponentiation-operator' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/prefer-named-capture-group' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/prefer-numeric-literals' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/prefer-object-spread' {
-  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-regex-literals' {
-  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-atomic-updates' {
-  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-unicode-regexp' {
-  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-style' {
-  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/switch-colon-spacing' {
-  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/utils/ast-utils' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/utils/fix-tracker' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/utils/keywords' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/utils/lazy-loading-rule-map' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/utils/patterns/letters' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/utils/unicode' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/utils/unicode/is-combining-character' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/utils/unicode/is-emoji-modifier' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/utils/unicode/is-regional-indicator-symbol' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/rules/utils/unicode/is-surrogate-pair' {
-  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/shared/ajv' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/shared/ast-utils' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/shared/config-validator' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/shared/deprecation-warnings' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/shared/logging' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/shared/relative-module-resolver' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/shared/runtime-info' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/shared/traverser' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/shared/types' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/source-code' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/backward-token-comment-cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/backward-token-cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/cursors' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/decorative-cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/filter-cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/forward-token-comment-cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/forward-token-cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/limit-cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/padded-token-cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/skip-cursor' {
-  declare module.exports: any;
-}
-
-declare module 'eslint/lib/source-code/token-store/utils' {
-  declare module.exports: any;
-}
-
-// Filename aliases
-declare module 'eslint/bin/eslint.js' {
-  declare module.exports: $Exports<'eslint/bin/eslint'>;
-}
-declare module 'eslint/conf/config-schema.js' {
-  declare module.exports: $Exports<'eslint/conf/config-schema'>;
-}
-declare module 'eslint/conf/default-cli-options.js' {
-  declare module.exports: $Exports<'eslint/conf/default-cli-options'>;
-}
-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/cli-engine/cascading-config-array-factory.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/cascading-config-array-factory'>;
-}
-declare module 'eslint/lib/cli-engine/cli-engine.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/cli-engine'>;
-}
-declare module 'eslint/lib/cli-engine/config-array-factory.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/config-array-factory'>;
-}
-declare module 'eslint/lib/cli-engine/config-array/config-array.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/config-array/config-array'>;
-}
-declare module 'eslint/lib/cli-engine/config-array/config-dependency.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/config-array/config-dependency'>;
-}
-declare module 'eslint/lib/cli-engine/config-array/extracted-config.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/config-array/extracted-config'>;
-}
-declare module 'eslint/lib/cli-engine/config-array/ignore-pattern.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/config-array/ignore-pattern'>;
-}
-declare module 'eslint/lib/cli-engine/config-array/index' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/config-array'>;
-}
-declare module 'eslint/lib/cli-engine/config-array/index.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/config-array'>;
-}
-declare module 'eslint/lib/cli-engine/config-array/override-tester.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/config-array/override-tester'>;
-}
-declare module 'eslint/lib/cli-engine/file-enumerator.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/file-enumerator'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/checkstyle.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/checkstyle'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/codeframe.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/codeframe'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/compact.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/compact'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/html.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/html'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/jslint-xml.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/jslint-xml'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/json-with-metadata.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/json-with-metadata'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/json.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/json'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/junit.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/junit'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/stylish.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/stylish'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/table.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/table'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/tap.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/tap'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/unix.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/unix'>;
-}
-declare module 'eslint/lib/cli-engine/formatters/visualstudio.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/formatters/visualstudio'>;
-}
-declare module 'eslint/lib/cli-engine/hash.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/hash'>;
-}
-declare module 'eslint/lib/cli-engine/index' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine'>;
-}
-declare module 'eslint/lib/cli-engine/index.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine'>;
-}
-declare module 'eslint/lib/cli-engine/lint-result-cache.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/lint-result-cache'>;
-}
-declare module 'eslint/lib/cli-engine/load-rules.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/load-rules'>;
-}
-declare module 'eslint/lib/cli-engine/xml-escape.js' {
-  declare module.exports: $Exports<'eslint/lib/cli-engine/xml-escape'>;
-}
-declare module 'eslint/lib/cli.js' {
-  declare module.exports: $Exports<'eslint/lib/cli'>;
-}
-declare module 'eslint/lib/eslint/eslint.js' {
-  declare module.exports: $Exports<'eslint/lib/eslint/eslint'>;
-}
-declare module 'eslint/lib/eslint/index' {
-  declare module.exports: $Exports<'eslint/lib/eslint'>;
-}
-declare module 'eslint/lib/eslint/index.js' {
-  declare module.exports: $Exports<'eslint/lib/eslint'>;
-}
-declare module 'eslint/lib/init/autoconfig.js' {
-  declare module.exports: $Exports<'eslint/lib/init/autoconfig'>;
-}
-declare module 'eslint/lib/init/config-file.js' {
-  declare module.exports: $Exports<'eslint/lib/init/config-file'>;
-}
-declare module 'eslint/lib/init/config-initializer.js' {
-  declare module.exports: $Exports<'eslint/lib/init/config-initializer'>;
-}
-declare module 'eslint/lib/init/config-rule.js' {
-  declare module.exports: $Exports<'eslint/lib/init/config-rule'>;
-}
-declare module 'eslint/lib/init/npm-utils.js' {
-  declare module.exports: $Exports<'eslint/lib/init/npm-utils'>;
-}
-declare module 'eslint/lib/init/source-code-utils.js' {
-  declare module.exports: $Exports<'eslint/lib/init/source-code-utils'>;
-}
-declare module 'eslint/lib/linter/apply-disable-directives.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/apply-disable-directives'>;
-}
-declare module 'eslint/lib/linter/code-path-analysis/code-path-analyzer.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/code-path-analysis/code-path-analyzer'>;
-}
-declare module 'eslint/lib/linter/code-path-analysis/code-path-segment.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/code-path-analysis/code-path-segment'>;
-}
-declare module 'eslint/lib/linter/code-path-analysis/code-path-state.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/code-path-analysis/code-path-state'>;
-}
-declare module 'eslint/lib/linter/code-path-analysis/code-path.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/code-path-analysis/code-path'>;
-}
-declare module 'eslint/lib/linter/code-path-analysis/debug-helpers.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/code-path-analysis/debug-helpers'>;
-}
-declare module 'eslint/lib/linter/code-path-analysis/fork-context.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/code-path-analysis/fork-context'>;
-}
-declare module 'eslint/lib/linter/code-path-analysis/id-generator.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/code-path-analysis/id-generator'>;
-}
-declare module 'eslint/lib/linter/config-comment-parser.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/config-comment-parser'>;
-}
-declare module 'eslint/lib/linter/index' {
-  declare module.exports: $Exports<'eslint/lib/linter'>;
-}
-declare module 'eslint/lib/linter/index.js' {
-  declare module.exports: $Exports<'eslint/lib/linter'>;
-}
-declare module 'eslint/lib/linter/interpolate.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/interpolate'>;
-}
-declare module 'eslint/lib/linter/linter.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/linter'>;
-}
-declare module 'eslint/lib/linter/node-event-generator.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/node-event-generator'>;
-}
-declare module 'eslint/lib/linter/report-translator.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/report-translator'>;
-}
-declare module 'eslint/lib/linter/rule-fixer.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/rule-fixer'>;
-}
-declare module 'eslint/lib/linter/rules.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/rules'>;
-}
-declare module 'eslint/lib/linter/safe-emitter.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/safe-emitter'>;
-}
-declare module 'eslint/lib/linter/source-code-fixer.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/source-code-fixer'>;
-}
-declare module 'eslint/lib/linter/timing.js' {
-  declare module.exports: $Exports<'eslint/lib/linter/timing'>;
-}
-declare module 'eslint/lib/options.js' {
-  declare module.exports: $Exports<'eslint/lib/options'>;
-}
-declare module 'eslint/lib/rule-tester/index' {
-  declare module.exports: $Exports<'eslint/lib/rule-tester'>;
-}
-declare module 'eslint/lib/rule-tester/index.js' {
-  declare module.exports: $Exports<'eslint/lib/rule-tester'>;
-}
-declare module 'eslint/lib/rule-tester/rule-tester.js' {
-  declare module.exports: $Exports<'eslint/lib/rule-tester/rule-tester'>;
-}
-declare module 'eslint/lib/rules/accessor-pairs.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/accessor-pairs'>;
-}
-declare module 'eslint/lib/rules/array-bracket-newline.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/array-bracket-newline'>;
-}
-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/array-element-newline.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/array-element-newline'>;
-}
-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-last.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/default-case-last'>;
-}
-declare module 'eslint/lib/rules/default-case.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/default-case'>;
-}
-declare module 'eslint/lib/rules/default-param-last.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/default-param-last'>;
-}
-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/for-direction.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/for-direction'>;
-}
-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/function-call-argument-newline.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/function-call-argument-newline'>;
-}
-declare module 'eslint/lib/rules/function-paren-newline.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/function-paren-newline'>;
-}
-declare module 'eslint/lib/rules/generator-star-spacing.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/generator-star-spacing'>;
-}
-declare module 'eslint/lib/rules/getter-return.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/getter-return'>;
-}
-declare module 'eslint/lib/rules/global-require.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/global-require'>;
-}
-declare module 'eslint/lib/rules/grouped-accessor-pairs.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/grouped-accessor-pairs'>;
-}
-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-denylist.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/id-denylist'>;
-}
-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/implicit-arrow-linebreak.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/implicit-arrow-linebreak'>;
-}
-declare module 'eslint/lib/rules/indent-legacy.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/indent-legacy'>;
-}
-declare module 'eslint/lib/rules/indent.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/indent'>;
-}
-declare module 'eslint/lib/rules/index' {
-  declare module.exports: $Exports<'eslint/lib/rules'>;
-}
-declare module 'eslint/lib/rules/index.js' {
-  declare module.exports: $Exports<'eslint/lib/rules'>;
-}
-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/lines-between-class-members.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/lines-between-class-members'>;
-}
-declare module 'eslint/lib/rules/max-classes-per-file.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/max-classes-per-file'>;
-}
-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-per-function.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/max-lines-per-function'>;
-}
-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-comment-style.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/multiline-comment-style'>;
-}
-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-async-promise-executor.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-async-promise-executor'>;
-}
-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-buffer-constructor.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-buffer-constructor'>;
-}
-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-compare-neg-zero.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-compare-neg-zero'>;
-}
-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-constructor-return.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-constructor-return'>;
-}
-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-else-if.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-dupe-else-if'>;
-}
-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-import-assign.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-import-assign'>;
-}
-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-loss-of-precision.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-loss-of-precision'>;
-}
-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-misleading-character-class.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-misleading-character-class'>;
-}
-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-promise-executor-return.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-promise-executor-return'>;
-}
-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-exports.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-exports'>;
-}
-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-setter-return.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-setter-return'>;
-}
-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-loop.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-unreachable-loop'>;
-}
-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-backreference.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-useless-backreference'>;
-}
-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-catch.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/no-useless-catch'>;
-}
-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/nonblock-statement-body-position.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/nonblock-statement-body-position'>;
-}
-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/padding-line-between-statements.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/padding-line-between-statements'>;
-}
-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-exponentiation-operator.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/prefer-exponentiation-operator'>;
-}
-declare module 'eslint/lib/rules/prefer-named-capture-group.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/prefer-named-capture-group'>;
-}
-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-object-spread.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/prefer-object-spread'>;
-}
-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-regex-literals.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/prefer-regex-literals'>;
-}
-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-atomic-updates.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/require-atomic-updates'>;
-}
-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-unicode-regexp.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/require-unicode-regexp'>;
-}
-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-style.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/semi-style'>;
-}
-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/switch-colon-spacing.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/switch-colon-spacing'>;
-}
-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/utils/ast-utils.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/ast-utils'>;
-}
-declare module 'eslint/lib/rules/utils/fix-tracker.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/fix-tracker'>;
-}
-declare module 'eslint/lib/rules/utils/keywords.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/keywords'>;
-}
-declare module 'eslint/lib/rules/utils/lazy-loading-rule-map.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/lazy-loading-rule-map'>;
-}
-declare module 'eslint/lib/rules/utils/patterns/letters.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/patterns/letters'>;
-}
-declare module 'eslint/lib/rules/utils/unicode/index' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/unicode'>;
-}
-declare module 'eslint/lib/rules/utils/unicode/index.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/unicode'>;
-}
-declare module 'eslint/lib/rules/utils/unicode/is-combining-character.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/unicode/is-combining-character'>;
-}
-declare module 'eslint/lib/rules/utils/unicode/is-emoji-modifier.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/unicode/is-emoji-modifier'>;
-}
-declare module 'eslint/lib/rules/utils/unicode/is-regional-indicator-symbol.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/unicode/is-regional-indicator-symbol'>;
-}
-declare module 'eslint/lib/rules/utils/unicode/is-surrogate-pair.js' {
-  declare module.exports: $Exports<'eslint/lib/rules/utils/unicode/is-surrogate-pair'>;
-}
-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/shared/ajv.js' {
-  declare module.exports: $Exports<'eslint/lib/shared/ajv'>;
-}
-declare module 'eslint/lib/shared/ast-utils.js' {
-  declare module.exports: $Exports<'eslint/lib/shared/ast-utils'>;
-}
-declare module 'eslint/lib/shared/config-validator.js' {
-  declare module.exports: $Exports<'eslint/lib/shared/config-validator'>;
-}
-declare module 'eslint/lib/shared/deprecation-warnings.js' {
-  declare module.exports: $Exports<'eslint/lib/shared/deprecation-warnings'>;
-}
-declare module 'eslint/lib/shared/logging.js' {
-  declare module.exports: $Exports<'eslint/lib/shared/logging'>;
-}
-declare module 'eslint/lib/shared/relative-module-resolver.js' {
-  declare module.exports: $Exports<'eslint/lib/shared/relative-module-resolver'>;
-}
-declare module 'eslint/lib/shared/runtime-info.js' {
-  declare module.exports: $Exports<'eslint/lib/shared/runtime-info'>;
-}
-declare module 'eslint/lib/shared/traverser.js' {
-  declare module.exports: $Exports<'eslint/lib/shared/traverser'>;
-}
-declare module 'eslint/lib/shared/types.js' {
-  declare module.exports: $Exports<'eslint/lib/shared/types'>;
-}
-declare module 'eslint/lib/source-code/index' {
-  declare module.exports: $Exports<'eslint/lib/source-code'>;
-}
-declare module 'eslint/lib/source-code/index.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code'>;
-}
-declare module 'eslint/lib/source-code/source-code.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/source-code'>;
-}
-declare module 'eslint/lib/source-code/token-store/backward-token-comment-cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/backward-token-comment-cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/backward-token-cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/backward-token-cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/cursors.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/cursors'>;
-}
-declare module 'eslint/lib/source-code/token-store/decorative-cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/decorative-cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/filter-cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/filter-cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/forward-token-comment-cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/forward-token-comment-cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/forward-token-cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/forward-token-cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/index' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store'>;
-}
-declare module 'eslint/lib/source-code/token-store/index.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store'>;
-}
-declare module 'eslint/lib/source-code/token-store/limit-cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/limit-cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/padded-token-cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/padded-token-cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/skip-cursor.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/skip-cursor'>;
-}
-declare module 'eslint/lib/source-code/token-store/utils.js' {
-  declare module.exports: $Exports<'eslint/lib/source-code/token-store/utils'>;
-}
diff --git a/flow-typed/npm/flow-bin_v0.x.x.js b/flow-typed/npm/flow-bin_v0.x.x.js
deleted file mode 100644 (file)
index fda1f29..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-// flow-typed signature: 28fdff7f110e1c75efab63ff205dda30
-// flow-typed version: c6154227d1/flow-bin_v0.x.x/flow_>=v0.104.x
-
-declare module "flow-bin" {
-  declare module.exports: string;
-}
diff --git a/flow-typed/npm/flow-typed_vx.x.x.js b/flow-typed/npm/flow-typed_vx.x.x.js
deleted file mode 100644 (file)
index 2dbc3ca..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-// flow-typed signature: 5e180472a76cccade6d1e63228aa20a7
-// flow-typed version: <<STUB>>/flow-typed_v^3.2.1/flow_v0.136.0
-
-/**
- * This is an autogenerated libdef stub for:
- *
- *   'flow-typed'
- *
- * 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 'flow-typed' {
-  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 'flow-typed/dist/cli' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/commands/create-stub' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/commands/install' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/commands/runTests' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/commands/search' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/commands/update-cache' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/commands/update' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/commands/validateDefs' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/cacheRepoUtils' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/codeSign' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/fileUtils' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/flowProjectUtils' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/flowVersion' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/git' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/github' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/isInFlowTypedRepo' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/libDefs' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/node' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/npm/npmLibDefs' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/npm/npmProjectUtils' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/semver' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/stubUtils' {
-  declare module.exports: any;
-}
-
-declare module 'flow-typed/dist/lib/ValidationError' {
-  declare module.exports: any;
-}
-
-// Filename aliases
-declare module 'flow-typed/dist/cli.js' {
-  declare module.exports: $Exports<'flow-typed/dist/cli'>;
-}
-declare module 'flow-typed/dist/commands/create-stub.js' {
-  declare module.exports: $Exports<'flow-typed/dist/commands/create-stub'>;
-}
-declare module 'flow-typed/dist/commands/install.js' {
-  declare module.exports: $Exports<'flow-typed/dist/commands/install'>;
-}
-declare module 'flow-typed/dist/commands/runTests.js' {
-  declare module.exports: $Exports<'flow-typed/dist/commands/runTests'>;
-}
-declare module 'flow-typed/dist/commands/search.js' {
-  declare module.exports: $Exports<'flow-typed/dist/commands/search'>;
-}
-declare module 'flow-typed/dist/commands/update-cache.js' {
-  declare module.exports: $Exports<'flow-typed/dist/commands/update-cache'>;
-}
-declare module 'flow-typed/dist/commands/update.js' {
-  declare module.exports: $Exports<'flow-typed/dist/commands/update'>;
-}
-declare module 'flow-typed/dist/commands/validateDefs.js' {
-  declare module.exports: $Exports<'flow-typed/dist/commands/validateDefs'>;
-}
-declare module 'flow-typed/dist/lib/cacheRepoUtils.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/cacheRepoUtils'>;
-}
-declare module 'flow-typed/dist/lib/codeSign.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/codeSign'>;
-}
-declare module 'flow-typed/dist/lib/fileUtils.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/fileUtils'>;
-}
-declare module 'flow-typed/dist/lib/flowProjectUtils.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/flowProjectUtils'>;
-}
-declare module 'flow-typed/dist/lib/flowVersion.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/flowVersion'>;
-}
-declare module 'flow-typed/dist/lib/git.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/git'>;
-}
-declare module 'flow-typed/dist/lib/github.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/github'>;
-}
-declare module 'flow-typed/dist/lib/isInFlowTypedRepo.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/isInFlowTypedRepo'>;
-}
-declare module 'flow-typed/dist/lib/libDefs.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/libDefs'>;
-}
-declare module 'flow-typed/dist/lib/node.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/node'>;
-}
-declare module 'flow-typed/dist/lib/npm/npmLibDefs.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/npm/npmLibDefs'>;
-}
-declare module 'flow-typed/dist/lib/npm/npmProjectUtils.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/npm/npmProjectUtils'>;
-}
-declare module 'flow-typed/dist/lib/semver.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/semver'>;
-}
-declare module 'flow-typed/dist/lib/stubUtils.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/stubUtils'>;
-}
-declare module 'flow-typed/dist/lib/ValidationError.js' {
-  declare module.exports: $Exports<'flow-typed/dist/lib/ValidationError'>;
-}
diff --git a/flow-typed/npm/npm-check_vx.x.x.js b/flow-typed/npm/npm-check_vx.x.x.js
deleted file mode 100644 (file)
index 6ff0e33..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-// flow-typed signature: 4d3109b77e0817da465392a8572a5b10
-// flow-typed version: <<STUB>>/npm-check_v^5.9.2/flow_v0.136.0
-
-/**
- * This is an autogenerated libdef stub for:
- *
- *   'npm-check'
- *
- * 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 'npm-check' {
-  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 'npm-check/bin/cli' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/cli' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/in/best-guess-homepage' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/in/create-package-summary' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/in/find-module-path' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/in/get-installed-packages' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/in/get-latest-from-registry' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/in/get-unused-packages' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/in' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/in/read-package-json' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/out/emoji' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/out/install-packages' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/out/interactive-update' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/out/static-output' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/out/update-all' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/state/debug' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/state/init' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib-es5/state/state' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/cli' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/in/best-guess-homepage' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/in/create-package-summary' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/in/find-module-path' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/in/get-installed-packages' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/in/get-latest-from-registry' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/in/get-unused-packages' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/in' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/in/read-package-json' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/out/emoji' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/out/install-packages' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/out/interactive-update' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/out/static-output' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/out/update-all' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/state/debug' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/state/init' {
-  declare module.exports: any;
-}
-
-declare module 'npm-check/lib/state/state' {
-  declare module.exports: any;
-}
-
-// Filename aliases
-declare module 'npm-check/bin/cli.js' {
-  declare module.exports: $Exports<'npm-check/bin/cli'>;
-}
-declare module 'npm-check/lib-es5/cli.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/cli'>;
-}
-declare module 'npm-check/lib-es5/in/best-guess-homepage.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/in/best-guess-homepage'>;
-}
-declare module 'npm-check/lib-es5/in/create-package-summary.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/in/create-package-summary'>;
-}
-declare module 'npm-check/lib-es5/in/find-module-path.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/in/find-module-path'>;
-}
-declare module 'npm-check/lib-es5/in/get-installed-packages.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/in/get-installed-packages'>;
-}
-declare module 'npm-check/lib-es5/in/get-latest-from-registry.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/in/get-latest-from-registry'>;
-}
-declare module 'npm-check/lib-es5/in/get-unused-packages.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/in/get-unused-packages'>;
-}
-declare module 'npm-check/lib-es5/in/index' {
-  declare module.exports: $Exports<'npm-check/lib-es5/in'>;
-}
-declare module 'npm-check/lib-es5/in/index.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/in'>;
-}
-declare module 'npm-check/lib-es5/in/read-package-json.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/in/read-package-json'>;
-}
-declare module 'npm-check/lib-es5/index' {
-  declare module.exports: $Exports<'npm-check/lib-es5'>;
-}
-declare module 'npm-check/lib-es5/index.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5'>;
-}
-declare module 'npm-check/lib-es5/out/emoji.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/out/emoji'>;
-}
-declare module 'npm-check/lib-es5/out/install-packages.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/out/install-packages'>;
-}
-declare module 'npm-check/lib-es5/out/interactive-update.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/out/interactive-update'>;
-}
-declare module 'npm-check/lib-es5/out/static-output.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/out/static-output'>;
-}
-declare module 'npm-check/lib-es5/out/update-all.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/out/update-all'>;
-}
-declare module 'npm-check/lib-es5/state/debug.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/state/debug'>;
-}
-declare module 'npm-check/lib-es5/state/init.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/state/init'>;
-}
-declare module 'npm-check/lib-es5/state/state.js' {
-  declare module.exports: $Exports<'npm-check/lib-es5/state/state'>;
-}
-declare module 'npm-check/lib/cli.js' {
-  declare module.exports: $Exports<'npm-check/lib/cli'>;
-}
-declare module 'npm-check/lib/in/best-guess-homepage.js' {
-  declare module.exports: $Exports<'npm-check/lib/in/best-guess-homepage'>;
-}
-declare module 'npm-check/lib/in/create-package-summary.js' {
-  declare module.exports: $Exports<'npm-check/lib/in/create-package-summary'>;
-}
-declare module 'npm-check/lib/in/find-module-path.js' {
-  declare module.exports: $Exports<'npm-check/lib/in/find-module-path'>;
-}
-declare module 'npm-check/lib/in/get-installed-packages.js' {
-  declare module.exports: $Exports<'npm-check/lib/in/get-installed-packages'>;
-}
-declare module 'npm-check/lib/in/get-latest-from-registry.js' {
-  declare module.exports: $Exports<'npm-check/lib/in/get-latest-from-registry'>;
-}
-declare module 'npm-check/lib/in/get-unused-packages.js' {
-  declare module.exports: $Exports<'npm-check/lib/in/get-unused-packages'>;
-}
-declare module 'npm-check/lib/in/index' {
-  declare module.exports: $Exports<'npm-check/lib/in'>;
-}
-declare module 'npm-check/lib/in/index.js' {
-  declare module.exports: $Exports<'npm-check/lib/in'>;
-}
-declare module 'npm-check/lib/in/read-package-json.js' {
-  declare module.exports: $Exports<'npm-check/lib/in/read-package-json'>;
-}
-declare module 'npm-check/lib/index' {
-  declare module.exports: $Exports<'npm-check/lib'>;
-}
-declare module 'npm-check/lib/index.js' {
-  declare module.exports: $Exports<'npm-check/lib'>;
-}
-declare module 'npm-check/lib/out/emoji.js' {
-  declare module.exports: $Exports<'npm-check/lib/out/emoji'>;
-}
-declare module 'npm-check/lib/out/install-packages.js' {
-  declare module.exports: $Exports<'npm-check/lib/out/install-packages'>;
-}
-declare module 'npm-check/lib/out/interactive-update.js' {
-  declare module.exports: $Exports<'npm-check/lib/out/interactive-update'>;
-}
-declare module 'npm-check/lib/out/static-output.js' {
-  declare module.exports: $Exports<'npm-check/lib/out/static-output'>;
-}
-declare module 'npm-check/lib/out/update-all.js' {
-  declare module.exports: $Exports<'npm-check/lib/out/update-all'>;
-}
-declare module 'npm-check/lib/state/debug.js' {
-  declare module.exports: $Exports<'npm-check/lib/state/debug'>;
-}
-declare module 'npm-check/lib/state/init.js' {
-  declare module.exports: $Exports<'npm-check/lib/state/init'>;
-}
-declare module 'npm-check/lib/state/state.js' {
-  declare module.exports: $Exports<'npm-check/lib/state/state'>;
-}
diff --git a/flow-typed/npm/uuid_v8.x.x.js b/flow-typed/npm/uuid_v8.x.x.js
deleted file mode 100644 (file)
index 496cf8b..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-// flow-typed signature: 1b555a8f791762f2a4ee29e1335a175a
-// flow-typed version: a40f6e5201/uuid_v8.x.x/flow_>=v0.104.x
-
-declare module 'uuid' {
-  // v1 (Timestamp)
-  declare type V1Options = {|
-    node?: $ReadOnlyArray<number>,
-    clockseq?: number,
-    msecs?: number,
-    nsecs?: number,
-    random?: $ReadOnlyArray<number>,
-    rng?: () => $ReadOnlyArray<number>,
-  |};
-
-  declare export function v1(options?: V1Options): string;
-
-  declare export function v1(
-    options: V1Options | null,
-    buffer: Array<number>,
-    offset?: number
-  ): Array<number>;
-
-  // v3 (Namespace)
-  declare function v3Impl(
-    name: string | $ReadOnlyArray<number>,
-    namespace: string | $ReadOnlyArray<number>
-  ): string;
-
-  declare function v3Impl(
-    name: string | $ReadOnlyArray<number>,
-    namespace: string | $ReadOnlyArray<number>,
-    buffer: Array<number>,
-    offset?: number
-  ): Array<number>;
-
-  declare export var v3: {|
-    [[call]]: typeof v3Impl,
-    DNS: string,
-    URL: string,
-  |};
-
-  // v4 (Random)
-  declare type V4Options = {|
-    random?: $ReadOnlyArray<number>,
-    rng?: () => $ReadOnlyArray<number>,
-  |};
-
-  declare export function v4(options?: V4Options): string;
-
-  declare export function v4(
-    options: V4Options | null,
-    buffer: Array<number>,
-    offset?: number
-  ): Array<number>;
-
-  // v5 (Namespace)
-  declare function v5Impl(
-    name: string | $ReadOnlyArray<number>,
-    namespace: string | $ReadOnlyArray<number>
-  ): string;
-
-  declare function v5Impl(
-    name: string | $ReadOnlyArray<number>,
-    namespace: string | $ReadOnlyArray<number>,
-    buffer: Array<number>,
-    offset?: number
-  ): Array<number>;
-
-  declare export var v5: {|
-    [[call]]: typeof v5Impl,
-    DNS: string,
-    URL: string,
-  |};
-}
diff --git a/flow-typed/npm/winston_v3.x.x.js b/flow-typed/npm/winston_v3.x.x.js
deleted file mode 100644 (file)
index a92d2cb..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-// flow-typed signature: 71d87edbd93b4e1027b7e590a8e97a21
-// flow-typed version: 097f6f2b81/winston_v3.x.x/flow_>=v0.104.x
-
-declare type $winstonLevels = { [string]: number, ... };
-
-declare type $winstonNpmLogLevels = {
-  error: number,
-  warn: number,
-  info: number,
-  verbose: number,
-  debug: number,
-  silly: number,
-  ...
-};
-
-declare type $winstonInfo<T: $winstonLevels> = {
-  [optionName: string]: mixed,
-  level: $Keys<T>,
-  message: string,
-  ...
-};
-
-declare type $winstonFormat = Object;
-
-declare type $winstonFileTransportConfig<T: $winstonLevels> = {
-  filename: string,
-  level?: $Keys<T>,
-  ...
-};
-
-declare class $winstonTransport {
-  level?: string;
-  silent?: boolean;
-}
-
-declare class $winstonFileTransport<T> extends $winstonTransport {
-  constructor($winstonFileTransportConfig<T>): $winstonFileTransport<T>;
-}
-
-declare type $winstonConsoleTransportConfig<T: $winstonLevels> = { level?: $Keys<T>, ... };
-
-declare class $winstonConsoleTransport<T> extends $winstonTransport {
-  constructor(
-    config?: $winstonConsoleTransportConfig<T>
-  ): $winstonConsoleTransport<T>;
-}
-
-declare type $winstonLoggerConfig<T: $winstonLevels> = {
-  exitOnError?: boolean,
-  format?: $winstonFormat,
-  level?: $Keys<T>,
-  levels?: T,
-  transports?: Array<$winstonTransport>,
-  ...
-};
-
-declare type $winstonLogger<T: $winstonLevels> = {
-  [$Keys<T>]: (message: string, meta?: Object) => $winstonLogger<T>,
-  add: $winstonTransport => $winstonLogger<T>,
-  remove: $winstonTransport => $winstonLogger<T>,
-  clear: () => $winstonLogger<T>,
-  close: () => $winstonLogger<T>,
-  configure: ($winstonLoggerConfig<T>) => void,
-  log: (message: $winstonInfo<T>) => $winstonLogger<T>,
-  startTimer: () => $winstonProfiler<T>,
-  profile: (name: string, info?: $Shape<$winstonInfo<T>>) => void,
-  ...
-};
-
-declare type $winstonConfigSubModule = { npm: () => $winstonNpmLogLevels, ... };
-
-declare type $winstonFormatJsonOptions = {
-  replacer?: (key: string, value: mixed) => mixed,
-  space?: number,
-  stable?: boolean,
-  ...
-};
-
-declare type $winstonFormatPrettyPrintOptions = {|
-  depth?: number,
-  colorize?: boolean,
-|};
-
-declare type $winstonFormatErrorsOptions = {|
-  stack?: boolean,
-|};
-
-declare type $winstonFormatSubModule = {
-  <T: $winstonLevels>((info: $winstonInfo<T>) => $winstonInfo<T>): () => $winstonFormat,
-  combine: (...args: Array<$winstonFormat>) => $winstonFormat,
-  json: (options?: $winstonFormatJsonOptions) => $winstonFormat,
-  label: (config?: Object) => $winstonFormat,
-  metadata: () => $winstonFormat,
-  prettyPrint: (options?: $winstonFormatPrettyPrintOptions) => $winstonFormat,
-  simple: () => $winstonFormat,
-  splat: () => $winstonFormat,
-  timestamp: (?{
-    alias?: string,
-    format?: string | () => string,
-    ...
-  }) => $winstonFormat,
-  colorize: () => $winstonFormat,
-  logstash: () => $winstonFormat,
-  printf: ((args: $winstonInfo<Object>) => string) => $winstonFormat,
-  errors: (options?: $winstonFormatErrorsOptions) => $winstonFormat,
-  ...
-};
-
-declare type $winstonDefaultLogger = $winstonLogger<$winstonNpmLogLevels>;
-
-declare class $winstonContainer<T> {
-  constructor(config?: $winstonLoggerConfig<T>): $winstonContainer<T>;
-  add(loggerId: string, config?: $winstonLoggerConfig<T>): $winstonLogger<T>;
-  get(loggerId: string): $winstonLogger<T>;
-  has(loggerId: string): boolean;
-  close(loggerId?: string): void;
-}
-
-declare interface $winstonProfiler<T: $winstonNpmLogLevels> {
-  logger: $winstonLogger<T>;
-  start: Date;
-  done(info?: $Shape<$winstonInfo<T>>): void;
-};
-
-declare module "winston" {
-  declare export type Levels = $winstonLevels;
-  declare export type NpmLogLevels = $winstonNpmLogLevels;
-  declare export type Info<T: Levels > = $winstonInfo<T>;
-  declare export type Format = $winstonFormat;
-  declare export type FileTransportConfig<T: Levels> = $winstonFileTransportConfig<T>;
-  declare export type Transport = $winstonTransport;
-  declare export type FileTransport<T: Levels> = $winstonFileTransport<T>;
-  declare export type ConsoleTransportConfig<T: Levels> = $winstonConsoleTransportConfig<T>;
-  declare export type ConsoleTransport<T: Levels> = $winstonConsoleTransport<T>;
-  declare export type LoggerConfig<T: Levels> = $winstonLoggerConfig<T>;
-  declare export type Logger<T: Levels> = $winstonLogger<T>;
-  declare export type ConfigSubModule = $winstonConfigSubModule;
-  declare export type FormatSubModule = $winstonFormatSubModule;
-  declare export type DefaultLogger = $winstonDefaultLogger;
-  declare export type Container<T: Levels> = $winstonContainer<T>;
-  declare export type Profiler<T: Levels> = $winstonProfiler<T>;
-
-  declare module.exports: {
-    ...$Exact<$winstonDefaultLogger>,
-    format: $winstonFormatSubModule,
-    transports: {
-      Console: typeof $winstonConsoleTransport,
-      File: typeof $winstonFileTransport,
-      ...
-    },
-    createLogger: <T>($winstonLoggerConfig<T>) => $winstonLogger<T>,
-    Container: typeof $winstonContainer,
-    loggers: $winstonContainer<*>,
-    ...
-  };
-}
diff --git a/flow-typed/npm/worker-threads-pool_vx.x.x.js b/flow-typed/npm/worker-threads-pool_vx.x.x.js
deleted file mode 100644 (file)
index 47fec49..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// flow-typed signature: 6adddf428f4e46e1e3029b27fac03a36
-// flow-typed version: <<STUB>>/worker-threads-pool_v^2.0.0/flow_v0.136.0
-
-/**
- * This is an autogenerated libdef stub for:
- *
- *   'worker-threads-pool'
- *
- * 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 'worker-threads-pool' {
-  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.
- */
-
-
-// Filename aliases
-declare module 'worker-threads-pool/index' {
-  declare module.exports: $Exports<'worker-threads-pool'>;
-}
-declare module 'worker-threads-pool/index.js' {
-  declare module.exports: $Exports<'worker-threads-pool'>;
-}
diff --git a/flow-typed/npm/ws_v7.x.x.js b/flow-typed/npm/ws_v7.x.x.js
deleted file mode 100644 (file)
index a5cafd7..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-// flow-typed signature: cf710812f8fe053ca189786d3fa45067
-// flow-typed version: be32675b14/ws_v7.x.x/flow_>=v0.104.x
-
-declare type ws$PerMessageDeflateOptions = {|
-  serverNoContextTakeover?: boolean,
-  clientNoContextTakeover?: boolean,
-  serverMaxWindowBits?: boolean | number,
-  clientMaxWindowBits?: boolean | number,
-  zlibDeflateOptions?: zlib$options,
-  zlibInflateOptions?: zlib$options,
-  threshold?: number,
-  concurrencyLimit?: number,
-  isServer?: boolean,
-  maxPayload?: number,
-|};
-
-declare class ws$WebSocketServer extends events$EventEmitter {
-  /**
-   * Create a `WebSocketServer` instance.
-   */
-  constructor(
-    options: {|
-      backlog?: number,
-      clientTracking?: boolean,
-      handleProtocols?: () => mixed,
-      host?: string,
-      maxPayload?: number,
-      noServer?: boolean,
-      path?: string,
-      perMessageDeflate?: boolean | ws$PerMessageDeflateOptions,
-      port: number,
-      server?: http$Server | https$Server,
-      verifyClient?: () => mixed,
-    |},
-    callback?: () => mixed
-  ): this;
-  constructor(
-    options: {|
-      backlog?: number,
-      clientTracking?: boolean,
-      handleProtocols?: () => mixed,
-      host?: string,
-      maxPayload?: number,
-      noServer?: boolean,
-      path?: string,
-      perMessageDeflate?: boolean | ws$PerMessageDeflateOptions,
-      port?: number,
-      server: http$Server | https$Server,
-      verifyClient?: () => mixed,
-    |},
-    callback?: () => mixed
-  ): this;
-  constructor(
-    options: {|
-      backlog?: number,
-      clientTracking?: boolean,
-      handleProtocols?: () => mixed,
-      host?: string,
-      maxPayload?: number,
-      noServer: boolean,
-      path?: string,
-      perMessageDeflate?: boolean | ws$PerMessageDeflateOptions,
-      port?: number,
-      server?: http$Server | https$Server,
-      verifyClient?: () => mixed,
-    |},
-    callback?: () => mixed
-  ): this;
-
-  /**
-   * Emitted when the server closes.
-   */
-  on(event: 'close', () => mixed): this;
-
-  /**
-   * Emitted when the handshake is complete.
-   */
-  on(
-    event: 'connection',
-    (socket: ws$WebSocket, request: http$IncomingMessage<>) => mixed
-  ): this;
-
-  /**
-   * Emitted when an error occurs on the underlying server.
-   */
-  on(event: 'error', (error: Error) => mixed): this;
-
-  /**
-   * Emitted before the response headers are written to the socket as part of
-   * the handshake.
-   */
-  on(
-    event: 'headers',
-    (headers: Array<string>, request: http$IncomingMessage<>) => mixed
-  ): this;
-
-  /**
-   * Emitted when the underlying server has been bound.
-   */
-  on(event: 'listening', () => mixed): this;
-
-  /**
-   * Returns the bound address, the address family name, and port of the server
-   * as reported by the operating system if listening on an IP socket.
-   * If the server is listening on a pipe or UNIX domain socket, the name is
-   * returned as a string.
-   */
-  address():
-    | null
-    | string
-    | {| port?: number, family?: string, address?: string |};
-
-  /**
-   * A set that stores all connected clients. Please note that this property is
-   * only added when the `clientTracking` is truthy.
-   */
-  clients: Set<ws$WebSocket>;
-
-  /**
-   * Close the server.
-   */
-  close(callback?: () => mixed): void;
-
-  /**
-   * Handle a HTTP Upgrade request.
-   */
-  handleUpgrade(
-    request: http$IncomingMessage<>,
-    socket: net$Socket,
-    head: Buffer,
-    callback: (?ws$WebSocket) => mixed
-  ): void;
-
-  /**
-   * See if a given request should be handled by this server instance.
-   */
-  shouldHandle(request: http$IncomingMessage<>): boolean;
-}
-
-declare type ws$WebSocketOptions = {
-  followRedirects?: boolean,
-  handshakeTimeout?: number,
-  maxRedirects?: number,
-  perMessageDeflate?: boolean | ws$PerMessageDeflateOptions,
-  protocolVersion?: number,
-  origin?: string,
-  maxPayload?: number,
-  ...requestOptions,
-  agent?: boolean | http$Agent<> | http$Agent<tls$TLSSocket>,
-  createConnection?:
-    | ((options: net$connectOptions, callback?: () => mixed) => net$Socket)
-    | ((options: tls$connectOptions, callback?: () => mixed) => tls$TLSSocket),
-  ...
-};
-
-declare type ws$CloseListener = (code: number, reason: string) => mixed;
-declare type ws$ErrorListener = (error: Error) => mixed;
-declare type ws$MessageListener = (
-  data: string | Buffer | ArrayBuffer | Array<Buffer>
-) => mixed;
-declare type ws$OpenListener = () => mixed;
-declare type ws$PingListener = (Buffer) => mixed;
-declare type ws$PongListener = (Buffer) => mixed;
-declare type ws$UnexpectedResponseListener = (
-  request: http$ClientRequest<>,
-  response: http$IncomingMessage<>
-) => mixed;
-declare type ws$UpgradeListener = (response: http$IncomingMessage<>) => mixed;
-
-declare class ws$WebSocket extends events$EventEmitter {
-  static Server: typeof ws$WebSocketServer;
-
-  static createWebSocketStream: (
-    WebSocket: ws$WebSocket,
-    options?: duplexStreamOptions
-  ) => stream$Duplex;
-
-  static CONNECTING: number;
-  static OPEN: number;
-  static CLOSING: number;
-  static CLOSED: number;
-
-  /**
-   * Create a `WebSocket` instance.
-   */
-  constructor(
-    address: string | URL,
-    protocols?: string | Array<string>,
-    options?: ws$WebSocketOptions
-  ): this;
-  constructor(address: string | URL, options: ws$WebSocketOptions): this;
-
-  /*
-   * Emitted when the connection is closed.
-   */
-  on('close', ws$CloseListener): this;
-
-  /*
-   * Emitted when an error occurs.
-   */
-  on('error', ws$ErrorListener): this;
-
-  /*
-   * Emitted when a message is received from the server.
-   */
-  on('message', ws$MessageListener): this;
-
-  /*
-   * Emitted when the connection is established.
-   */
-  on('open', ws$OpenListener): this;
-
-  /*
-   * Emitted when a ping is received from the server.
-   */
-  on('ping', ws$PingListener): this;
-
-  /*
-   * Emitted when a pong is received from the server.
-   */
-  on('pong', ws$PongListener): this;
-
-  /*
-   * Emitted when the server response is not the expected one,
-   * for example a 401 response.
-   */
-  on('unexpected-response', ws$UnexpectedResponseListener): this;
-
-  /*
-   * Emitted when response headers are received from the server as part of the
-   * handshake.
-   */
-  on('upgrade', ws$UpgradeListener): this;
-
-  /**
-   * Register an event listener emulating the `EventTarget` interface.
-   */
-  addEventListener(
-    type: 'close',
-    listener: ws$CloseListener,
-    options?: {| once?: boolean |}
-  ): this;
-  addEventListener(
-    type: 'error',
-    listener: ws$ErrorListener,
-    options?: {| once?: boolean |}
-  ): this;
-  addEventListener(
-    type: 'message',
-    listener: ws$MessageListener,
-    options?: {| once?: boolean |}
-  ): this;
-  addEventListener(
-    type: 'open',
-    listener: ws$OpenListener,
-    options?: {| once?: boolean |}
-  ): this;
-  addEventListener(
-    type: 'ping',
-    listener: ws$PingListener,
-    options?: {| once?: boolean |}
-  ): this;
-  addEventListener(
-    type: 'pong',
-    listener: ws$PongListener,
-    options?: {| once?: boolean |}
-  ): this;
-  addEventListener(
-    type: 'unexpected-response',
-    ws$UnexpectedResponseListener,
-    options?: {| once?: boolean |}
-  ): this;
-  addEventListener(
-    type: 'upgrade',
-    listener: ws$UpgradeListener,
-    options?: {| once?: boolean |}
-  ): this;
-
-  /**
-   * A string indicating the type of binary data being transmitted by the
-   * connection.
-   */
-  binaryType: string;
-
-  /**
-   * The number of bytes of data that have been queued using calls to send()
-   * but not yet transmitted to the network.
-   */
-  bufferedAmount: number;
-
-  /**
-   * Initiate a closing handshake.
-   */
-  close(code?: number, reason?: string): void;
-
-  /**
-   * The negotiated extensions.
-   */
-  extensions: string;
-
-  /**
-   * Send a ping.
-   */
-  ping(data?: any, mask?: boolean, callback?: () => mixed): void;
-  ping(data: any, callback: () => mixed): void;
-  ping(callback: () => mixed): void;
-
-  /**
-   * Send a pong.
-   */
-  pong(data?: any, mask?: boolean, callback?: () => mixed): void;
-  pong(data: any, callback: () => mixed): void;
-  pong(callback: () => mixed): void;
-
-  /**
-   * The subprotocol selected by the server.
-   */
-  protocol: string;
-
-  /**
-   * The current state of the connection.
-   */
-  readyState: number;
-
-  /**
-   * Removes an event listener emulating the `EventTarget` interface.
-   */
-  removeEventListener(type: 'close', listener: ws$CloseListener): this;
-  removeEventListener(type: 'error', listener: ws$ErrorListener): this;
-  removeEventListener(type: 'message', listener: ws$MessageListener): this;
-  removeEventListener(type: 'open', listener: ws$OpenListener): this;
-  removeEventListener(type: 'ping', listener: ws$PingListener): this;
-  removeEventListener(type: 'pong', listener: ws$PongListener): this;
-  removeEventListener(
-    type: 'unexpected-response',
-    ws$UnexpectedResponseListener
-  ): this;
-  removeEventListener(type: 'upgrade', listener: ws$UpgradeListener): this;
-
-  /**
-   * Send a data message.
-   */
-  send(
-    data?: any,
-    options?: {|
-      compress?: boolean,
-      binary?: boolean,
-      mask?: boolean,
-      fin?: boolean,
-    |},
-    callback?: () => mixed
-  ): void;
-  send(data: any, callback: () => mixed): void;
-
-  /**
-   * Forcibly close the connection.
-   */
-  terminate(): void;
-}
-
-declare module 'ws' {
-  declare module.exports: typeof ws$WebSocket;
-}
index 048369519fff2435fc3321a645a2139c3ac0de98..367acdfde7de6812eb4f6017dcb168c5f5132079 100644 (file)
         "@babel/types": "^7.8.3"
       }
     },
-    "@babel/helper-validator-identifier": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
-      "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
-      "dev": true
-    },
     "@babel/highlight": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
         "turbo-json-parse": "^2.2.0"
       }
     },
-    "@octokit/auth-token": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.2.tgz",
-      "integrity": "sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==",
-      "dev": true,
-      "requires": {
-        "@octokit/types": "^5.0.0"
-      }
-    },
-    "@octokit/endpoint": {
-      "version": "6.0.5",
-      "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.5.tgz",
-      "integrity": "sha512-70K5u6zd45ItOny6aHQAsea8HHQjlQq85yqOMe+Aj8dkhN2qSJ9T+Q3YjUjEYfPRBcuUWNgMn62DQnP/4LAIiQ==",
-      "dev": true,
-      "requires": {
-        "@octokit/types": "^5.0.0",
-        "is-plain-object": "^4.0.0",
-        "universal-user-agent": "^6.0.0"
-      },
-      "dependencies": {
-        "universal-user-agent": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
-          "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
-          "dev": true
-        }
-      }
-    },
-    "@octokit/plugin-paginate-rest": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz",
-      "integrity": "sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==",
+    "@nodelib/fs.scandir": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+      "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
       "dev": true,
       "requires": {
-        "@octokit/types": "^2.0.1"
-      },
-      "dependencies": {
-        "@octokit/types": {
-          "version": "2.16.2",
-          "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz",
-          "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==",
-          "dev": true,
-          "requires": {
-            "@types/node": ">= 8"
-          }
-        }
+        "@nodelib/fs.stat": "2.0.3",
+        "run-parallel": "^1.1.9"
       }
     },
-    "@octokit/plugin-request-log": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz",
-      "integrity": "sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==",
+    "@nodelib/fs.stat": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+      "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
       "dev": true
     },
-    "@octokit/plugin-rest-endpoint-methods": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz",
-      "integrity": "sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==",
-      "dev": true,
-      "requires": {
-        "@octokit/types": "^2.0.1",
-        "deprecation": "^2.3.1"
-      },
-      "dependencies": {
-        "@octokit/types": {
-          "version": "2.16.2",
-          "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz",
-          "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==",
-          "dev": true,
-          "requires": {
-            "@types/node": ">= 8"
-          }
-        }
-      }
-    },
-    "@octokit/request": {
-      "version": "5.4.7",
-      "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.7.tgz",
-      "integrity": "sha512-FN22xUDP0i0uF38YMbOfx6TotpcENP5W8yJM1e/LieGXn6IoRxDMnBf7tx5RKSW4xuUZ/1P04NFZy5iY3Rax1A==",
-      "dev": true,
-      "requires": {
-        "@octokit/endpoint": "^6.0.1",
-        "@octokit/request-error": "^2.0.0",
-        "@octokit/types": "^5.0.0",
-        "deprecation": "^2.0.0",
-        "is-plain-object": "^4.0.0",
-        "node-fetch": "^2.3.0",
-        "once": "^1.4.0",
-        "universal-user-agent": "^6.0.0"
-      },
-      "dependencies": {
-        "@octokit/request-error": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz",
-          "integrity": "sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==",
-          "dev": true,
-          "requires": {
-            "@octokit/types": "^5.0.1",
-            "deprecation": "^2.0.0",
-            "once": "^1.4.0"
-          }
-        },
-        "universal-user-agent": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
-          "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
-          "dev": true
-        }
-      }
-    },
-    "@octokit/request-error": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz",
-      "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==",
-      "dev": true,
-      "requires": {
-        "@octokit/types": "^2.0.0",
-        "deprecation": "^2.0.0",
-        "once": "^1.4.0"
-      },
-      "dependencies": {
-        "@octokit/types": {
-          "version": "2.16.2",
-          "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz",
-          "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==",
-          "dev": true,
-          "requires": {
-            "@types/node": ">= 8"
-          }
-        }
-      }
-    },
-    "@octokit/rest": {
-      "version": "16.43.2",
-      "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.2.tgz",
-      "integrity": "sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==",
-      "dev": true,
-      "requires": {
-        "@octokit/auth-token": "^2.4.0",
-        "@octokit/plugin-paginate-rest": "^1.1.1",
-        "@octokit/plugin-request-log": "^1.0.0",
-        "@octokit/plugin-rest-endpoint-methods": "2.4.0",
-        "@octokit/request": "^5.2.0",
-        "@octokit/request-error": "^1.0.2",
-        "atob-lite": "^2.0.0",
-        "before-after-hook": "^2.0.0",
-        "btoa-lite": "^1.0.0",
-        "deprecation": "^2.0.0",
-        "lodash.get": "^4.4.2",
-        "lodash.set": "^4.3.2",
-        "lodash.uniq": "^4.5.0",
-        "octokit-pagination-methods": "^1.1.0",
-        "once": "^1.4.0",
-        "universal-user-agent": "^4.0.0"
-      }
-    },
-    "@octokit/types": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-5.1.1.tgz",
-      "integrity": "sha512-8LDEbrxJrYiwzBrfZhoMFEq9+1o7Kg4ydiNgZt2DBU6n34iEd37qNqOkawrjJZZ6iUS5IXYf6EmGONn34YLgzw==",
+    "@nodelib/fs.walk": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+      "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
       "dev": true,
       "requires": {
-        "@types/node": ">= 8"
+        "@nodelib/fs.scandir": "2.1.3",
+        "fastq": "^1.6.0"
       }
     },
     "@sindresorhus/is": {
         "@types/webgl2": "0.0.4",
         "node-fetch": "~2.1.2",
         "seedrandom": "2.4.3"
-      },
-      "dependencies": {
-        "node-fetch": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
-          "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=",
-          "dev": true
-        }
-      }
-    },
-    "@types/cacheable-request": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
-      "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
-      "dev": true,
-      "requires": {
-        "@types/http-cache-semantics": "*",
-        "@types/keyv": "*",
-        "@types/node": "*",
-        "@types/responselike": "*"
       }
     },
     "@types/color-name": {
       "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
       "dev": true
     },
-    "@types/http-cache-semantics": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
-      "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==",
+    "@types/json-schema": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+      "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
       "dev": true
     },
-    "@types/keyv": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
-      "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
-      }
-    },
     "@types/node": {
-      "version": "14.0.24",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.24.tgz",
-      "integrity": "sha512-btt/oNOiDWcSuI721MdL8VQGnjsKjlTMdrKyTcLCKeQp/n4AAMFJ961wMbp+09y8WuGPClDEv07RIItdXKIXAA==",
+      "version": "14.14.6",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz",
+      "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==",
       "dev": true
     },
     "@types/offscreencanvas": {
       "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==",
       "dev": true
     },
-    "@types/responselike": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
-      "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
-      }
-    },
     "@types/seedrandom": {
       "version": "2.4.27",
       "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz",
       "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE=",
       "dev": true
     },
+    "@types/uuid": {
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz",
+      "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==",
+      "dev": true
+    },
     "@types/webgl-ext": {
       "version": "0.0.30",
       "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz",
       "integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw==",
       "dev": true
     },
+    "@types/worker-threads-pool": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@types/worker-threads-pool/-/worker-threads-pool-2.0.0.tgz",
+      "integrity": "sha512-VnFtC73JBhQRtamCR4edJWxyZrwvwz6y/Ov4VNQLiirpRUkND7xo0iUNXEZP2mvZuNbvFeXGglTAFZwCDdWMTg==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/ws": {
+      "version": "7.2.9",
+      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.9.tgz",
+      "integrity": "sha512-gmXYAXr7G4BrRMnkGQGkGonc3ArVro9VZd//C1uns/qqsJyl2dxaJdlPMhZbcq5MTxFFC+ttFWtHSfVW5+hlRA==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@typescript-eslint/eslint-plugin": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.6.0.tgz",
+      "integrity": "sha512-1+419X+Ynijytr1iWI+/IcX/kJryc78YNpdaXR1aRO1sU3bC0vZrIAF1tIX7rudVI84W7o7M4zo5p1aVt70fAg==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/experimental-utils": "4.6.0",
+        "@typescript-eslint/scope-manager": "4.6.0",
+        "debug": "^4.1.1",
+        "functional-red-black-tree": "^1.0.1",
+        "regexpp": "^3.0.0",
+        "semver": "^7.3.2",
+        "tsutils": "^3.17.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "7.3.2",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+          "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+          "dev": true
+        }
+      }
+    },
+    "@typescript-eslint/experimental-utils": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.6.0.tgz",
+      "integrity": "sha512-pnh6Beh2/4xjJVNL+keP49DFHk3orDHHFylSp3WEjtgW3y1U+6l+jNnJrGlbs6qhAz5z96aFmmbUyKhunXKvKw==",
+      "dev": true,
+      "requires": {
+        "@types/json-schema": "^7.0.3",
+        "@typescript-eslint/scope-manager": "4.6.0",
+        "@typescript-eslint/types": "4.6.0",
+        "@typescript-eslint/typescript-estree": "4.6.0",
+        "eslint-scope": "^5.0.0",
+        "eslint-utils": "^2.0.0"
+      }
+    },
+    "@typescript-eslint/parser": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.6.0.tgz",
+      "integrity": "sha512-Dj6NJxBhbdbPSZ5DYsQqpR32MwujF772F2H3VojWU6iT4AqL4BKuoNWOPFCoSZvCcADDvQjDpa6OLDAaiZPz2Q==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/scope-manager": "4.6.0",
+        "@typescript-eslint/types": "4.6.0",
+        "@typescript-eslint/typescript-estree": "4.6.0",
+        "debug": "^4.1.1"
+      }
+    },
+    "@typescript-eslint/scope-manager": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.6.0.tgz",
+      "integrity": "sha512-uZx5KvStXP/lwrMrfQQwDNvh2ppiXzz5TmyTVHb+5TfZ3sUP7U1onlz3pjoWrK9konRyFe1czyxObWTly27Ang==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/types": "4.6.0",
+        "@typescript-eslint/visitor-keys": "4.6.0"
+      }
+    },
+    "@typescript-eslint/types": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.6.0.tgz",
+      "integrity": "sha512-5FAgjqH68SfFG4UTtIFv+rqYJg0nLjfkjD0iv+5O27a0xEeNZ5rZNDvFGZDizlCD1Ifj7MAbSW2DPMrf0E9zjA==",
+      "dev": true
+    },
+    "@typescript-eslint/typescript-estree": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.6.0.tgz",
+      "integrity": "sha512-s4Z9qubMrAo/tw0CbN0IN4AtfwuehGXVZM0CHNMdfYMGBDhPdwTEpBrecwhP7dRJu6d9tT9ECYNaWDHvlFSngA==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/types": "4.6.0",
+        "@typescript-eslint/visitor-keys": "4.6.0",
+        "debug": "^4.1.1",
+        "globby": "^11.0.1",
+        "is-glob": "^4.0.1",
+        "lodash": "^4.17.15",
+        "semver": "^7.3.2",
+        "tsutils": "^3.17.1"
+      },
+      "dependencies": {
+        "array-union": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+          "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+          "dev": true
+        },
+        "globby": {
+          "version": "11.0.1",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
+          "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
+          "dev": true,
+          "requires": {
+            "array-union": "^2.1.0",
+            "dir-glob": "^3.0.1",
+            "fast-glob": "^3.1.1",
+            "ignore": "^5.1.4",
+            "merge2": "^1.3.0",
+            "slash": "^3.0.0"
+          }
+        },
+        "ignore": {
+          "version": "5.1.8",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+          "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+          "dev": true
+        },
+        "semver": {
+          "version": "7.3.2",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+          "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+          "dev": true
+        }
+      }
+    },
+    "@typescript-eslint/visitor-keys": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.6.0.tgz",
+      "integrity": "sha512-38Aa9Ztl0XyFPVzmutHXqDMCu15Xx8yKvUo38Gu3GhsuckCh3StPI5t2WIO9LHEsOH7MLmlGfKUisU8eW1Sjhg==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/types": "4.6.0",
+        "eslint-visitor-keys": "^2.0.0"
+      },
+      "dependencies": {
+        "eslint-visitor-keys": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
+          "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
+          "dev": true
+        }
+      }
+    },
     "JSONStream": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
       "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=",
       "dev": true
     },
-    "array-includes": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
-      "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0",
-        "is-string": "^1.0.5"
-      }
-    },
     "array-union": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
       "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
       "dev": true
     },
-    "array.prototype.flat": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz",
-      "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      }
-    },
     "arrify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
       "dev": true
     },
-    "atob-lite": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz",
-      "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=",
-      "dev": true
-    },
     "autocannon": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/autocannon/-/autocannon-4.6.0.tgz",
       "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==",
       "dev": true
     },
-    "babel-eslint": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
-      "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.7.0",
-        "@babel/traverse": "^7.7.0",
-        "@babel/types": "^7.7.0",
-        "eslint-visitor-keys": "^1.0.0",
-        "resolve": "^1.12.0"
-      },
-      "dependencies": {
-        "resolve": {
-          "version": "1.17.0",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
-          "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
-          "dev": true,
-          "requires": {
-            "path-parse": "^1.0.6"
-          }
-        }
-      }
-    },
     "babel-runtime": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
         "tweetnacl": "^0.14.3"
       }
     },
-    "before-after-hook": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz",
-      "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==",
-      "dev": true
-    },
-    "big-integer": {
-      "version": "1.6.48",
-      "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
-      "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==",
-      "dev": true
-    },
-    "binary": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
-      "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
-      "dev": true,
-      "requires": {
-        "buffers": "~0.1.1",
-        "chainsaw": "~0.1.0"
-      }
-    },
     "bit-twiddle": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz",
         }
       }
     },
-    "bluebird": {
-      "version": "3.4.7",
-      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
-      "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=",
-      "dev": true
-    },
     "bn.js": {
       "version": "5.1.3",
       "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
         "concat-map": "0.0.1"
       }
     },
+    "braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dev": true,
+      "requires": {
+        "fill-range": "^7.0.1"
+      }
+    },
     "brfs": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz",
         "pako": "~1.0.5"
       }
     },
-    "btoa-lite": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
-      "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=",
-      "dev": true
-    },
     "buffer": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
       "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
       "dev": true
     },
-    "buffer-indexof-polyfill": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz",
-      "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=",
-      "dev": true
-    },
     "buffer-xor": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
       "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
       "dev": true
     },
-    "buffers": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
-      "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
-      "dev": true
-    },
     "builtin-modules": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
       "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
       "dev": true
     },
-    "cacheable-lookup": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz",
-      "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==",
-      "dev": true,
-      "requires": {
-        "@types/keyv": "^3.1.1",
-        "keyv": "^4.0.0"
-      },
-      "dependencies": {
-        "json-buffer": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
-          "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
-          "dev": true
-        },
-        "keyv": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz",
-          "integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==",
-          "dev": true,
-          "requires": {
-            "json-buffer": "3.0.1"
-          }
-        }
-      }
-    },
     "cacheable-request": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
       "integrity": "sha512-twuUuJRrIrsELHz6foJtZlqrz6FC36zoHZJvvThsrM1UWPKxyoilw1Rka6Hk0AmPFKHKUoGwGfAtvNZNtNZu0g==",
       "dev": true
     },
-    "chainsaw": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
-      "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
-      "dev": true,
-      "requires": {
-        "traverse": ">=0.3.0 <0.4"
-      }
-    },
     "chalk": {
       "version": "2.4.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
       "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
       "dev": true
     },
-    "charenc": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
-      "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
-      "dev": true
-    },
     "chownr": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
       "dev": true
     },
     "cliui": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
-      "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+      "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
       "dev": true,
       "requires": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0",
-        "wrap-ansi": "^6.2.0"
+        "string-width": "^3.1.0",
+        "strip-ansi": "^5.2.0",
+        "wrap-ansi": "^5.1.0"
       },
       "dependencies": {
         "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
-          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
-          "dev": true,
-          "requires": {
-            "@types/color-name": "^1.1.1",
-            "color-convert": "^2.0.1"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true
-        },
-        "emoji-regex": {
-          "version": "8.0.0",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-          "dev": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
         "string-width": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
-          "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
           "dev": true,
           "requires": {
-            "emoji-regex": "^8.0.0",
-            "is-fullwidth-code-point": "^3.0.0",
-            "strip-ansi": "^6.0.0"
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
           }
         },
         "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        },
-        "wrap-ansi": {
-          "version": "6.2.0",
-          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
-          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
           "dev": true,
           "requires": {
-            "ansi-styles": "^4.0.0",
-            "string-width": "^4.1.0",
-            "strip-ansi": "^6.0.0"
+            "ansi-regex": "^4.1.0"
           }
         }
       }
       "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
       "dev": true
     },
-    "contains-path": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
-      "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
-      "dev": true
-    },
     "convert-source-map": {
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
       "integrity": "sha512-uAVe/bgNHlPdP1VE4Sk08u9pAJ7o1x/tVQtX77T5zlhYhuwOWtVkPBEtHdvF5cq48VzeCG5i1zN4dQc8pwLYrw==",
       "dev": true
     },
+    "cross-env": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz",
+      "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^7.0.1"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+          "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
     "cross-spawn": {
       "version": "6.0.5",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
         "which": "^1.2.8"
       }
     },
-    "crypt": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
-      "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
-      "dev": true
-    },
     "crypto-browserify": {
       "version": "3.12.0",
       "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
       "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
       "dev": true
     },
-    "define-properties": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-      "dev": true,
-      "requires": {
-        "object-keys": "^1.0.12"
-      }
-    },
     "defined": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
           "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "cliui": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-          "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
-          "dev": true,
-          "requires": {
-            "string-width": "^3.1.0",
-            "strip-ansi": "^5.2.0",
-            "wrap-ansi": "^5.1.0"
-          }
-        },
         "find-up": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
       "integrity": "sha512-ZGDXefq1xknT292LnorMY5s8UVU08/WKdzDZCUT6t9JzsiMSP4uzUhgpqugffNVcT5WC6wMBiSQ+LFjlv3v7iQ==",
       "dev": true
     },
-    "deprecation": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
-      "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
-      "dev": true
-    },
     "deps-regex": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/deps-regex/-/deps-regex-0.1.4.tgz",
         }
       }
     },
+    "dir-glob": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+      "dev": true,
+      "requires": {
+        "path-type": "^4.0.0"
+      }
+    },
     "distributions": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/distributions/-/distributions-2.1.0.tgz",
         "stackframe": "^0.3.1"
       }
     },
-    "es-abstract": {
-      "version": "1.17.5",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
-      "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
-      "dev": true,
-      "requires": {
-        "es-to-primitive": "^1.2.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.1",
-        "is-callable": "^1.1.5",
-        "is-regex": "^1.0.5",
-        "object-inspect": "^1.7.0",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.0",
-        "string.prototype.trimleft": "^2.1.1",
-        "string.prototype.trimright": "^2.1.1"
-      }
-    },
-    "es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-      "dev": true,
-      "requires": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      }
-    },
     "es5-ext": {
       "version": "0.10.53",
       "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
         }
       }
     },
-    "eslint-config-esnext": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-esnext/-/eslint-config-esnext-4.1.0.tgz",
-      "integrity": "sha512-GhfVEXdqYKEIIj7j+Fw2SQdL9qyZMekgXfq6PyXM66cQw0B435ddjz3P3kxOBVihMRJ0xGYjosaveQz5Y6z0uA==",
+    "eslint-scope": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
+      "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
+      "dev": true,
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "eslint-utils": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+      "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+      "dev": true,
+      "requires": {
+        "eslint-visitor-keys": "^1.1.0"
+      }
+    },
+    "eslint-visitor-keys": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+      "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+      "dev": true
+    },
+    "espree": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
+      "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==",
       "dev": true,
       "requires": {
-        "babel-eslint": "^10.0.1",
-        "eslint": "^6.8.0",
-        "eslint-plugin-babel": "^5.2.1",
-        "eslint-plugin-import": "^2.14.0"
+        "acorn": "^7.4.0",
+        "acorn-jsx": "^5.2.0",
+        "eslint-visitor-keys": "^1.3.0"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "eslint": {
-          "version": "6.8.0",
-          "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
-          "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
-          "dev": true,
-          "requires": {
-            "@babel/code-frame": "^7.0.0",
-            "ajv": "^6.10.0",
-            "chalk": "^2.1.0",
-            "cross-spawn": "^6.0.5",
-            "debug": "^4.0.1",
-            "doctrine": "^3.0.0",
-            "eslint-scope": "^5.0.0",
-            "eslint-utils": "^1.4.3",
-            "eslint-visitor-keys": "^1.1.0",
-            "espree": "^6.1.2",
-            "esquery": "^1.0.1",
-            "esutils": "^2.0.2",
-            "file-entry-cache": "^5.0.1",
-            "functional-red-black-tree": "^1.0.1",
-            "glob-parent": "^5.0.0",
-            "globals": "^12.1.0",
-            "ignore": "^4.0.6",
-            "import-fresh": "^3.0.0",
-            "imurmurhash": "^0.1.4",
-            "inquirer": "^7.0.0",
-            "is-glob": "^4.0.0",
-            "js-yaml": "^3.13.1",
-            "json-stable-stringify-without-jsonify": "^1.0.1",
-            "levn": "^0.3.0",
-            "lodash": "^4.17.14",
-            "minimatch": "^3.0.4",
-            "mkdirp": "^0.5.1",
-            "natural-compare": "^1.4.0",
-            "optionator": "^0.8.3",
-            "progress": "^2.0.0",
-            "regexpp": "^2.0.1",
-            "semver": "^6.1.2",
-            "strip-ansi": "^5.2.0",
-            "strip-json-comments": "^3.0.1",
-            "table": "^5.2.3",
-            "text-table": "^0.2.0",
-            "v8-compile-cache": "^2.0.3"
-          }
-        },
-        "eslint-utils": {
-          "version": "1.4.3",
-          "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
-          "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
-          "dev": true,
-          "requires": {
-            "eslint-visitor-keys": "^1.1.0"
-          }
-        },
-        "espree": {
-          "version": "6.2.1",
-          "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
-          "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
-          "dev": true,
-          "requires": {
-            "acorn": "^7.1.1",
-            "acorn-jsx": "^5.2.0",
-            "eslint-visitor-keys": "^1.1.0"
-          }
-        },
-        "globals": {
-          "version": "12.4.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
-          "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
-          "dev": true,
-          "requires": {
-            "type-fest": "^0.8.1"
-          }
-        },
-        "regexpp": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-          "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
-          "dev": true
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        },
-        "strip-json-comments": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
-          "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==",
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
           "dev": true
         },
-        "type-fest": {
-          "version": "0.8.1",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-          "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+        "eslint-visitor-keys": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
           "dev": true
         }
       }
     },
-    "eslint-config-google": {
-      "version": "0.14.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz",
-      "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==",
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
       "dev": true
     },
-    "eslint-config-node": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-node/-/eslint-config-node-4.1.0.tgz",
-      "integrity": "sha512-Wz17xV5O2WFG8fGdMYEBdbiL6TL7YNJSJvSX9V4sXQownewfYmoqlly7wxqLkOUv/57pq6LnnotMiQQrrPjCqQ==",
+    "esquery": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
+      "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
       "dev": true,
       "requires": {
-        "eslint": "^6.8.0",
-        "eslint-config-esnext": "^4.1.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-          "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-          "dev": true
-        },
-        "eslint": {
-          "version": "6.8.0",
-          "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
-          "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
-          "dev": true,
-          "requires": {
-            "@babel/code-frame": "^7.0.0",
-            "ajv": "^6.10.0",
-            "chalk": "^2.1.0",
-            "cross-spawn": "^6.0.5",
-            "debug": "^4.0.1",
-            "doctrine": "^3.0.0",
-            "eslint-scope": "^5.0.0",
-            "eslint-utils": "^1.4.3",
-            "eslint-visitor-keys": "^1.1.0",
-            "espree": "^6.1.2",
-            "esquery": "^1.0.1",
-            "esutils": "^2.0.2",
-            "file-entry-cache": "^5.0.1",
-            "functional-red-black-tree": "^1.0.1",
-            "glob-parent": "^5.0.0",
-            "globals": "^12.1.0",
-            "ignore": "^4.0.6",
-            "import-fresh": "^3.0.0",
-            "imurmurhash": "^0.1.4",
-            "inquirer": "^7.0.0",
-            "is-glob": "^4.0.0",
-            "js-yaml": "^3.13.1",
-            "json-stable-stringify-without-jsonify": "^1.0.1",
-            "levn": "^0.3.0",
-            "lodash": "^4.17.14",
-            "minimatch": "^3.0.4",
-            "mkdirp": "^0.5.1",
-            "natural-compare": "^1.4.0",
-            "optionator": "^0.8.3",
-            "progress": "^2.0.0",
-            "regexpp": "^2.0.1",
-            "semver": "^6.1.2",
-            "strip-ansi": "^5.2.0",
-            "strip-json-comments": "^3.0.1",
-            "table": "^5.2.3",
-            "text-table": "^0.2.0",
-            "v8-compile-cache": "^2.0.3"
-          }
-        },
-        "eslint-utils": {
-          "version": "1.4.3",
-          "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
-          "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
-          "dev": true,
-          "requires": {
-            "eslint-visitor-keys": "^1.1.0"
-          }
-        },
-        "espree": {
-          "version": "6.2.1",
-          "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
-          "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
-          "dev": true,
-          "requires": {
-            "acorn": "^7.1.1",
-            "acorn-jsx": "^5.2.0",
-            "eslint-visitor-keys": "^1.1.0"
-          }
-        },
-        "globals": {
-          "version": "12.4.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
-          "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
-          "dev": true,
-          "requires": {
-            "type-fest": "^0.8.1"
-          }
-        },
-        "regexpp": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-          "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
-          "dev": true
-        },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        },
-        "strip-json-comments": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
-          "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==",
-          "dev": true
-        },
-        "type-fest": {
-          "version": "0.8.1",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-          "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
-          "dev": true
-        }
-      }
-    },
-    "eslint-import-resolver-node": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz",
-      "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==",
-      "dev": true,
-      "requires": {
-        "debug": "^2.6.9",
-        "resolve": "^1.13.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
-        "resolve": {
-          "version": "1.17.0",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
-          "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
-          "dev": true,
-          "requires": {
-            "path-parse": "^1.0.6"
-          }
-        }
-      }
-    },
-    "eslint-module-utils": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
-      "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==",
-      "dev": true,
-      "requires": {
-        "debug": "^2.6.9",
-        "pkg-dir": "^2.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        }
-      }
-    },
-    "eslint-plugin-babel": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz",
-      "integrity": "sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w==",
-      "dev": true,
-      "requires": {
-        "eslint-rule-composer": "^0.3.0"
-      }
-    },
-    "eslint-plugin-flowtype": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.2.0.tgz",
-      "integrity": "sha512-z7ULdTxuhlRJcEe1MVljePXricuPOrsWfScRXFhNzVD5dmTHWjIF57AxD0e7AbEoLSbjSsaA5S+hCg43WvpXJQ==",
-      "dev": true,
-      "requires": {
-        "lodash": "^4.17.15",
-        "string-natural-compare": "^3.0.1"
-      }
-    },
-    "eslint-plugin-import": {
-      "version": "2.20.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz",
-      "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==",
-      "dev": true,
-      "requires": {
-        "array-includes": "^3.0.3",
-        "array.prototype.flat": "^1.2.1",
-        "contains-path": "^0.1.0",
-        "debug": "^2.6.9",
-        "doctrine": "1.5.0",
-        "eslint-import-resolver-node": "^0.3.2",
-        "eslint-module-utils": "^2.4.1",
-        "has": "^1.0.3",
-        "minimatch": "^3.0.4",
-        "object.values": "^1.1.0",
-        "read-pkg-up": "^2.0.0",
-        "resolve": "^1.12.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "doctrine": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
-          "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
-          "dev": true,
-          "requires": {
-            "esutils": "^2.0.2",
-            "isarray": "^1.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        },
-        "resolve": {
-          "version": "1.17.0",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
-          "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
-          "dev": true,
-          "requires": {
-            "path-parse": "^1.0.6"
-          }
-        }
-      }
-    },
-    "eslint-rule-composer": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz",
-      "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==",
-      "dev": true
-    },
-    "eslint-scope": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
-      "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
-      "dev": true,
-      "requires": {
-        "esrecurse": "^4.1.0",
-        "estraverse": "^4.1.1"
-      }
-    },
-    "eslint-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
-      "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
-      "dev": true,
-      "requires": {
-        "eslint-visitor-keys": "^1.1.0"
-      }
-    },
-    "eslint-visitor-keys": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
-      "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
-      "dev": true
-    },
-    "espree": {
-      "version": "7.3.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
-      "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==",
-      "dev": true,
-      "requires": {
-        "acorn": "^7.4.0",
-        "acorn-jsx": "^5.2.0",
-        "eslint-visitor-keys": "^1.3.0"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "7.4.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
-          "dev": true
-        },
-        "eslint-visitor-keys": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-          "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
-          "dev": true
-        }
-      }
-    },
-    "esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-      "dev": true
-    },
-    "esquery": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
-      "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
-      "dev": true,
-      "requires": {
-        "estraverse": "^5.1.0"
+        "estraverse": "^5.1.0"
       },
       "dependencies": {
         "estraverse": {
       "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
       "dev": true
     },
+    "fast-glob": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+      "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.0",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.2",
+        "picomatch": "^2.2.1"
+      }
+    },
     "fast-json-stable-stringify": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
       "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
       "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
     },
+    "fastq": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz",
+      "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==",
+      "dev": true,
+      "requires": {
+        "reusify": "^1.0.4"
+      }
+    },
     "fecha": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz",
         "flat-cache": "^2.0.1"
       }
     },
+    "fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dev": true,
+      "requires": {
+        "to-regex-range": "^5.0.1"
+      }
+    },
     "find-parent-dir": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
       "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
       "dev": true
     },
-    "flow-bin": {
-      "version": "0.137.0",
-      "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.137.0.tgz",
-      "integrity": "sha512-ytwUn68fPKK/VWVpCxJ4KNeNIjCC/uX0Ll6Z1E98sOXfMknB000WtgQjKYDdO6tOR8mvXBE0adzjgCrChVympw==",
-      "dev": true
-    },
-    "flow-typed": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/flow-typed/-/flow-typed-3.2.1.tgz",
-      "integrity": "sha512-vWQLZmndgdEHdy1TKTeI1DkLLa4078p6vhcKz/IZ6fcpaWLElTSG7rZi3BxlcSWfEQPxsymuSBNwAT7dCpXm6g==",
-      "dev": true,
-      "requires": {
-        "@octokit/rest": "^16.43.1",
-        "colors": "^1.4.0",
-        "flowgen": "^1.10.0",
-        "fs-extra": "^8.1.0",
-        "glob": "^7.1.6",
-        "got": "^10.5.7",
-        "md5": "^2.2.1",
-        "mkdirp": "^1.0.3",
-        "prettier": "^1.19.1",
-        "rimraf": "^3.0.2",
-        "semver": "^7.3.2",
-        "table": "^5.4.6",
-        "through": "^2.3.8",
-        "unzipper": "^0.10.8",
-        "which": "^2.0.2",
-        "yargs": "^15.1.0"
-      },
-      "dependencies": {
-        "@sindresorhus/is": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz",
-          "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==",
-          "dev": true
-        },
-        "@szmarczak/http-timer": {
-          "version": "4.0.5",
-          "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
-          "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
-          "dev": true,
-          "requires": {
-            "defer-to-connect": "^2.0.0"
-          }
-        },
-        "ansi-regex": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
-          "dev": true
-        },
-        "cacheable-request": {
-          "version": "7.0.1",
-          "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz",
-          "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==",
-          "dev": true,
-          "requires": {
-            "clone-response": "^1.0.2",
-            "get-stream": "^5.1.0",
-            "http-cache-semantics": "^4.0.0",
-            "keyv": "^4.0.0",
-            "lowercase-keys": "^2.0.0",
-            "normalize-url": "^4.1.0",
-            "responselike": "^2.0.0"
-          }
-        },
-        "colors": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
-          "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
-          "dev": true
-        },
-        "decompress-response": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz",
-          "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==",
-          "dev": true,
-          "requires": {
-            "mimic-response": "^2.0.0"
-          }
-        },
-        "defer-to-connect": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz",
-          "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==",
-          "dev": true
-        },
-        "emoji-regex": {
-          "version": "8.0.0",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-          "dev": true
-        },
-        "find-up": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^5.0.0",
-            "path-exists": "^4.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
-          "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "got": {
-          "version": "10.7.0",
-          "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz",
-          "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==",
-          "dev": true,
-          "requires": {
-            "@sindresorhus/is": "^2.0.0",
-            "@szmarczak/http-timer": "^4.0.0",
-            "@types/cacheable-request": "^6.0.1",
-            "cacheable-lookup": "^2.0.0",
-            "cacheable-request": "^7.0.1",
-            "decompress-response": "^5.0.0",
-            "duplexer3": "^0.1.4",
-            "get-stream": "^5.0.0",
-            "lowercase-keys": "^2.0.0",
-            "mimic-response": "^2.1.0",
-            "p-cancelable": "^2.0.0",
-            "p-event": "^4.0.0",
-            "responselike": "^2.0.0",
-            "to-readable-stream": "^2.0.0",
-            "type-fest": "^0.10.0"
-          }
-        },
-        "is-fullwidth-code-point": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-          "dev": true
-        },
-        "json-buffer": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
-          "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
-          "dev": true
-        },
-        "keyv": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz",
-          "integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==",
-          "dev": true,
-          "requires": {
-            "json-buffer": "3.0.1"
-          }
-        },
-        "locate-path": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^4.1.0"
-          }
-        },
-        "lowercase-keys": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
-          "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
-          "dev": true
-        },
-        "mimic-response": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
-          "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
-          "dev": true
-        },
-        "mkdirp": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-          "dev": true
-        },
-        "p-cancelable": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
-          "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==",
-          "dev": true
-        },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^2.2.0"
-          }
-        },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-          "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-          "dev": true
-        },
-        "path-exists": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-          "dev": true
-        },
-        "responselike": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
-          "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
-          "dev": true,
-          "requires": {
-            "lowercase-keys": "^2.0.0"
-          }
-        },
-        "rimraf": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-          "dev": true,
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        },
-        "semver": {
-          "version": "7.3.2",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
-          "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
-          "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^8.0.0",
-            "is-fullwidth-code-point": "^3.0.0",
-            "strip-ansi": "^6.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
-          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.0"
-          }
-        },
-        "to-readable-stream": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz",
-          "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==",
-          "dev": true
-        },
-        "type-fest": {
-          "version": "0.10.0",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz",
-          "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==",
-          "dev": true
-        },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        },
-        "yargs": {
-          "version": "15.4.1",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
-          "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
-          "dev": true,
-          "requires": {
-            "cliui": "^6.0.0",
-            "decamelize": "^1.2.0",
-            "find-up": "^4.1.0",
-            "get-caller-file": "^2.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^2.0.0",
-            "set-blocking": "^2.0.0",
-            "string-width": "^4.2.0",
-            "which-module": "^2.0.0",
-            "y18n": "^4.0.0",
-            "yargs-parser": "^18.1.2"
-          }
-        },
-        "yargs-parser": {
-          "version": "18.1.3",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
-          "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
-          "dev": true,
-          "requires": {
-            "camelcase": "^5.0.0",
-            "decamelize": "^1.2.0"
-          }
-        }
-      }
-    },
-    "flowgen": {
-      "version": "1.11.0",
-      "resolved": "https://registry.npmjs.org/flowgen/-/flowgen-1.11.0.tgz",
-      "integrity": "sha512-WpoBjzcZadnAw5FatlUbvFWUWXkI2/LjrwTl5fl3MVDh+KdvYgFzgRXDDKH/O2uUlwjfpveiJJJx8TwL7Se84A==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.8.3",
-        "@babel/highlight": "^7.9.0",
-        "commander": "^5.1.0",
-        "lodash": "^4.17.15",
-        "prettier": "^2.0.5",
-        "shelljs": "^0.8.4",
-        "typescript": "^3.4",
-        "typescript-compiler": "^1.4.1-2"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-          "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
-          "dev": true,
-          "requires": {
-            "@babel/highlight": "^7.10.4"
-          }
-        },
-        "@babel/highlight": {
-          "version": "7.10.4",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-          "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.10.4",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "commander": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
-          "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
-          "dev": true
-        },
-        "prettier": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz",
-          "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==",
-          "dev": true
-        }
-      }
-    },
     "fn.name": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
       "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
       "dev": true
     },
-    "fs-extra": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
-      "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.2.0",
-        "jsonfile": "^4.0.0",
-        "universalify": "^0.1.0"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.4",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
-          "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
-          "dev": true
-        }
-      }
-    },
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
       "dev": true
     },
-    "fstream": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
-      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "inherits": "~2.0.0",
-        "mkdirp": ">=0.5 0",
-        "rimraf": "2"
-      }
-    },
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
     "graceful-fs": {
       "version": "4.1.15",
       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
-      "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
-      "dev": true
+      "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
     },
     "har-schema": {
       "version": "2.0.0",
       "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
       "dev": true
     },
-    "has-symbols": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
-      "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
-      "dev": true
-    },
     "has-unicode": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
         }
       }
     },
-    "interpret": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
-      "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
-      "dev": true
-    },
     "iota-array": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
       "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
       "dev": true
     },
-    "is-callable": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
-      "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
-      "dev": true
-    },
     "is-ci": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
         "ci-info": "^1.5.0"
       }
     },
-    "is-date-object": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
-      "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
-      "dev": true
-    },
     "is-docker": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
       "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
       "dev": true
     },
+    "is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true
+    },
     "is-obj": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
         "path-is-inside": "^1.0.1"
       }
     },
-    "is-plain-object": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-4.1.0.tgz",
-      "integrity": "sha512-1N1OpoS8S4Ua+FsH6Mhvgaj0di3uRXgulcv2dnFu2J/WcEsDNbBoiUX6mYmhQ2cAzZ+B/lTJtX1qUSL5RwsGug==",
-      "dev": true
-    },
     "is-property": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
       "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
       "dev": true
     },
-    "is-regex": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
-      "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.3"
-      }
-    },
     "is-retry-allowed": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
       "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
       "dev": true
     },
-    "is-string": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
-      "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
-      "dev": true
-    },
-    "is-symbol": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
-      "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
-      "dev": true,
-      "requires": {
-        "has-symbols": "^1.0.1"
-      }
-    },
     "is-typedarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
     "is-utf8": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-      "dev": true
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
     },
     "is-windows": {
       "version": "1.0.2",
       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
       "dev": true
     },
-    "jsonfile": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
-      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.6"
-      }
-    },
     "jsonify": {
       "version": "0.0.0",
       "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
         "type-check": "~0.3.2"
       }
     },
-    "listenercount": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
-      "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=",
-      "dev": true
-    },
     "load-json-file": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
-      "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.1.2",
         "parse-json": "^2.2.0",
         "pify": "^2.0.0",
-        "strip-bom": "^3.0.0"
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
+      },
+      "dependencies": {
+        "strip-bom": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+          "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+          "dev": true,
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        }
       }
     },
     "load-yaml-file": {
       "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
       "dev": true
     },
-    "lodash.get": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
-      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
-      "dev": true
-    },
     "lodash.includes": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
       "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=",
       "dev": true
     },
-    "lodash.set": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
-      "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=",
-      "dev": true
-    },
     "lodash.toarray": {
       "version": "4.4.0",
       "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
       "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=",
       "dev": true
     },
-    "lodash.uniq": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
-      "dev": true
-    },
     "log-symbols": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
       "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
       "dev": true
     },
-    "md5": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
-      "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
-      "dev": true,
-      "requires": {
-        "charenc": "~0.0.1",
-        "crypt": "~0.0.1",
-        "is-buffer": "~1.1.1"
-      }
-    },
     "md5.js": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
           "version": "1.1.2",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "dev": true,
           "requires": {
             "path-exists": "^2.0.0",
             "pinkie-promise": "^2.0.0"
           }
         },
-        "load-json-file": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
-          "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "parse-json": "^2.2.0",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0",
-            "strip-bom": "^2.0.0"
-          }
-        },
         "path-exists": {
           "version": "2.1.0",
           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
           "requires": {
             "pinkie-promise": "^2.0.0"
           }
           "version": "1.1.0",
           "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
           "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-          "dev": true,
           "requires": {
             "graceful-fs": "^4.1.2",
             "pify": "^2.0.0",
             "pinkie-promise": "^2.0.0"
           }
         },
-        "read-pkg": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-          "dev": true,
-          "requires": {
-            "load-json-file": "^1.0.0",
-            "normalize-package-data": "^2.3.2",
-            "path-type": "^1.0.0"
-          }
-        },
-        "read-pkg-up": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-          "dev": true,
-          "requires": {
-            "find-up": "^1.0.0",
-            "read-pkg": "^1.0.0"
-          }
-        },
         "strip-bom": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
           "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-          "dev": true,
           "requires": {
             "is-utf8": "^0.2.0"
           }
         "source-map": "^0.5.6"
       }
     },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+      "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+      "dev": true,
+      "requires": {
+        "braces": "^3.0.1",
+        "picomatch": "^2.0.5"
+      }
+    },
     "miller-rabin": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
       }
     },
     "node-fetch": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
-      "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
+      "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=",
       "dev": true
     },
     "node-sass-tilde-importer": {
           "version": "1.1.2",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "dev": true,
           "requires": {
             "path-exists": "^2.0.0",
             "pinkie-promise": "^2.0.0"
           "version": "2.1.0",
           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
           "requires": {
             "pinkie-promise": "^2.0.0"
           }
           "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=",
           "dev": true
         },
-        "pkg-dir": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
-          "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
-          "dev": true,
-          "requires": {
-            "find-up": "^1.0.0"
-          }
-        },
         "restore-cursor": {
           "version": "1.0.1",
           "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
       "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
       "dev": true
     },
-    "object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true
-    },
-    "object.assign": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
-      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.2",
-        "function-bind": "^1.1.1",
-        "has-symbols": "^1.0.0",
-        "object-keys": "^1.0.11"
-      }
-    },
-    "object.values": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
-      "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3"
-      }
-    },
-    "octokit-pagination-methods": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz",
-      "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==",
-      "dev": true
-    },
     "on-net-listen": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/on-net-listen/-/on-net-listen-1.1.2.tgz",
       "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
       "dev": true
     },
-    "p-event": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
-      "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
-      "dev": true,
-      "requires": {
-        "p-timeout": "^3.1.0"
-      }
-    },
     "p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
         "p-limit": "^1.1.0"
       }
     },
-    "p-timeout": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
-      "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
-      "dev": true,
-      "requires": {
-        "p-finally": "^1.0.0"
-      }
-    },
     "p-try": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
       "dev": true
     },
     "path-type": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
-      "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
-      "dev": true,
-      "requires": {
-        "pify": "^2.0.0"
-      }
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true
     },
     "pbkdf2": {
       "version": "3.1.1",
       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
       "dev": true
     },
+    "picomatch": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+      "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+      "dev": true
+    },
     "pify": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-      "dev": true
+      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
     },
     "pinkie": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
-      "dev": true
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
     },
     "pinkie-promise": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
       "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
-      "dev": true,
       "requires": {
         "pinkie": "^2.0.0"
       }
     },
     "pkg-dir": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
-      "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+      "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
       "dev": true,
       "requires": {
-        "find-up": "^2.1.0"
+        "find-up": "^1.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+          "dev": true,
+          "requires": {
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+          "dev": true,
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        }
       }
     },
     "pkg-up": {
       "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
       "dev": true
     },
-    "prettier": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
-      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
-      "dev": true
-    },
     "pretty-bytes": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz",
       }
     },
     "read-pkg": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
-      "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
       "dev": true,
       "requires": {
-        "load-json-file": "^2.0.0",
+        "load-json-file": "^1.0.0",
         "normalize-package-data": "^2.3.2",
-        "path-type": "^2.0.0"
+        "path-type": "^1.0.0"
+      },
+      "dependencies": {
+        "path-type": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        }
       }
     },
     "read-pkg-up": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
-      "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
       "dev": true,
       "requires": {
-        "find-up": "^2.0.0",
-        "read-pkg": "^2.0.0"
+        "find-up": "^1.0.0",
+        "read-pkg": "^1.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+          "dev": true,
+          "requires": {
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+          "dev": true,
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        }
       }
     },
     "readable-stream": {
         }
       }
     },
-    "rechoir": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
-      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
-      "dev": true,
-      "requires": {
-        "resolve": "^1.1.6"
-      }
-    },
     "redent": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
       "integrity": "sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==",
       "dev": true
     },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true
+    },
     "rimraf": {
       "version": "2.6.3",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
       "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
       "dev": true
     },
+    "run-parallel": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz",
+      "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==",
+      "dev": true
+    },
     "rx-lite": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
       "dev": true,
       "requires": {
         "tslib": "^1.9.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.14.1",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+          "dev": true
+        }
       }
     },
     "safe-buffer": {
       "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
       "dev": true
     },
-    "setimmediate": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
-      "dev": true
-    },
     "sha.js": {
       "version": "2.4.11",
       "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
       "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
       "dev": true
     },
-    "shelljs": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz",
-      "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==",
-      "dev": true,
-      "requires": {
-        "glob": "^7.0.0",
-        "interpret": "^1.0.0",
-        "rechoir": "^0.6.2"
-      }
-    },
     "showdown": {
       "version": "1.9.1",
       "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.9.1.tgz",
       "integrity": "sha512-KPUi1ZqLocV64n0AuV+g4VDjAM+tEEY66nUd+rYaVBHIfeheGGUvIxe9bf7Mpc1PonDTVW2uRr9nigQa9odvuA==",
       "dev": true
     },
+    "slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true
+    },
     "slice-ansi": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
         "readable-stream": "2"
       }
     },
-    "string-natural-compare": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz",
-      "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==",
-      "dev": true
-    },
     "string-width": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
         "strip-ansi": "^4.0.0"
       }
     },
-    "string.prototype.trimend": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
-      "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      }
-    },
-    "string.prototype.trimleft": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
-      "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5",
-        "string.prototype.trimstart": "^1.0.0"
-      }
-    },
-    "string.prototype.trimright": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
-      "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5",
-        "string.prototype.trimend": "^1.0.0"
-      }
-    },
-    "string.prototype.trimstart": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
-      "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      }
-    },
     "string_decoder": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
       "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
       "dev": true
     },
+    "to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
+      "requires": {
+        "is-number": "^7.0.0"
+      }
+    },
     "toggle-selection": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
         }
       }
     },
-    "traverse": {
-      "version": "0.3.9",
-      "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
-      "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
-      "dev": true
-    },
     "trim-newlines": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
       "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
     },
     "tslib": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
-      "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
-      "dev": true
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
+      "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
+    },
+    "tsutils": {
+      "version": "3.17.1",
+      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
+      "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.8.1"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "1.14.1",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+          "dev": true
+        }
+      }
     },
     "ttest": {
       "version": "2.1.1",
       }
     },
     "typescript": {
-      "version": "3.9.7",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz",
-      "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==",
-      "dev": true
-    },
-    "typescript-compiler": {
-      "version": "1.4.1-2",
-      "resolved": "https://registry.npmjs.org/typescript-compiler/-/typescript-compiler-1.4.1-2.tgz",
-      "integrity": "sha1-uk99si2RU0oZKdkACdzhYety/T8=",
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz",
+      "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==",
       "dev": true
     },
     "ultron": {
         "crypto-random-string": "^1.0.0"
       }
     },
-    "universal-user-agent": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz",
-      "integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==",
-      "dev": true,
-      "requires": {
-        "os-name": "^3.1.0"
-      }
-    },
-    "universalify": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
-      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
-      "dev": true
-    },
     "unzip-response": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
       "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
       "dev": true
     },
-    "unzipper": {
-      "version": "0.10.11",
-      "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz",
-      "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==",
-      "dev": true,
-      "requires": {
-        "big-integer": "^1.6.17",
-        "binary": "~0.3.0",
-        "bluebird": "~3.4.1",
-        "buffer-indexof-polyfill": "~1.0.0",
-        "duplexer2": "~0.1.4",
-        "fstream": "^1.0.12",
-        "graceful-fs": "^4.2.2",
-        "listenercount": "~1.0.1",
-        "readable-stream": "~2.3.6",
-        "setimmediate": "~1.0.4"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.2.4",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
-          "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
-          "dev": true
-        }
-      }
-    },
     "update-notifier": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
           "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
           "dev": true
         },
-        "cliui": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-          "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
-          "dev": true,
-          "requires": {
-            "string-width": "^3.1.0",
-            "strip-ansi": "^5.2.0",
-            "wrap-ansi": "^5.1.0"
-          }
-        },
         "find-up": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
index f3f85574a63ce23e4fb30cf10391c90c0c5698c0..c1dbb16b8930249f2a0e9b7cc0b9e0fe99ca87b2 100644 (file)
@@ -4,7 +4,6 @@
   "engines": {
     "node": "14.x.x"
   },
-  "type": "module",
   "repository": {
     "type": "git",
     "url": "https://github.com/LucasBrazi06/ev-simulator.git"
       "url": "http://www.apache.org/licenses/LICENSE-2.0"
     }
   ],
-  "main": "src/start.js",
+  "main": "dist/start.js",
   "scripts": {
-    "start": "node src/start.js",
-    "start:debug": "node --inspect src/start.js",
-    "start:prof": "node --prof src/start.js",
-    "start:doctorprof": "clinic doctor -- node src/start.js",
-    "start:flameprof": "clinic flame -- node src/start.js",
-    "start:bubbleprof": "clinic bubbleprof -- node src/start.js",
-    "lint": "eslint src",
-    "lint:fix": "eslint --fix src",
-    "flow": "flow",
-    "flow:check": "flow check src",
-    "flow:deps": "flow-typed install",
-    "test": "echo \"Error: no test specified\" && exit 1",
+    "start": "node dist/start.js",
+    "prestart": "npm run build",
+    "start:debug": "node --inspect dist/start.js",
+    "start:prof": "node --prof dist/start.js",
+    "start:doctorprof": "clinic doctor -- node dist/start.js",
+    "start:flameprof": "clinic flame -- node dist/start.js",
+    "start:bubbleprof": "clinic bubbleprof -- node dist/start.js",
+    "build": "npm run tsc",
+    "lint": "cross-env TIMING=1 eslint --ext .js,.ts src",
+    "lint:fix": "cross-env TIMING=1 eslint --fix --ext .js,.ts src",
+    "tsc": "tsc",
+    "test": "echo \"Error: no tests implemented\" && exit 1",
     "clinic:clean": "clinic clean",
     "npm-check": "npm-check",
     "git:sdiff": "git diff && git submodule foreach 'git diff'",
     "git:spush": "git push --recurse-submodules=on-demand"
   },
   "dependencies": {
+    "tslib": "^2.0.3",
     "uuid": "^8.3.1",
     "winston": "^3.3.3",
     "worker-threads-pool": "^2.0.0",
     "ws": "^7.3.1"
   },
   "devDependencies": {
-    "babel-eslint": "^10.1.0",
+    "@types/node": "^14.14.6",
+    "@types/uuid": "^8.3.0",
+    "@types/worker-threads-pool": "^2.0.0",
+    "@types/ws": "^7.2.9",
+    "@typescript-eslint/eslint-plugin": "^4.6.0",
+    "@typescript-eslint/parser": "^4.6.0",
     "clinic": "^7.0.0",
+    "cross-env": "^7.0.2",
     "eslint": "^7.12.1",
-    "eslint-config-google": "^0.14.0",
-    "eslint-config-node": "^4.1.0",
-    "eslint-plugin-flowtype": "^5.2.0",
-    "flow-bin": "^0.137.0",
-    "flow-typed": "^3.2.1",
-    "npm-check": "^5.9.2"
+    "npm-check": "^5.9.2",
+    "typescript": "^4.0.5"
   }
 }
diff --git a/src/assets/station-templates/abb-atg.station-template.json b/src/assets/station-templates/abb-atg.station-template.json
new file mode 100644 (file)
index 0000000..7fca2da
--- /dev/null
@@ -0,0 +1,119 @@
+{
+  "authorizationFile": "./src/assets/authorization-tags.json",
+  "baseName": "CS-ABB",
+  "chargePointModel": "MD_TERRA_53",
+  "chargePointVendor": "ABB",
+  "firmwareVersion": "4.0.4.22",
+  "power": 50000,
+  "powerSharedByConnectors": true,
+  "powerUnit": "W",
+  "powerOutType": "DC",
+  "useConnectorId0": true,
+  "randomConnectors": false,
+  "resetTime": "60",
+  "enableStatistics": false,
+  "voltageOut": 400,
+  "Configuration": {
+    "configurationKey": [
+      {
+        "key": "MeterValuesSampledData",
+        "readonly": false,
+        "value": "SoC,Energy.Active.Import.Register,Power.Active.Import,Current.Import,Voltage"
+      },
+      {
+        "key": "MeterValueSampleInterval",
+        "readonly": false,
+        "value": 30
+      },
+      {
+        "key": "SupportedFeatureProfiles",
+        "readonly": true,
+        "value": "Core,LocalAuthListManagement"
+      },
+      {
+        "key": "LocalAuthListEnabled",
+        "readonly": false,
+        "value": "false"
+      },
+      {
+        "key": "AuthorizeRemoteTxRequests",
+        "readonly": false,
+        "value": "false"
+      },
+      {
+        "key": "VendorKey",
+        "readonly": false,
+        "value": "VendorValue",
+        "visible": false,
+        "reboot": true
+      }
+    ]
+  },
+  "AutomaticTransactionGenerator": {
+    "enable": true,
+    "minDuration": 120,
+    "maxDuration": 360,
+    "minDelayBetweenTwoTransactions": 15,
+    "maxDelayBetweenTwoTransactions": 30,
+    "probabilityOfStart": 1,
+    "stopAfterHours": 0.3,
+    "stopOnConnectionFailure": false
+  },
+  "Connectors": {
+    "0": {},
+    "1": {
+      "MeterValues": [
+        {
+          "unit": "Percent",
+          "context": "Sample.Periodic",
+          "measurand": "SoC",
+          "location": "EV"
+        },
+        {
+          "unit": "V",
+          "context": "Sample.Periodic",
+          "measurand": "Voltage"
+        },
+        {
+          "unit": "W",
+          "measurand": "Power.Active.Import"
+        },
+        {
+          "unit": "A",
+          "context": "Sample.Periodic",
+          "measurand": "Current.Import"
+        },
+        {
+          "unit": "Wh"
+        }
+      ]
+    },
+    "2": {
+      "MeterValues": [
+        {
+          "unit": "Percent",
+          "context": "Sample.Periodic",
+          "measurand": "SoC",
+          "location": "EV"
+        },
+        {
+          "unit": "V",
+          "context": "Sample.Periodic",
+          "measurand": "Voltage"
+        },
+        {
+          "unit": "W",
+          "measurand": "Power.Active.Import"
+        },
+        {
+          "unit": "A",
+          "context": "Sample.Periodic",
+          "measurand": "Current.Import"
+        },
+        {
+          "unit": "Wh"
+        }
+      ]
+    }
+  }
+}
diff --git a/src/charging-station/AutomaticTransactionGenerator.js b/src/charging-station/AutomaticTransactionGenerator.js
deleted file mode 100644 (file)
index 1551a71..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-import {PerformanceObserver, performance} from 'perf_hooks';
-
-import Constants from '../utils/Constants.js';
-import Utils from '../utils/Utils.js';
-import logger from '../utils/Logger.js';
-
-export default class AutomaticTransactionGenerator {
-  constructor(chargingStation) {
-    this._chargingStation = chargingStation;
-    this._timeToStop = true;
-    if (this._chargingStation.getEnableStatistics()) {
-      this._performanceObserver = new PerformanceObserver((list) => {
-        const entry = list.getEntries()[0];
-        this._chargingStation._statistics.logPerformance(entry, 'AutomaticTransactionGenerator');
-        this._performanceObserver.disconnect();
-      });
-    }
-  }
-
-  get timeToStop() {
-    return this._timeToStop;
-  }
-
-  _logPrefix(connectorId = null) {
-    if (connectorId) {
-      return Utils.logPrefix(' ' + this._chargingStation._stationInfo.name + ' ATG on connector #' + connectorId + ':');
-    }
-    return Utils.logPrefix(' ' + this._chargingStation._stationInfo.name + ' ATG:');
-  }
-
-  async start() {
-    this._timeToStop = false;
-    if (this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAfterHours &&
-      this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAfterHours > 0) {
-      setTimeout(() => {
-        this.stop();
-      }, this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAfterHours * 3600 * 1000);
-    }
-    for (const connector in this._chargingStation._connectors) {
-      if (connector > 0) {
-        this.startConnector(connector);
-      }
-    }
-    logger.info(this._logPrefix() + ' ATG started and will stop in ' + Utils.secondstoHHMMSS(this._chargingStation._stationInfo.AutomaticTransactionGenerator.stopAfterHours * 3600));
-  }
-
-  async stop(reason = '') {
-    logger.info(this._logPrefix() + ' ATG OVER => STOPPING ALL TRANSACTIONS');
-    for (const connector in this._chargingStation._connectors) {
-      if (this._chargingStation.getConnector(connector).transactionStarted) {
-        logger.info(this._logPrefix(connector) + ' ATG OVER. Stop transaction ' + this._chargingStation.getConnector(connector).transactionId);
-        await this._chargingStation.sendStopTransaction(this._chargingStation.getConnector(connector).transactionId, reason);
-      }
-    }
-    this._timeToStop = true;
-  }
-
-  async startConnector(connectorId) {
-    do {
-      const wait = Utils.getRandomInt(this._chargingStation._stationInfo.AutomaticTransactionGenerator.maxDelayBetweenTwoTransactions,
-          this._chargingStation._stationInfo.AutomaticTransactionGenerator.minDelayBetweenTwoTransactions) * 1000;
-      logger.info(this._logPrefix(connectorId) + ' wait for ' + Utils.secondstoHHMMSS(wait / 1000));
-      await Utils.sleep(wait);
-      if (this._timeToStop) {
-        logger.debug(this._logPrefix(connectorId) + ' Entered in transaction loop while a request to stop it was made');
-        break;
-      }
-      const start = Math.random();
-      let skip = 0;
-      if (start < this._chargingStation._stationInfo.AutomaticTransactionGenerator.probabilityOfStart) {
-        skip = 0;
-        // Start transaction
-        let startResponse;
-        if (this._chargingStation.getEnableStatistics()) {
-          const startTransaction = performance.timerify(this.startTransaction);
-          this._performanceObserver.observe({entryTypes: ['function']});
-          startResponse = await startTransaction(connectorId, this);
-        } else {
-          startResponse = await this.startTransaction(connectorId, this);
-        }
-        if (startResponse.idTagInfo.status !== 'Accepted') {
-          logger.info(this._logPrefix(connectorId) + ' transaction rejected');
-          await Utils.sleep(Constants.CHARGING_STATION_ATG_WAIT_TIME);
-        } else {
-          // Wait until end of transaction
-          const wait = Utils.getRandomInt(this._chargingStation._stationInfo.AutomaticTransactionGenerator.maxDuration,
-              this._chargingStation._stationInfo.AutomaticTransactionGenerator.minDuration) * 1000;
-          logger.info(this._logPrefix(connectorId) + ' transaction ' + this._chargingStation.getConnector(connectorId).transactionId + ' will stop in ' + Utils.secondstoHHMMSS(wait / 1000));
-          await Utils.sleep(wait);
-          // Stop transaction
-          if (this._chargingStation.getConnector(connectorId).transactionStarted) {
-            logger.info(this._logPrefix(connectorId) + ' stop transaction ' + this._chargingStation.getConnector(connectorId).transactionId);
-            if (this._chargingStation.getEnableStatistics()) {
-              const stopTransaction = performance.timerify(this.stopTransaction);
-              this._performanceObserver.observe({entryTypes: ['function']});
-              await stopTransaction(connectorId, this);
-            } else {
-              await this.stopTransaction(connectorId, this);
-            }
-          }
-        }
-      } else {
-        skip++;
-        logger.info(this._logPrefix(connectorId) + ' transaction skipped ' + skip);
-      }
-    } while (!this._timeToStop);
-    logger.info(this._logPrefix(connectorId) + ' ATG STOPPED on the connector');
-  }
-
-  // eslint-disable-next-line class-methods-use-this
-  async startTransaction(connectorId, self) {
-    if (self._chargingStation.hasAuthorizedTags()) {
-      const tagId = self._chargingStation.getRandomTagId();
-      logger.info(self._logPrefix(connectorId) + ' start transaction for tagID ' + tagId);
-      return self._chargingStation.sendStartTransaction(connectorId, tagId);
-    }
-    return self._chargingStation.sendStartTransaction(connectorId);
-  }
-
-  // eslint-disable-next-line class-methods-use-this
-  async stopTransaction(connectorId, self) {
-    await self._chargingStation.sendStopTransaction(self._chargingStation.getConnector(connectorId).transactionId);
-  }
-}
diff --git a/src/charging-station/AutomaticTransactionGenerator.ts b/src/charging-station/AutomaticTransactionGenerator.ts
new file mode 100644 (file)
index 0000000..6e9d263
--- /dev/null
@@ -0,0 +1,128 @@
+import { PerformanceObserver, performance } from 'perf_hooks';
+
+import ChargingStation from './ChargingStation';
+import Constants from '../utils/Constants';
+import Utils from '../utils/Utils';
+import logger from '../utils/Logger';
+
+export default class AutomaticTransactionGenerator {
+  private _chargingStation: ChargingStation;
+  private _timeToStop: boolean;
+  private _performanceObserver: PerformanceObserver;
+
+  constructor(chargingStation: ChargingStation) {
+    this._chargingStation = chargingStation;
+    this._timeToStop = true;
+    if (this._chargingStation.getEnableStatistics()) {
+      this._performanceObserver = new PerformanceObserver((list) => {
+        const entry = list.getEntries()[0];
+        this._chargingStation.statistics.logPerformance(entry, 'AutomaticTransactionGenerator');
+        this._performanceObserver.disconnect();
+      });
+    }
+  }
+
+  get timeToStop(): boolean {
+    return this._timeToStop;
+  }
+
+  _logPrefix(connectorId: number = null): string {
+    if (connectorId) {
+      return Utils.logPrefix(' ' + this._chargingStation.stationInfo.name + ' ATG on connector #' + connectorId + ':');
+    }
+    return Utils.logPrefix(' ' + this._chargingStation.stationInfo.name + ' ATG:');
+  }
+
+  start(): void {
+    this._timeToStop = false;
+    if (this._chargingStation.stationInfo.AutomaticTransactionGenerator.stopAfterHours &&
+      this._chargingStation.stationInfo.AutomaticTransactionGenerator.stopAfterHours > 0) {
+      setTimeout(() => {
+        this.stop();
+      }, this._chargingStation.stationInfo.AutomaticTransactionGenerator.stopAfterHours * 3600 * 1000);
+    }
+    for (const connector in this._chargingStation.connectors) {
+      if (Utils.convertToInt(connector) > 0) {
+        this.startConnector(Utils.convertToInt(connector));
+      }
+    }
+    logger.info(this._logPrefix() + ' ATG started and will stop in ' + Utils.secondstoHHMMSS(this._chargingStation.stationInfo.AutomaticTransactionGenerator.stopAfterHours * 3600));
+  }
+
+  async stop(reason = ''): Promise<void> {
+    logger.info(this._logPrefix() + ' ATG OVER => STOPPING ALL TRANSACTIONS');
+    for (const connector in this._chargingStation.connectors) {
+      if (this._chargingStation.getConnector(Utils.convertToInt(connector)).transactionStarted) {
+        logger.info(this._logPrefix(Utils.convertToInt(connector)) + ' ATG OVER. Stop transaction ' + this._chargingStation.getConnector(Utils.convertToInt(connector)).transactionId);
+        await this._chargingStation.sendStopTransaction(this._chargingStation.getConnector(Utils.convertToInt(connector)).transactionId, reason);
+      }
+    }
+    this._timeToStop = true;
+  }
+
+  async startConnector(connectorId: number): Promise<void> {
+    do {
+      const wait = Utils.getRandomInt(this._chargingStation.stationInfo.AutomaticTransactionGenerator.maxDelayBetweenTwoTransactions,
+        this._chargingStation.stationInfo.AutomaticTransactionGenerator.minDelayBetweenTwoTransactions) * 1000;
+      logger.info(this._logPrefix(connectorId) + ' wait for ' + Utils.secondstoHHMMSS(wait / 1000));
+      await Utils.sleep(wait);
+      if (this._timeToStop) {
+        logger.debug(this._logPrefix(connectorId) + ' Entered in transaction loop while a request to stop it was made');
+        break;
+      }
+      const start = Math.random();
+      let skip = 0;
+      if (start < this._chargingStation.stationInfo.AutomaticTransactionGenerator.probabilityOfStart) {
+        skip = 0;
+        // Start transaction
+        let startResponse;
+        if (this._chargingStation.getEnableStatistics()) {
+          const startTransaction = performance.timerify(this.startTransaction);
+          this._performanceObserver.observe({ entryTypes: ['function'] });
+          startResponse = await startTransaction(connectorId);
+        } else {
+          startResponse = await this.startTransaction(connectorId);
+        }
+        if (startResponse.idTagInfo.status !== 'Accepted') {
+          logger.info(this._logPrefix(connectorId) + ' transaction rejected');
+          await Utils.sleep(Constants.CHARGING_STATION_ATG_WAIT_TIME);
+        } else {
+          // Wait until end of transaction
+          const waitTrxEnd = Utils.getRandomInt(this._chargingStation.stationInfo.AutomaticTransactionGenerator.maxDuration,
+            this._chargingStation.stationInfo.AutomaticTransactionGenerator.minDuration) * 1000;
+          logger.info(this._logPrefix(connectorId) + ' transaction ' + this._chargingStation.getConnector(connectorId).transactionId + ' will stop in ' + Utils.secondstoHHMMSS(waitTrxEnd / 1000));
+          await Utils.sleep(waitTrxEnd);
+          // Stop transaction
+          if (this._chargingStation.getConnector(connectorId).transactionStarted) {
+            logger.info(this._logPrefix(connectorId) + ' stop transaction ' + this._chargingStation.getConnector(connectorId).transactionId);
+            if (this._chargingStation.getEnableStatistics()) {
+              const stopTransaction = performance.timerify(this.stopTransaction);
+              this._performanceObserver.observe({ entryTypes: ['function'] });
+              await stopTransaction(connectorId);
+            } else {
+              await this.stopTransaction(connectorId);
+            }
+          }
+        }
+      } else {
+        skip++;
+        logger.info(this._logPrefix(connectorId) + ' transaction skipped ' + skip);
+      }
+    } while (!this._timeToStop);
+    logger.info(this._logPrefix(connectorId) + ' ATG STOPPED on the connector');
+  }
+
+  async startTransaction(connectorId: number): Promise<unknown> {
+    if (this._chargingStation.hasAuthorizedTags()) {
+      const tagId = this._chargingStation.getRandomTagId();
+      logger.info(this._logPrefix(connectorId) + ' start transaction for tagID ' + tagId);
+      return this._chargingStation.sendStartTransaction(connectorId, tagId);
+    }
+    logger.info(this._logPrefix(connectorId) + ' start transaction without a tagID');
+    return this._chargingStation.sendStartTransaction(connectorId);
+  }
+
+  async stopTransaction(connectorId: number): Promise<void> {
+    await this._chargingStation.sendStopTransaction(this._chargingStation.getConnector(connectorId).transactionId);
+  }
+}
similarity index 81%
rename from src/charging-station/ChargingStation.js
rename to src/charging-station/ChargingStation.ts
index 76d75f574adade2877a89f035630cf040cbada66..83074dd7e9f23516e831bc0845ae154736032666 100644 (file)
@@ -1,19 +1,43 @@
-import {PerformanceObserver, performance} from 'perf_hooks';
+import { PerformanceObserver, performance } from 'perf_hooks';
 
-import AutomaticTransactionGenerator from './AutomaticTransactionGenerator.js';
-import Configuration from '../utils/Configuration.js';
+import AutomaticTransactionGenerator from './AutomaticTransactionGenerator';
+import Configuration from '../utils/Configuration';
 import Constants from '../utils/Constants.js';
-import ElectricUtils from '../utils/ElectricUtils.js';
+import ElectricUtils from '../utils/ElectricUtils';
+import { MeasurandValues } from '../types/MeasurandValues';
 import OCPPError from './OcppError.js';
-import Statistics from '../utils/Statistics.js';
-import Utils from '../utils/Utils.js';
+import Statistics from '../utils/Statistics';
+import Utils from '../utils/Utils';
 import WebSocket from 'ws';
 import crypto from 'crypto';
 import fs from 'fs';
-import logger from '../utils/Logger.js';
+import logger from '../utils/Logger';
 
 export default class ChargingStation {
-  constructor(index, stationTemplateFile) {
+  private _index: number;
+  private _stationTemplateFile;
+  private _stationInfo;
+  private _bootNotificationMessage;
+  private _connectors;
+  private _configuration;
+  private _connectorsConfigurationHash;
+  private _supervisionUrl;
+  private _wsConnectionUrl;
+  private _wsConnection;
+  private _isSocketRestart;
+  private _autoReconnectRetryCount;
+  private _autoReconnectMaxRetries;
+  private _autoReconnectTimeout;
+  private _requests;
+  private _messageQueue;
+  private _automaticTransactionGeneration: AutomaticTransactionGenerator;
+  private _authorizedTags: string[];
+  private _heartbeatInterval;
+  private _heartbeatSetInterval;
+  private _statistics: Statistics;
+  private _performanceObserver: PerformanceObserver;
+
+  constructor(index: number, stationTemplateFile: string) {
     this._index = index;
     this._stationTemplateFile = stationTemplateFile;
     this._connectors = {};
@@ -22,7 +46,7 @@ export default class ChargingStation {
     this._isSocketRestart = false;
     this._autoReconnectRetryCount = 0;
     this._autoReconnectMaxRetries = Configuration.getAutoReconnectMaxRetries(); // -1 for unlimited
-    this._autoReconnectTimeout = Configuration.getAutoReconnectTimeout() * 1000; // ms, zero for disabling
+    this._autoReconnectTimeout = Configuration.getAutoReconnectTimeout() * 1000; // Ms, zero for disabling
 
     this._requests = {};
     this._messageQueue = [];
@@ -30,7 +54,7 @@ export default class ChargingStation {
     this._authorizedTags = this._loadAndGetAuthorizedTags();
   }
 
-  _getStationName(stationTemplate) {
+  _getStationName(stationTemplate): string {
     return stationTemplate.fixedName ? stationTemplate.baseName : stationTemplate.baseName + '-' + ('000000000' + this._index).substr(('000000000' + this._index).length - 4);
   }
 
@@ -56,13 +80,17 @@ export default class ChargingStation {
     return stationTemplate;
   }
 
-  _initialize() {
+  get stationInfo() {
+    return this._stationInfo;
+  }
+
+  _initialize(): void {
     this._stationInfo = this._buildStationInfo();
     this._bootNotificationMessage = {
       chargePointModel: this._stationInfo.chargePointModel,
       chargePointVendor: this._stationInfo.chargePointVendor,
-      ...!Utils.isUndefined(this._stationInfo.chargeBoxSerialNumberPrefix) && {chargeBoxSerialNumber: this._stationInfo.chargeBoxSerialNumberPrefix},
-      ...!Utils.isUndefined(this._stationInfo.firmwareVersion) && {firmwareVersion: this._stationInfo.firmwareVersion},
+      ...!Utils.isUndefined(this._stationInfo.chargeBoxSerialNumberPrefix) && { chargeBoxSerialNumber: this._stationInfo.chargeBoxSerialNumberPrefix },
+      ...!Utils.isUndefined(this._stationInfo.firmwareVersion) && { firmwareVersion: this._stationInfo.firmwareVersion },
     };
     this._configuration = this._getConfiguration();
     this._supervisionUrl = this._getSupervisionURL();
@@ -86,7 +114,7 @@ export default class ChargingStation {
     if (!this._connectors || (this._connectors && this._connectorsConfigurationHash !== connectorsConfigHash)) {
       this._connectorsConfigurationHash = connectorsConfigHash;
       // Add connector Id 0
-      let lastConnector = 0;
+      let lastConnector = '0';
       for (lastConnector in this._stationInfo.Connectors) {
         if (Utils.convertToInt(lastConnector) === 0 && Utils.convertToBoolean(this._stationInfo.useConnectorId0) && this._stationInfo.Connectors[lastConnector]) {
           this._connectors[lastConnector] = Utils.cloneObject(this._stationInfo.Connectors[lastConnector]);
@@ -95,7 +123,7 @@ export default class ChargingStation {
       // Generate all connectors
       if ((this._stationInfo.Connectors[0] ? templateMaxConnectors - 1 : templateMaxConnectors) > 0) {
         for (let index = 1; index <= maxConnectors; index++) {
-          const randConnectorID = Utils.convertToBoolean(this._stationInfo.randomConnectors) ? Utils.getRandomInt(lastConnector, 1) : index;
+          const randConnectorID = Utils.convertToBoolean(this._stationInfo.randomConnectors) ? Utils.getRandomInt(Utils.convertToInt(lastConnector), 1) : index;
           this._connectors[index] = Utils.cloneObject(this._stationInfo.Connectors[randConnectorID]);
         }
       }
@@ -104,7 +132,7 @@ export default class ChargingStation {
     delete this._stationInfo.Connectors;
     // Initialize transaction attributes on connectors
     for (const connector in this._connectors) {
-      if (!this.getConnector(connector).transactionStarted) {
+      if (!this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
         this._initTransactionOnConnector(connector);
       }
     }
@@ -125,7 +153,15 @@ export default class ChargingStation {
     }
   }
 
-  _logPrefix() {
+  get connectors() {
+    return this._connectors;
+  }
+
+  get statistics(): Statistics {
+    return this._statistics;
+  }
+
+  _logPrefix(): string {
     return Utils.logPrefix(` ${this._stationInfo.name}:`);
   }
 
@@ -134,10 +170,10 @@ export default class ChargingStation {
   }
 
   _getAuthorizationFile() {
-    return this._stationInfo.authorizationFile ? this._stationInfo.authorizationFile : '';
+    return this._stationInfo.authorizationFile && this._stationInfo.authorizationFile;
   }
 
-  _loadAndGetAuthorizedTags() {
+  _loadAndGetAuthorizedTags(): string[] {
     let authorizedTags = [];
     const authorizationFile = this._getAuthorizationFile();
     if (authorizationFile) {
@@ -169,7 +205,7 @@ export default class ChargingStation {
     return !Utils.isUndefined(this._stationInfo.enableStatistics) ? Utils.convertToBoolean(this._stationInfo.enableStatistics) : true;
   }
 
-  _getNumberOfPhases() {
+  _getNumberOfPhases(): number {
     switch (this._getPowerOutType()) {
       case 'AC':
         return !Utils.isUndefined(this._stationInfo.numberOfPhases) ? Utils.convertToInt(this._stationInfo.numberOfPhases) : 3;
@@ -181,7 +217,7 @@ export default class ChargingStation {
   _getNumberOfRunningTransactions() {
     let trxCount = 0;
     for (const connector in this._connectors) {
-      if (this.getConnector(connector).transactionStarted) {
+      if (this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
         trxCount++;
       }
     }
@@ -196,8 +232,8 @@ export default class ChargingStation {
     return powerDivider;
   }
 
-  getConnector(id) {
-    return this._connectors[Utils.convertToInt(id)];
+  getConnector(id: number) {
+    return this._connectors[id];
   }
 
   _getTemplateMaxNumberOfConnectors() {
@@ -217,7 +253,7 @@ export default class ChargingStation {
     return maxConnectors;
   }
 
-  _getNumberOfConnectors() {
+  _getNumberOfConnectors(): number {
     return this._connectors[0] ? Object.keys(this._connectors).length - 1 : Object.keys(this._connectors).length;
   }
 
@@ -267,14 +303,14 @@ export default class ChargingStation {
     return localAuthListEnabled ? Utils.convertToBoolean(localAuthListEnabled.value) : false;
   }
 
-  async _basicStartMessageSequence() {
+  _basicStartMessageSequence(): void {
     // Start heartbeat
-    this._startHeartbeat(this);
+    this._startHeartbeat();
     // Initialize connectors status
     for (const connector in this._connectors) {
-      if (!this.getConnector(connector).transactionStarted) {
-        if (this.getConnector(connector).bootStatus) {
-          this.sendStatusNotificationWithTimeout(connector, this.getConnector(connector).bootStatus);
+      if (!this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
+        if (this.getConnector(Utils.convertToInt(connector)).bootStatus) {
+          this.sendStatusNotificationWithTimeout(connector, this.getConnector(Utils.convertToInt(connector)).bootStatus);
         } else {
           this.sendStatusNotificationWithTimeout(connector, 'Available');
         }
@@ -296,19 +332,18 @@ export default class ChargingStation {
     }
   }
 
-  // eslint-disable-next-line class-methods-use-this
-  async _startHeartbeat(self) {
-    if (self._heartbeatInterval && self._heartbeatInterval > 0 && !self._heartbeatSetInterval) {
-      self._heartbeatSetInterval = setInterval(() => {
+  _startHeartbeat(): void {
+    if (this._heartbeatInterval && this._heartbeatInterval > 0 && !this._heartbeatSetInterval) {
+      this._heartbeatSetInterval = setInterval(() => {
         this.sendHeartbeat();
-      }, self._heartbeatInterval);
-      logger.info(self._logPrefix() + ' Heartbeat started every ' + self._heartbeatInterval + 'ms');
+      }, this._heartbeatInterval);
+      logger.info(this._logPrefix() + ' Heartbeat started every ' + this._heartbeatInterval.toString() + 'ms');
     } else {
-      logger.error(`${self._logPrefix()} Heartbeat interval set to ${self._heartbeatInterval}ms, not starting the heartbeat`);
+      logger.error(`${this._logPrefix()} Heartbeat interval set to ${this._heartbeatInterval}ms, not starting the heartbeat`);
     }
   }
 
-  async _stopHeartbeat() {
+  _stopHeartbeat() {
     if (this._heartbeatSetInterval) {
       clearInterval(this._heartbeatSetInterval);
       this._heartbeatSetInterval = null;
@@ -343,7 +378,7 @@ export default class ChargingStation {
     });
   }
 
-  async _startMeterValues(connectorId, interval) {
+  _startMeterValues(connectorId: number, interval: number): void {
     if (!this.getConnector(connectorId).transactionStarted) {
       logger.error(`${this._logPrefix()} Trying to start MeterValues on connector Id ${connectorId} with no transaction started`);
       return;
@@ -358,9 +393,9 @@ export default class ChargingStation {
           this._performanceObserver.observe({
             entryTypes: ['function'],
           });
-          await sendMeterValues(connectorId, interval, this);
+          await sendMeterValues(connectorId, interval);
         } else {
-          await this.sendMeterValues(connectorId, interval, this);
+          await this.sendMeterValues(connectorId, interval);
         }
       }, interval);
     } else {
@@ -368,7 +403,7 @@ export default class ChargingStation {
     }
   }
 
-  async start() {
+  start() {
     if (!this._wsConnectionUrl) {
       this._wsConnectionUrl = this._supervisionUrl + '/' + this._stationInfo.name;
     }
@@ -392,7 +427,7 @@ export default class ChargingStation {
 
   async stop(reason = '') {
     // Stop heartbeat
-    await this._stopHeartbeat();
+    this._stopHeartbeat();
     // Stop the ATG
     if (Utils.convertToBoolean(this._stationInfo.AutomaticTransactionGenerator.enable) &&
       this._automaticTransactionGeneration &&
@@ -400,14 +435,14 @@ export default class ChargingStation {
       await this._automaticTransactionGeneration.stop(reason);
     } else {
       for (const connector in this._connectors) {
-        if (this.getConnector(connector).transactionStarted) {
-          await this.sendStopTransaction(this.getConnector(connector).transactionId, reason);
+        if (this.getConnector(Utils.convertToInt(connector)).transactionStarted) {
+          await this.sendStopTransaction(this.getConnector(Utils.convertToInt(connector)).transactionId, reason);
         }
       }
     }
     // eslint-disable-next-line guard-for-in
     for (const connector in this._connectors) {
-      await this.sendStatusNotification(connector, 'Unavailable');
+      await this.sendStatusNotification(Utils.convertToInt(connector), 'Unavailable');
     }
     if (this._wsConnection && this._wsConnection.readyState === WebSocket.OPEN) {
       await this._wsConnection.close();
@@ -567,7 +602,7 @@ export default class ChargingStation {
     }
   }
 
-  async sendStatusNotification(connectorId, status, errorCode = 'NoError') {
+  async sendStatusNotification(connectorId: number, status, errorCode = 'NoError') {
     try {
       const payload = {
         connectorId,
@@ -582,14 +617,14 @@ export default class ChargingStation {
   }
 
   sendStatusNotificationWithTimeout(connectorId, status, errorCode = 'NoError', timeout = Constants.STATUS_NOTIFICATION_TIMEOUT) {
-    setTimeout(() => this.sendStatusNotification(connectorId, status, errorCode), timeout);
+    setTimeout(async () => this.sendStatusNotification(connectorId, status, errorCode), timeout);
   }
 
-  async sendStartTransaction(connectorId, idTag) {
+  async sendStartTransaction(connectorId: number, idTag?: string) {
     try {
       const payload = {
         connectorId,
-        idTag,
+        ...!Utils.isUndefined(idTag) && { idTag },
         meterStart: 0,
         timestamp: new Date().toISOString(),
       };
@@ -600,17 +635,17 @@ export default class ChargingStation {
     }
   }
 
-  sendStartTransactionWithTimeout(connectorId, idTag, timeout = Constants.START_TRANSACTION_TIMEOUT) {
-    setTimeout(() => this.sendStartTransaction(connectorId, idTag), timeout);
+  sendStartTransactionWithTimeout(connectorId: number, idTag?: string, timeout = Constants.START_TRANSACTION_TIMEOUT) {
+    setTimeout(async () => this.sendStartTransaction(connectorId, idTag), timeout);
   }
 
-  async sendStopTransaction(transactionId, reason = '') {
+  async sendStopTransaction(transactionId, reason = ''): Promise<void> {
     try {
       const payload = {
         transactionId,
         meterStop: 0,
         timestamp: new Date().toISOString(),
-        ...reason && {reason},
+        ...reason && { reason },
       };
       await this.sendMessage(Utils.generateUUID(), payload, Constants.OCPP_JSON_CALL_MESSAGE, 'StopTransaction');
     } catch (error) {
@@ -619,78 +654,77 @@ export default class ChargingStation {
     }
   }
 
-  // eslint-disable-next-line class-methods-use-this
-  async sendMeterValues(connectorId, interval, self, debug = false) {
+  async sendMeterValues(connectorId, interval, debug = false): Promise<void> {
     try {
       const sampledValues = {
         timestamp: new Date().toISOString(),
         sampledValue: [],
       };
-      const meterValuesTemplate = self.getConnector(connectorId).MeterValues;
+      const meterValuesTemplate = this.getConnector(connectorId).MeterValues;
       for (let index = 0; index < meterValuesTemplate.length; index++) {
-        const connector = self.getConnector(connectorId);
+        const connector = this.getConnector(connectorId);
         // SoC measurand
-        if (meterValuesTemplate[index].measurand && meterValuesTemplate[index].measurand === 'SoC' && self._getConfigurationKey('MeterValuesSampledData').value.includes('SoC')) {
+        if (meterValuesTemplate[index].measurand && meterValuesTemplate[index].measurand === 'SoC' && this._getConfigurationKey('MeterValuesSampledData').value.includes('SoC')) {
           sampledValues.sampledValue.push({
-            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? {unit: meterValuesTemplate[index].unit} : {unit: 'Percent'},
-            ...!Utils.isUndefined(meterValuesTemplate[index].context) && {context: meterValuesTemplate[index].context},
+            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? { unit: meterValuesTemplate[index].unit } : { unit: 'Percent' },
+            ...!Utils.isUndefined(meterValuesTemplate[index].context) && { context: meterValuesTemplate[index].context },
             measurand: meterValuesTemplate[index].measurand,
-            ...!Utils.isUndefined(meterValuesTemplate[index].location) ? {location: meterValuesTemplate[index].location} : {location: 'EV'},
-            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? {value: meterValuesTemplate[index].value} : {value: Utils.getRandomInt(100)},
+            ...!Utils.isUndefined(meterValuesTemplate[index].location) ? { location: meterValuesTemplate[index].location } : { location: 'EV' },
+            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? { value: meterValuesTemplate[index].value } : { value: Utils.getRandomInt(100) },
           });
           const sampledValuesIndex = sampledValues.sampledValue.length - 1;
           if (sampledValues.sampledValue[sampledValuesIndex].value > 100 || debug) {
-            logger.error(`${self._logPrefix()} MeterValues measurand ${sampledValues.sampledValue[sampledValuesIndex].measurand ? sampledValues.sampledValue[sampledValuesIndex].measurand : 'Energy.Active.Import.Register'}: connectorId ${connectorId}, transaction ${connector.transactionId}, value: ${sampledValues.sampledValue[sampledValuesIndex].value}/100`);
+            logger.error(`${this._logPrefix()} MeterValues measurand ${sampledValues.sampledValue[sampledValuesIndex].measurand ? sampledValues.sampledValue[sampledValuesIndex].measurand : 'Energy.Active.Import.Register'}: connectorId ${connectorId}, transaction ${connector.transactionId}, value: ${sampledValues.sampledValue[sampledValuesIndex].value}/100`);
           }
         // Voltage measurand
-        } else if (meterValuesTemplate[index].measurand && meterValuesTemplate[index].measurand === 'Voltage' && self._getConfigurationKey('MeterValuesSampledData').value.includes('Voltage')) {
+        } else if (meterValuesTemplate[index].measurand && meterValuesTemplate[index].measurand === 'Voltage' && this._getConfigurationKey('MeterValuesSampledData').value.includes('Voltage')) {
           sampledValues.sampledValue.push({
-            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? {unit: meterValuesTemplate[index].unit} : {unit: 'V'},
-            ...!Utils.isUndefined(meterValuesTemplate[index].context) && {context: meterValuesTemplate[index].context},
+            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? { unit: meterValuesTemplate[index].unit } : { unit: 'V' },
+            ...!Utils.isUndefined(meterValuesTemplate[index].context) && { context: meterValuesTemplate[index].context },
             measurand: meterValuesTemplate[index].measurand,
-            ...!Utils.isUndefined(meterValuesTemplate[index].location) && {location: meterValuesTemplate[index].location},
-            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? {value: meterValuesTemplate[index].value} : {value: self._getVoltageOut()},
+            ...!Utils.isUndefined(meterValuesTemplate[index].location) && { location: meterValuesTemplate[index].location },
+            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? { value: meterValuesTemplate[index].value } : { value: this._getVoltageOut() },
           });
-          for (let phase = 1; self._getNumberOfPhases() === 3 && phase <= self._getNumberOfPhases(); phase++) {
+          for (let phase = 1; this._getNumberOfPhases() === 3 && phase <= this._getNumberOfPhases(); phase++) {
             const voltageValue = sampledValues.sampledValue[sampledValues.sampledValue.length - 1].value;
             let phaseValue;
             if (voltageValue >= 0 && voltageValue <= 250) {
               phaseValue = `L${phase}-N`;
             } else if (voltageValue > 250) {
-              phaseValue = `L${phase}-L${(phase + 1) % self._getNumberOfPhases() !== 0 ? (phase + 1) % self._getNumberOfPhases() : self._getNumberOfPhases()}`;
+              phaseValue = `L${phase}-L${(phase + 1) % this._getNumberOfPhases() !== 0 ? (phase + 1) % this._getNumberOfPhases() : this._getNumberOfPhases()}`;
             }
             sampledValues.sampledValue.push({
-              ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? {unit: meterValuesTemplate[index].unit} : {unit: 'V'},
-              ...!Utils.isUndefined(meterValuesTemplate[index].context) && {context: meterValuesTemplate[index].context},
+              ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? { unit: meterValuesTemplate[index].unit } : { unit: 'V' },
+              ...!Utils.isUndefined(meterValuesTemplate[index].context) && { context: meterValuesTemplate[index].context },
               measurand: meterValuesTemplate[index].measurand,
-              ...!Utils.isUndefined(meterValuesTemplate[index].location) && {location: meterValuesTemplate[index].location},
-              ...!Utils.isUndefined(meterValuesTemplate[index].value) ? {value: meterValuesTemplate[index].value} : {value: self._getVoltageOut()},
+              ...!Utils.isUndefined(meterValuesTemplate[index].location) && { location: meterValuesTemplate[index].location },
+              ...!Utils.isUndefined(meterValuesTemplate[index].value) ? { value: meterValuesTemplate[index].value } : { value: this._getVoltageOut() },
               phase: phaseValue,
             });
           }
         // Power.Active.Import measurand
-        } else if (meterValuesTemplate[index].measurand && meterValuesTemplate[index].measurand === 'Power.Active.Import' && self._getConfigurationKey('MeterValuesSampledData').value.includes('Power.Active.Import')) {
+        } else if (meterValuesTemplate[index].measurand && meterValuesTemplate[index].measurand === 'Power.Active.Import' && this._getConfigurationKey('MeterValuesSampledData').value.includes('Power.Active.Import')) {
           // FIXME: factor out powerDivider checks
-          if (Utils.isUndefined(self._stationInfo.powerDivider)) {
-            const errMsg = `${self._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider is undefined`;
+          if (Utils.isUndefined(this._stationInfo.powerDivider)) {
+            const errMsg = `${this._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider is undefined`;
             logger.error(errMsg);
             throw Error(errMsg);
-          } else if (self._stationInfo.powerDivider && self._stationInfo.powerDivider <= 0) {
-            const errMsg = `${self._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider have zero or below value ${self._stationInfo.powerDivider}`;
+          } else if (this._stationInfo.powerDivider && this._stationInfo.powerDivider <= 0) {
+            const errMsg = `${this._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider have zero or below value ${this._stationInfo.powerDivider}`;
             logger.error(errMsg);
             throw Error(errMsg);
           }
-          const errMsg = `${self._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: Unknown ${self._getPowerOutType()} powerOutType in template file ${self._stationTemplateFile}, cannot calculate ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'} measurand value`;
-          const powerMeasurandValues = {};
-          const maxPower = Math.round(self._stationInfo.maxPower / self._stationInfo.powerDivider);
-          const maxPowerPerPhase = Math.round((self._stationInfo.maxPower / self._stationInfo.powerDivider) / self._getNumberOfPhases());
-          switch (self._getPowerOutType()) {
+          const errMsg = `${this._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: Unknown ${this._getPowerOutType()} powerOutType in template file ${this._stationTemplateFile}, cannot calculate ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'} measurand value`;
+          const powerMeasurandValues = {} as MeasurandValues ;
+          const maxPower = Math.round(this._stationInfo.maxPower / this._stationInfo.powerDivider);
+          const maxPowerPerPhase = Math.round((this._stationInfo.maxPower / this._stationInfo.powerDivider) / this._getNumberOfPhases());
+          switch (this._getPowerOutType()) {
             case 'AC':
               if (Utils.isUndefined(meterValuesTemplate[index].value)) {
                 powerMeasurandValues.L1 = Utils.getRandomFloatRounded(maxPowerPerPhase);
                 powerMeasurandValues.L2 = 0;
                 powerMeasurandValues.L3 = 0;
-                if (self._getNumberOfPhases() === 3) {
+                if (this._getNumberOfPhases() === 3) {
                   powerMeasurandValues.L2 = Utils.getRandomFloatRounded(maxPowerPerPhase);
                   powerMeasurandValues.L3 = Utils.getRandomFloatRounded(maxPowerPerPhase);
                 }
@@ -707,58 +741,58 @@ export default class ChargingStation {
               throw Error(errMsg);
           }
           sampledValues.sampledValue.push({
-            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? {unit: meterValuesTemplate[index].unit} : {unit: 'W'},
-            ...!Utils.isUndefined(meterValuesTemplate[index].context) && {context: meterValuesTemplate[index].context},
+            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? { unit: meterValuesTemplate[index].unit } : { unit: 'W' },
+            ...!Utils.isUndefined(meterValuesTemplate[index].context) && { context: meterValuesTemplate[index].context },
             measurand: meterValuesTemplate[index].measurand,
-            ...!Utils.isUndefined(meterValuesTemplate[index].location) && {location: meterValuesTemplate[index].location},
-            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? {value: meterValuesTemplate[index].value} : {value: powerMeasurandValues.all},
+            ...!Utils.isUndefined(meterValuesTemplate[index].location) && { location: meterValuesTemplate[index].location },
+            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? { value: meterValuesTemplate[index].value } : { value: powerMeasurandValues.all },
           });
           const sampledValuesIndex = sampledValues.sampledValue.length - 1;
           if (sampledValues.sampledValue[sampledValuesIndex].value > maxPower || debug) {
-            logger.error(`${self._logPrefix()} MeterValues measurand ${sampledValues.sampledValue[sampledValuesIndex].measurand ? sampledValues.sampledValue[sampledValuesIndex].measurand : 'Energy.Active.Import.Register'}: connectorId ${connectorId}, transaction ${connector.transactionId}, value: ${sampledValues.sampledValue[sampledValuesIndex].value}/${maxPower}`);
+            logger.error(`${this._logPrefix()} MeterValues measurand ${sampledValues.sampledValue[sampledValuesIndex].measurand ? sampledValues.sampledValue[sampledValuesIndex].measurand : 'Energy.Active.Import.Register'}: connectorId ${connectorId}, transaction ${connector.transactionId}, value: ${sampledValues.sampledValue[sampledValuesIndex].value}/${maxPower}`);
           }
-          for (let phase = 1; self._getNumberOfPhases() === 3 && phase <= self._getNumberOfPhases(); phase++) {
+          for (let phase = 1; this._getNumberOfPhases() === 3 && phase <= this._getNumberOfPhases(); phase++) {
             const phaseValue = `L${phase}-N`;
             sampledValues.sampledValue.push({
-              ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? {unit: meterValuesTemplate[index].unit} : {unit: 'W'},
-              ...!Utils.isUndefined(meterValuesTemplate[index].context) && {context: meterValuesTemplate[index].context},
-              ...!Utils.isUndefined(meterValuesTemplate[index].measurand) && {measurand: meterValuesTemplate[index].measurand},
-              ...!Utils.isUndefined(meterValuesTemplate[index].location) && {location: meterValuesTemplate[index].location},
-              ...!Utils.isUndefined(meterValuesTemplate[index].value) ? {value: meterValuesTemplate[index].value} : {value: powerMeasurandValues[`L${phase}`]},
+              ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? { unit: meterValuesTemplate[index].unit } : { unit: 'W' },
+              ...!Utils.isUndefined(meterValuesTemplate[index].context) && { context: meterValuesTemplate[index].context },
+              ...!Utils.isUndefined(meterValuesTemplate[index].measurand) && { measurand: meterValuesTemplate[index].measurand },
+              ...!Utils.isUndefined(meterValuesTemplate[index].location) && { location: meterValuesTemplate[index].location },
+              ...!Utils.isUndefined(meterValuesTemplate[index].value) ? { value: meterValuesTemplate[index].value } : { value: powerMeasurandValues[`L${phase}`] },
               phase: phaseValue,
             });
           }
         // Current.Import measurand
-        } else if (meterValuesTemplate[index].measurand && meterValuesTemplate[index].measurand === 'Current.Import' && self._getConfigurationKey('MeterValuesSampledData').value.includes('Current.Import')) {
+        } else if (meterValuesTemplate[index].measurand && meterValuesTemplate[index].measurand === 'Current.Import' && this._getConfigurationKey('MeterValuesSampledData').value.includes('Current.Import')) {
           // FIXME: factor out powerDivider checks
-          if (Utils.isUndefined(self._stationInfo.powerDivider)) {
-            const errMsg = `${self._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider is undefined`;
+          if (Utils.isUndefined(this._stationInfo.powerDivider)) {
+            const errMsg = `${this._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider is undefined`;
             logger.error(errMsg);
             throw Error(errMsg);
-          } else if (self._stationInfo.powerDivider && self._stationInfo.powerDivider <= 0) {
-            const errMsg = `${self._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider have zero or below value ${self._stationInfo.powerDivider}`;
+          } else if (this._stationInfo.powerDivider && this._stationInfo.powerDivider <= 0) {
+            const errMsg = `${this._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider have zero or below value ${this._stationInfo.powerDivider}`;
             logger.error(errMsg);
             throw Error(errMsg);
           }
-          const errMsg = `${self._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: Unknown ${self._getPowerOutType()} powerOutType in template file ${self._stationTemplateFile}, cannot calculate ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'} measurand value`;
-          const currentMeasurandValues = {};
+          const errMsg = `${this._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: Unknown ${this._getPowerOutType()} powerOutType in template file ${this._stationTemplateFile}, cannot calculate ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'} measurand value`;
+          const currentMeasurandValues = {} as MeasurandValues;
           let maxAmperage;
-          switch (self._getPowerOutType()) {
+          switch (this._getPowerOutType()) {
             case 'AC':
-              maxAmperage = ElectricUtils.ampPerPhaseFromPower(self._getNumberOfPhases(), self._stationInfo.maxPower / self._stationInfo.powerDivider, self._getVoltageOut());
+              maxAmperage = ElectricUtils.ampPerPhaseFromPower(this._getNumberOfPhases(), this._stationInfo.maxPower / this._stationInfo.powerDivider, this._getVoltageOut());
               if (Utils.isUndefined(meterValuesTemplate[index].value)) {
                 currentMeasurandValues.L1 = Utils.getRandomFloatRounded(maxAmperage);
                 currentMeasurandValues.L2 = 0;
                 currentMeasurandValues.L3 = 0;
-                if (self._getNumberOfPhases() === 3) {
+                if (this._getNumberOfPhases() === 3) {
                   currentMeasurandValues.L2 = Utils.getRandomFloatRounded(maxAmperage);
                   currentMeasurandValues.L3 = Utils.getRandomFloatRounded(maxAmperage);
                 }
-                currentMeasurandValues.all = Utils.roundTo((currentMeasurandValues.L1 + currentMeasurandValues.L2 + currentMeasurandValues.L3) / self._getNumberOfPhases(), 2);
+                currentMeasurandValues.all = Utils.roundTo((currentMeasurandValues.L1 + currentMeasurandValues.L2 + currentMeasurandValues.L3) / this._getNumberOfPhases(), 2);
               }
               break;
             case 'DC':
-              maxAmperage = ElectricUtils.ampTotalFromPower(self._stationInfo.maxPower / self._stationInfo.powerDivider, self._getVoltageOut());
+              maxAmperage = ElectricUtils.ampTotalFromPower(this._stationInfo.maxPower / this._stationInfo.powerDivider, this._getVoltageOut());
               if (Utils.isUndefined(meterValuesTemplate[index].value)) {
                 currentMeasurandValues.all = Utils.getRandomFloatRounded(maxAmperage);
               }
@@ -768,41 +802,41 @@ export default class ChargingStation {
               throw Error(errMsg);
           }
           sampledValues.sampledValue.push({
-            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? {unit: meterValuesTemplate[index].unit} : {unit: 'A'},
-            ...!Utils.isUndefined(meterValuesTemplate[index].context) && {context: meterValuesTemplate[index].context},
+            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? { unit: meterValuesTemplate[index].unit } : { unit: 'A' },
+            ...!Utils.isUndefined(meterValuesTemplate[index].context) && { context: meterValuesTemplate[index].context },
             measurand: meterValuesTemplate[index].measurand,
-            ...!Utils.isUndefined(meterValuesTemplate[index].location) && {location: meterValuesTemplate[index].location},
-            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? {value: meterValuesTemplate[index].value} : {value: currentMeasurandValues.all},
+            ...!Utils.isUndefined(meterValuesTemplate[index].location) && { location: meterValuesTemplate[index].location },
+            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? { value: meterValuesTemplate[index].value } : { value: currentMeasurandValues.all },
           });
           const sampledValuesIndex = sampledValues.sampledValue.length - 1;
           if (sampledValues.sampledValue[sampledValuesIndex].value > maxAmperage || debug) {
-            logger.error(`${self._logPrefix()} MeterValues measurand ${sampledValues.sampledValue[sampledValuesIndex].measurand ? sampledValues.sampledValue[sampledValuesIndex].measurand : 'Energy.Active.Import.Register'}: connectorId ${connectorId}, transaction ${connector.transactionId}, value: ${sampledValues.sampledValue[sampledValuesIndex].value}/${maxAmperage}`);
+            logger.error(`${this._logPrefix()} MeterValues measurand ${sampledValues.sampledValue[sampledValuesIndex].measurand ? sampledValues.sampledValue[sampledValuesIndex].measurand : 'Energy.Active.Import.Register'}: connectorId ${connectorId}, transaction ${connector.transactionId}, value: ${sampledValues.sampledValue[sampledValuesIndex].value}/${maxAmperage}`);
           }
-          for (let phase = 1; self._getNumberOfPhases() === 3 && phase <= self._getNumberOfPhases(); phase++) {
+          for (let phase = 1; this._getNumberOfPhases() === 3 && phase <= this._getNumberOfPhases(); phase++) {
             const phaseValue = `L${phase}`;
             sampledValues.sampledValue.push({
-              ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? {unit: meterValuesTemplate[index].unit} : {unit: 'A'},
-              ...!Utils.isUndefined(meterValuesTemplate[index].context) && {context: meterValuesTemplate[index].context},
-              ...!Utils.isUndefined(meterValuesTemplate[index].measurand) && {measurand: meterValuesTemplate[index].measurand},
-              ...!Utils.isUndefined(meterValuesTemplate[index].location) && {location: meterValuesTemplate[index].location},
-              ...!Utils.isUndefined(meterValuesTemplate[index].value) ? {value: meterValuesTemplate[index].value} : {value: currentMeasurandValues[phaseValue]},
+              ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? { unit: meterValuesTemplate[index].unit } : { unit: 'A' },
+              ...!Utils.isUndefined(meterValuesTemplate[index].context) && { context: meterValuesTemplate[index].context },
+              ...!Utils.isUndefined(meterValuesTemplate[index].measurand) && { measurand: meterValuesTemplate[index].measurand },
+              ...!Utils.isUndefined(meterValuesTemplate[index].location) && { location: meterValuesTemplate[index].location },
+              ...!Utils.isUndefined(meterValuesTemplate[index].value) ? { value: meterValuesTemplate[index].value } : { value: currentMeasurandValues[phaseValue] },
               phase: phaseValue,
             });
           }
         // Energy.Active.Import.Register measurand (default)
         } else if (!meterValuesTemplate[index].measurand || meterValuesTemplate[index].measurand === 'Energy.Active.Import.Register') {
           // FIXME: factor out powerDivider checks
-          if (Utils.isUndefined(self._stationInfo.powerDivider)) {
-            const errMsg = `${self._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider is undefined`;
+          if (Utils.isUndefined(this._stationInfo.powerDivider)) {
+            const errMsg = `${this._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider is undefined`;
             logger.error(errMsg);
             throw Error(errMsg);
-          } else if (self._stationInfo.powerDivider && self._stationInfo.powerDivider <= 0) {
-            const errMsg = `${self._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider have zero or below value ${self._stationInfo.powerDivider}`;
+          } else if (this._stationInfo.powerDivider && this._stationInfo.powerDivider <= 0) {
+            const errMsg = `${this._logPrefix()} MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'}: powerDivider have zero or below value ${this._stationInfo.powerDivider}`;
             logger.error(errMsg);
             throw Error(errMsg);
           }
           if (Utils.isUndefined(meterValuesTemplate[index].value)) {
-            const measurandValue = Utils.getRandomInt(self._stationInfo.maxPower / (self._stationInfo.powerDivider * 3600000) * interval);
+            const measurandValue = Utils.getRandomInt(this._stationInfo.maxPower / (this._stationInfo.powerDivider * 3600000) * interval);
             // Persist previous value in connector
             if (connector && !Utils.isNullOrUndefined(connector.lastEnergyActiveImportRegisterValue) && connector.lastEnergyActiveImportRegisterValue >= 0) {
               connector.lastEnergyActiveImportRegisterValue += measurandValue;
@@ -811,31 +845,31 @@ export default class ChargingStation {
             }
           }
           sampledValues.sampledValue.push({
-            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? {unit: meterValuesTemplate[index].unit} : {unit: 'Wh'},
-            ...!Utils.isUndefined(meterValuesTemplate[index].context) && {context: meterValuesTemplate[index].context},
-            ...!Utils.isUndefined(meterValuesTemplate[index].measurand) && {measurand: meterValuesTemplate[index].measurand},
-            ...!Utils.isUndefined(meterValuesTemplate[index].location) && {location: meterValuesTemplate[index].location},
-            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? {value: meterValuesTemplate[index].value} : {value: connector.lastEnergyActiveImportRegisterValue},
+            ...!Utils.isUndefined(meterValuesTemplate[index].unit) ? { unit: meterValuesTemplate[index].unit } : { unit: 'Wh' },
+            ...!Utils.isUndefined(meterValuesTemplate[index].context) && { context: meterValuesTemplate[index].context },
+            ...!Utils.isUndefined(meterValuesTemplate[index].measurand) && { measurand: meterValuesTemplate[index].measurand },
+            ...!Utils.isUndefined(meterValuesTemplate[index].location) && { location: meterValuesTemplate[index].location },
+            ...!Utils.isUndefined(meterValuesTemplate[index].value) ? { value: meterValuesTemplate[index].value } : { value: connector.lastEnergyActiveImportRegisterValue },
           });
           const sampledValuesIndex = sampledValues.sampledValue.length - 1;
-          const maxConsumption = Math.round(self._stationInfo.maxPower * 3600 / (self._stationInfo.powerDivider * interval));
+          const maxConsumption = Math.round(this._stationInfo.maxPower * 3600 / (this._stationInfo.powerDivider * interval));
           if (sampledValues.sampledValue[sampledValuesIndex].value > maxConsumption || debug) {
-            logger.error(`${self._logPrefix()} MeterValues measurand ${sampledValues.sampledValue[sampledValuesIndex].measurand ? sampledValues.sampledValue[sampledValuesIndex].measurand : 'Energy.Active.Import.Register'}: connectorId ${connectorId}, transaction ${connector.transactionId}, value: ${sampledValues.sampledValue[sampledValuesIndex].value}/${maxConsumption}`);
+            logger.error(`${this._logPrefix()} MeterValues measurand ${sampledValues.sampledValue[sampledValuesIndex].measurand ? sampledValues.sampledValue[sampledValuesIndex].measurand : 'Energy.Active.Import.Register'}: connectorId ${connectorId}, transaction ${connector.transactionId}, value: ${sampledValues.sampledValue[sampledValuesIndex].value}/${maxConsumption}`);
           }
         // Unsupported measurand
         } else {
-          logger.info(`${self._logPrefix()} Unsupported MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'} on connectorId ${connectorId}`);
+          logger.info(`${this._logPrefix()} Unsupported MeterValues measurand ${meterValuesTemplate[index].measurand ? meterValuesTemplate[index].measurand : 'Energy.Active.Import.Register'} on connectorId ${connectorId}`);
         }
       }
 
       const payload = {
         connectorId,
-        transactionId: self.getConnector(connectorId).transactionId,
+        transactionId: this.getConnector(connectorId).transactionId,
         meterValue: sampledValues,
       };
-      await self.sendMessage(Utils.generateUUID(), payload, Constants.OCPP_JSON_CALL_MESSAGE, 'MeterValues');
+      await this.sendMessage(Utils.generateUUID(), payload, Constants.OCPP_JSON_CALL_MESSAGE, 'MeterValues');
     } catch (error) {
-      logger.error(self._logPrefix() + ' Send MeterValues error: ' + error);
+      logger.error(this._logPrefix() + ' Send MeterValues error: ' + error);
       throw error;
     }
   }
@@ -848,9 +882,8 @@ export default class ChargingStation {
   }
 
   sendMessage(messageId, command, messageType = Constants.OCPP_JSON_CALL_RESULT_MESSAGE, commandName = '') {
-    // Send a message through wsConnection
     const self = this;
-    // Create a promise
+    // Send a message through wsConnection
     return new Promise((resolve, reject) => {
       let messageToSend;
       // Type of message
@@ -901,18 +934,13 @@ export default class ChargingStation {
 
       // Function that will receive the request's response
       function responseCallback(payload, requestPayload) {
-        self.handleResponse(commandName, payload, requestPayload, self);
+        self.handleResponse(commandName, payload, requestPayload);
         // Send the response
         resolve(payload);
       }
 
       // Function that will receive the request's rejection
-      function rejectCallback(error) {
-        if (!(error instanceof OCPPError)) {
-          const errMsg = `${self._logPrefix()} Argument error is not an instance of OCPPError in rejectCallback call`;
-          logger.error(errMsg);
-          throw Error(errMsg);
-        }
+      function rejectCallback(error: OCPPError) {
         logger.debug(`${self._logPrefix()} Error %j on commandName %s command %j`, error, commandName, command);
         if (self.getEnableStatistics()) {
           self._statistics.addMessage(`Error on commandName ${commandName}`, true);
@@ -926,20 +954,19 @@ export default class ChargingStation {
     });
   }
 
-  // eslint-disable-next-line class-methods-use-this
-  handleResponse(commandName, payload, requestPayload, self) {
-    if (self.getEnableStatistics()) {
-      self._statistics.addMessage(commandName, true);
+  handleResponse(commandName, payload, requestPayload) {
+    if (this.getEnableStatistics()) {
+      this._statistics.addMessage(commandName, true);
     }
     const responseCallbackFn = 'handleResponse' + commandName;
-    if (typeof self[responseCallbackFn] === 'function') {
-      self[responseCallbackFn](payload, requestPayload, self);
+    if (typeof this[responseCallbackFn] === 'function') {
+      this[responseCallbackFn](payload, requestPayload);
     } else {
-      logger.error(self._logPrefix() + ' Trying to call an undefined response callback function: ' + responseCallbackFn);
+      logger.error(this._logPrefix() + ' Trying to call an undefined response callback function: ' + responseCallbackFn);
     }
   }
 
-  handleResponseBootNotification(payload) {
+  handleResponseBootNotification(payload, requestPayload) {
     if (payload.status === 'Accepted') {
       this._heartbeatInterval = payload.interval * 1000;
       this._addConfigurationKey('HeartBeatInterval', Utils.convertToInt(payload.interval));
@@ -1006,7 +1033,7 @@ export default class ChargingStation {
   handleResponseStopTransaction(payload, requestPayload) {
     let transactionConnectorId;
     for (const connector in this._connectors) {
-      if (this.getConnector(connector).transactionId === requestPayload.transactionId) {
+      if (this.getConnector(Utils.convertToInt(connector)).transactionId === requestPayload.transactionId) {
         transactionConnectorId = connector;
         break;
       }
@@ -1150,7 +1177,7 @@ export default class ChargingStation {
   async handleRequestChangeConfiguration(commandPayload) {
     const keyToChange = this._getConfigurationKey(commandPayload.key);
     if (!keyToChange) {
-      return {status: Constants.OCPP_ERROR_NOT_SUPPORTED};
+      return { status: Constants.OCPP_ERROR_NOT_SUPPORTED };
     } else if (keyToChange && Utils.convertToBoolean(keyToChange.readonly)) {
       return Constants.OCPP_RESPONSE_REJECTED;
     } else if (keyToChange && !Utils.convertToBoolean(keyToChange.readonly)) {
@@ -1170,7 +1197,7 @@ export default class ChargingStation {
         // Stop heartbeat
         this._stopHeartbeat();
         // Start heartbeat
-        this._startHeartbeat(this);
+        this._startHeartbeat();
       }
       if (Utils.convertToBoolean(keyToChange.reboot)) {
         return Constants.OCPP_RESPONSE_REBOOT_REQUIRED;
@@ -1200,7 +1227,7 @@ export default class ChargingStation {
 
   async handleRequestRemoteStopTransaction(commandPayload) {
     for (const connector in this._connectors) {
-      if (this.getConnector(connector).transactionId === commandPayload.transactionId) {
+      if (this.getConnector(Utils.convertToInt(connector)).transactionId === commandPayload.transactionId) {
         this.sendStopTransaction(commandPayload.transactionId);
         return Constants.OCPP_RESPONSE_ACCEPTED;
       }
similarity index 66%
rename from src/charging-station/OcppError.js
rename to src/charging-station/OcppError.ts
index 2bef07d4f2770b91e047738fe3ed48e45e5f5c07..a43c62d30fc07791fe6195bd0d76942b3ce74d19 100644 (file)
@@ -1,14 +1,17 @@
-import Constants from '../utils/Constants.js';
+import Constants from '../utils/Constants';
 
 export default class OCPPError extends Error {
-  constructor(code, message, details) {
+  code;
+  details;
+
+  constructor(code, message, details?) {
     super(message);
 
     this.code = code || Constants.OCPP_ERROR_GENERIC_ERROR;
     this.message = message || '';
     this.details = details || {};
 
-    Object.setPrototypeOf(this, OCPPError.prototype); // for instanceof
+    Object.setPrototypeOf(this, OCPPError.prototype); // For instanceof
 
     Error.captureStackTrace ? Error.captureStackTrace(this, this.constructor) : (this.stack = (new Error()).stack);
   }
similarity index 53%
rename from src/charging-station/StationWorker.js
rename to src/charging-station/StationWorker.ts
index f306c6ec42994d23d0eb9ddc8b2b960e996a7dcd..f54334e952d4cb86e0f50557209e87757c68b2a1 100644 (file)
@@ -1,6 +1,6 @@
-import {isMainThread, workerData} from 'worker_threads';
+import { isMainThread, workerData } from 'worker_threads';
 
-import ChargingStation from './ChargingStation.js';
+import ChargingStation from './ChargingStation';
 
 if (!isMainThread) {
   const station = new ChargingStation(workerData.index, workerData.templateFile);
similarity index 67%
rename from src/charging-station/Worker.js
rename to src/charging-station/Worker.ts
index cc8358559c5ce29d4bbda526b8de402309203de6..93aade5046b44284ee4604e1b17df0e3a9f5d46d 100644 (file)
@@ -1,9 +1,13 @@
-import Configuration from '../utils/Configuration.js';
-import EventEmitter from 'events';
+import Configuration from '../utils/Configuration';
 import Pool from 'worker-threads-pool';
-import {Worker} from 'worker_threads';
+import { Worker } from 'worker_threads';
 
 export default class Wrk {
+  private _workerData;
+  private _workerScript;
+  private _pool;
+  private _concurrentWorkers: number;
+
   /**
    * Create a new `Wrk`.
    *
@@ -16,7 +20,7 @@ export default class Wrk {
     this._workerScript = workerScript;
     this._numConcurrentWorkers = numConcurrentWorkers;
     if (Configuration.useWorkerPool()) {
-      this._pool = new Pool({max: Configuration.getWorkerPoolSize()});
+      this._pool = new Pool({ max: Configuration.getWorkerPoolSize() });
     }
   }
 
@@ -24,25 +28,34 @@ export default class Wrk {
    * @param {Number} numConcurrentWorkers
    * @private
    */
-  set _numConcurrentWorkers(numConcurrentWorkers) {
-    if (numConcurrentWorkers > 10) {
-      EventEmitter.defaultMaxListeners = numConcurrentWorkers + 1;
-    }
+  set _numConcurrentWorkers(numConcurrentWorkers: number) {
     this._concurrentWorkers = numConcurrentWorkers;
   }
 
-  get _numConcurrentWorkers() {
+  get _numConcurrentWorkers(): number {
     return this._concurrentWorkers;
   }
 
+  /**
+   *
+   * @return {Promise}
+   * @public
+   */
+  async start(): Promise<unknown> {
+    if (Configuration.useWorkerPool()) {
+      return this._startWorkerWithPool();
+    }
+    return this._startWorker();
+  }
+
   /**
    *
    * @return {Promise}
    * @private
    */
-  _startWorkerWithPool() {
+  private async _startWorkerWithPool() {
     return new Promise((resolve, reject) => {
-      this._pool.acquire(this._workerScript, {workerData: this._workerData}, (err, worker) => {
+      this._pool.acquire(this._workerScript, { workerData: this._workerData }, (err, worker) => {
         if (err) {
           return reject(err);
         }
@@ -57,9 +70,9 @@ export default class Wrk {
    * @return {Promise}
    * @private
    */
-  _startWorker() {
+  private async _startWorker() {
     return new Promise((resolve, reject) => {
-      const worker = new Worker(this._workerScript, {workerData: this._workerData});
+      const worker = new Worker(this._workerScript, { workerData: this._workerData });
       worker.on('message', resolve);
       worker.on('error', reject);
       worker.on('exit', (code) => {
@@ -69,16 +82,4 @@ export default class Wrk {
       });
     });
   }
-
-  /**
-   *
-   * @return {Promise}
-   * @public
-   */
-  start() {
-    if (Configuration.useWorkerPool()) {
-      return this._startWorkerWithPool();
-    }
-    return this._startWorker();
-  }
 }
similarity index 79%
rename from src/start.js
rename to src/start.ts
index 0027fbae2dc4dee55e41bf368ada520957eb53a1..baef77d120b6022ec3ecb762bf7aff8de0a22302 100644 (file)
@@ -1,10 +1,10 @@
-import Configuration from './utils/Configuration.js';
-import Utils from './utils/Utils.js';
-import Wrk from './charging-station/Worker.js';
-import logger from './utils/Logger.js';
+import Configuration from './utils/Configuration';
+import Utils from './utils/Utils';
+import Wrk from './charging-station/Worker';
+import logger from './utils/Logger';
 
 class Bootstrap {
-  static async start() {
+  static start() {
     try {
       logger.debug('%s Configuration: %j', Utils.logPrefix(), Configuration.getConfig());
       let numStationsTotal = 0;
@@ -15,11 +15,11 @@ class Bootstrap {
             const nbStation = stationURL.numberOfStation ? stationURL.numberOfStation : 0;
             numStationsTotal += nbStation;
             for (let index = 1; index <= nbStation; index++) {
-              const worker = new Wrk('./src/charging-station/StationWorker.js', {
+              const worker = new Wrk('./dist/charging-station/StationWorker.js', {
                 index,
                 templateFile: stationURL.file,
               }, numStationsTotal);
-              worker.start();
+              worker.start().catch(() => {});
             }
           } catch (error) {
             // eslint-disable-next-line no-console
@@ -32,7 +32,7 @@ class Bootstrap {
       if (numStationsTotal === 0) {
         console.log('No charging station template enabled in configuration, exiting');
       } else {
-        console.log('Charging station simulator started with ' + numStationsTotal + ' charging station(s)');
+        console.log('Charging station simulator started with ' + numStationsTotal.toString() + ' charging station(s)');
       }
     } catch (error) {
       // eslint-disable-next-line no-console
diff --git a/src/types/MeasurandValues.ts b/src/types/MeasurandValues.ts
new file mode 100644 (file)
index 0000000..dbbec65
--- /dev/null
@@ -0,0 +1,6 @@
+export interface MeasurandValues {
+  L1: number;
+  L2: number;
+  L3: number;
+  all: number;
+}
similarity index 98%
rename from src/utils/Configuration.js
rename to src/utils/Configuration.ts
index c8e96f032f6415f5835cf6f17468160747a488c4..b6642358e2ed861eed411f5b600ee022952f771d 100644 (file)
@@ -1,4 +1,4 @@
-import Utils from './Utils.js';
+import Utils from './Utils';
 import fs from 'fs';
 
 export default class Configuration {
similarity index 93%
rename from src/utils/Constants.js
rename to src/utils/Constants.ts
index 7667738004b954911316a2a7a69793d3038fea6b..cdc4dc75146a6e828d918bc4165ea77f691c50af 100644 (file)
@@ -1,5 +1,5 @@
 export default class Constants {
-  static REST_RESPONSE_SUCCESS = {status: 'Success'};
+  static REST_RESPONSE_SUCCESS = { status: 'Success' };
 
   static CONN_STATUS_AVAILABLE = 'Available';
   static CONN_STATUS_OCCUPIED = 'Occupied';
@@ -101,9 +101,9 @@ export default class Constants {
 
   static WS_UNSUPPORTED_DATA = 1007;
 
-  static OCPP_RESPONSE_ACCEPTED = {status: 'Accepted'};
-  static OCPP_RESPONSE_REJECTED = {status: 'Rejected'};
-  static OCPP_RESPONSE_REBOOT_REQUIRED = {status: 'RebootRequired'};
+  static OCPP_RESPONSE_ACCEPTED = { status: 'Accepted' };
+  static OCPP_RESPONSE_REJECTED = { status: 'Rejected' };
+  static OCPP_RESPONSE_REBOOT_REQUIRED = { status: 'RebootRequired' };
   static OCPP_SOCKET_TIMEOUT = 60000; // 60 sec
   static OCPP_JSON_CALL_MESSAGE = 2; // Client-to-Server
   static OCPP_JSON_CALL_RESULT_MESSAGE = 3; // Server-to-Client
@@ -139,6 +139,6 @@ export default class Constants {
   static STATUS_NOTIFICATION_TIMEOUT = 500;
   static START_TRANSACTION_TIMEOUT = 500;
 
-  static CHARGING_STATION_DEFAULT_RESET_TIME = 60000; // ms
-  static CHARGING_STATION_ATG_WAIT_TIME = 2000; // ms
+  static CHARGING_STATION_DEFAULT_RESET_TIME = 60000; // Ms
+  static CHARGING_STATION_ATG_WAIT_TIME = 2000; // Ms
 }
similarity index 67%
rename from src/utils/ElectricUtils.js
rename to src/utils/ElectricUtils.ts
index 3d76b8dba34c1f6d728c3690240dfba21cdccf04..7df3db730af0d04b4580f3898a07dc5e87f1f295 100644 (file)
@@ -3,11 +3,11 @@
  * To use for DC, always consider cosPhi = 1 and do not use per phase helpers
  */
 export default class ElectricUtils {
-  static ampTotal(nbOfPhases, Iph) {
+  static ampTotal(nbOfPhases: number, Iph: number): number {
     return nbOfPhases * Iph;
   }
 
-  static powerPerPhase(V, Iph, cosPhi = 1) {
+  static powerPerPhase(V: number, Iph: number, cosPhi = 1): number {
     const powerPerPhase = V * Iph * cosPhi;
     if (cosPhi === 1) {
       return powerPerPhase;
@@ -15,11 +15,11 @@ export default class ElectricUtils {
     return Math.round(powerPerPhase);
   }
 
-  static powerTotal(nbOfPhases, V, Iph, cosPhi = 1) {
+  static powerTotal(nbOfPhases: number, V: number, Iph: number, cosPhi = 1): number {
     return nbOfPhases * ElectricUtils.powerPerPhase(V, Iph, cosPhi);
   }
 
-  static ampTotalFromPower(P, V, cosPhi = 1) {
+  static ampTotalFromPower(P: number, V: number, cosPhi = 1): number {
     const power = P / (V * cosPhi);
     if (cosPhi === 1 && P % V === 0) {
       return power;
@@ -27,7 +27,7 @@ export default class ElectricUtils {
     return Math.round(power);
   }
 
-  static ampPerPhaseFromPower(nbOfPhases, P, V, cosPhi = 1) {
+  static ampPerPhaseFromPower(nbOfPhases: number, P: number, V: number, cosPhi = 1): number {
     const power = ElectricUtils.ampTotalFromPower(P, V, cosPhi);
     const powerPerPhase = power / nbOfPhases;
     if (power % nbOfPhases === 0) {
similarity index 77%
rename from src/utils/Logger.js
rename to src/utils/Logger.ts
index 42d9d3076f19c8c661feda26269f851bb4c61fad..736e9b89732f73435683c014fca1fd6b2ce909c4 100644 (file)
@@ -1,4 +1,4 @@
-import Configuration from './Configuration.js';
+import Configuration from './Configuration';
 import Winston from 'winston';
 
 const logger = Winston.createLogger({
@@ -9,8 +9,8 @@ const logger = Winston.createLogger({
     // - Write to all logs with level `info` and below to `combined.log`
     // - Write all logs error (and below) to `error.log`.
     //
-    new Winston.transports.File({filename: Configuration.getErrorFile(), level: 'error'}),
-    new Winston.transports.File({filename: Configuration.getLogFile()}),
+    new Winston.transports.File({ filename: Configuration.getErrorFile(), level: 'error' }),
+    new Winston.transports.File({ filename: Configuration.getLogFile() }),
   ],
 });
 
similarity index 86%
rename from src/utils/Statistics.js
rename to src/utils/Statistics.ts
index 85165097098354546b4f0eb589f5cd3e276ee3ce..a2e0d030f009221fe5bf69cef6a8aee51353c75e 100644 (file)
@@ -1,29 +1,27 @@
-import Configuration from './Configuration.js';
-import Utils from './Utils.js';
-import logger from './Logger.js';
+import Configuration from './Configuration';
+import Utils from './Utils';
+import logger from './Logger';
 
 export default class Statistics {
-  static instance;
+  private static instance: Statistics;
+  private _statistics;
+  private _objName: string;
 
-  constructor() {
+  private constructor() {
     this._statistics = {};
   }
 
-  set objName(objName) {
+  set objName(objName: string) {
     this._objName = objName;
   }
 
-  static getInstance() {
+  static getInstance(): Statistics {
     if (!Statistics.instance) {
       Statistics.instance = new Statistics();
     }
     return Statistics.instance;
   }
 
-  _logPrefix() {
-    return Utils.logPrefix(` ${this._objName} Statistics:`);
-  }
-
   addMessage(command, response = false) {
     if (response) {
       if (this._statistics[command]) {
@@ -72,16 +70,16 @@ export default class Statistics {
     }
   }
 
-  logPerformance(entry, className) {
+  logPerformance(entry, className: string): void {
     this.addPerformanceTimer(entry.name, entry.duration);
     logger.info(`${this._logPrefix()} class->${className}, method->${entry.name}, duration->${entry.duration}`);
   }
 
-  _display() {
+  _display(): void {
     logger.info(this._logPrefix() + ' %j', this._statistics);
   }
 
-  _displayInterval() {
+  _displayInterval(): void {
     if (Configuration.getStatisticsDisplayInterval() > 0) {
       setInterval(() => {
         this._display();
@@ -90,7 +88,11 @@ export default class Statistics {
     }
   }
 
-  async start() {
+  start(): void {
     this._displayInterval();
   }
+
+  private _logPrefix(): string {
+    return Utils.logPrefix(` ${this._objName} Statistics:`);
+  }
 }
similarity index 71%
rename from src/utils/Utils.js
rename to src/utils/Utils.ts
index 9d071a415faabcb5a086ce1a6ab765d8320736bc..c54bb17fa7431c587d21548b6923975d058bb5b4 100644 (file)
@@ -1,21 +1,21 @@
-import {v4 as uuid} from 'uuid';
+import { v4 as uuid } from 'uuid';
 
 export default class Utils {
-  static generateUUID() {
+  static generateUUID(): string {
     return uuid();
   }
 
-  static sleep(ms) {
+  static async sleep(ms: number): Promise<NodeJS.Timeout> {
     return new Promise((resolve) => setTimeout(resolve, ms));
   }
 
-  static secondstoHHMMSS(seconds) {
-    const date = new Date(null);
+  static secondstoHHMMSS(seconds): string {
+    const date = new Date();
     date.setSeconds(seconds);
     return date.toISOString().substr(11, 8);
   }
 
-  static removeExtraEmptyLines(tab) {
+  static removeExtraEmptyLines(tab): void {
     // Start from the end
     for (let i = tab.length - 1; i > 0; i--) {
       // Two consecutive empty lines?
@@ -31,30 +31,19 @@ export default class Utils {
     }
   }
 
-  static convertToDate(date) {
+  static convertToDate(value): Date {
     // Check
-    if (!date) {
-      return date;
+    if (!value) {
+      return value;
     }
     // Check Type
-    if (!(date instanceof Date)) {
-      return new Date(date);
-    }
-    return date;
-  }
-
-  static convertToObjectID(id) {
-    let changedID = id;
-    // Check
-    if (typeof id === 'string') {
-      // Create Object
-      // eslint-disable-next-line no-undef
-      changedID = new ObjectID(id);
+    if (!(value instanceof Date)) {
+      return new Date(value);
     }
-    return changedID;
+    return value;
   }
 
-  static convertToInt(value) {
+  static convertToInt(value): number {
     let changedValue = value;
     if (!value) {
       return 0;
@@ -70,7 +59,7 @@ export default class Utils {
     return changedValue;
   }
 
-  static convertToFloat(value) {
+  static convertToFloat(value): number {
     let changedValue = value;
     if (!value) {
       return 0;
@@ -83,7 +72,7 @@ export default class Utils {
     return changedValue;
   }
 
-  static convertToBoolean(value) {
+  static convertToBoolean(value): boolean {
     let result = false;
     // Check boolean
     if (value) {
@@ -99,29 +88,29 @@ export default class Utils {
     return result;
   }
 
-  static getRandomFloat(max, min = 0) {
+  static getRandomFloat(max: number, min = 0): number {
     return Math.random() < 0.5 ? (1 - Math.random()) * (max - min) + min : Math.random() * (max - min) + min;
   }
 
-  static getRandomInt(max, min = 0) {
+  static getRandomInt(max: number, min = 0): number {
     if (min) {
       return Math.floor(Math.random() * (max - min + 1) + min);
     }
     return Math.floor(Math.random() * max + 1);
   }
 
-  static roundTo(number, scale) {
+  static roundTo(number: number, scale: number): number {
     return Utils.convertToFloat(number.toFixed(scale));
   }
 
-  static getRandomFloatRounded(max, min = 0, scale = 2) {
+  static getRandomFloatRounded(max: number, min = 0, scale = 2): number {
     if (min) {
       return Utils.roundTo(Utils.getRandomFloat(max, min), scale);
     }
     return Utils.roundTo(Utils.getRandomFloat(max), scale);
   }
 
-  static logPrefix(prefixString = '') {
+  static logPrefix(prefixString = ''): string {
     const date = new Date();
     return date.toLocaleString() + prefixString;
   }
@@ -134,14 +123,14 @@ export default class Utils {
     return JSON.parse(JSON.stringify(object));
   }
 
-  static isIterable(obj) {
+  static isIterable(obj): boolean {
     if (obj) {
       return typeof obj[Symbol.iterator] === 'function';
     }
     return false;
   }
 
-  static isEmptyJSon(document) {
+  static isEmptyJSon(document): boolean {
     // Empty?
     if (!document) {
       return true;
@@ -154,7 +143,7 @@ export default class Utils {
     return Object.keys(document).length === 0;
   }
 
-  static isString(value) {
+  static isString(value): boolean {
     return typeof value === 'string';
   }
 
@@ -162,22 +151,22 @@ export default class Utils {
     return typeof value === 'undefined';
   }
 
-  static isNullOrUndefined(value) {
-    // eslint-disable-next-line eqeqeq
+  static isNullOrUndefined(value): boolean {
+    // eslint-disable-next-line no-eq-null
     if (value == null) {
       return true;
     }
     return false;
   }
 
-  static isEmptyArray(object) {
+  static isEmptyArray(object): boolean {
     if (Array.isArray(object) && object.length > 0) {
       return false;
     }
     return true;
   }
 
-  static isEmptyObject(obj) {
+  static isEmptyObject(obj): boolean {
     return !Object.keys(obj).length;
   }
 }
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644 (file)
index 0000000..2fc552e
--- /dev/null
@@ -0,0 +1,72 @@
+{
+  "compilerOptions": {
+    /* Visit https://aka.ms/tsconfig.json to read more about this file */
+
+    /* Basic Options */
+    // "incremental": true,                   /* Enable incremental compilation */
+    "target": "es2020",                       /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
+    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
+    "lib": [
+      "es2020"
+    ],                                        /* Specify library files to be included in the compilation. */
+    // "allowJs": true,                       /* Allow javascript files to be compiled. */
+    // "checkJs": true,                       /* Report errors in .js files. */
+    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
+    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
+    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
+    "sourceMap": true,                        /* Generates corresponding '.map' file. */
+    // "outFile": "./",                       /* Concatenate and emit output to single file. */
+    "outDir": "./dist",                       /* Redirect output structure to the directory. */
+    // "rootDir": "./",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
+    // "composite": true,                     /* Enable project compilation */
+    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
+    // "removeComments": true,                /* Do not emit comments to output. */
+    // "noEmit": true,                        /* Do not emit outputs. */
+    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
+    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
+    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
+
+    /* Strict Type-Checking Options */
+    // "strict": true,                        /* Enable all strict type-checking options. */
+    // "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
+    // "strictNullChecks": true,              /* Enable strict null checks. */
+    // "strictFunctionTypes": true,           /* Enable strict checking of function types. */
+    // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
+    // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
+    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
+    // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */
+
+    /* Additional Checks */
+    // "noUnusedLocals": true,                /* Report errors on unused locals. */
+    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
+    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
+    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */
+
+    /* Module Resolution Options */
+    // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
+    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
+    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
+    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
+    // "typeRoots": [],                       /* List of folders to include type definitions from. */
+    // "types": [],                           /* Type declaration files to be included in compilation. */
+    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
+    "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
+    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
+    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */
+
+    /* Source Map Options */
+    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
+    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
+    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
+    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
+
+    /* Experimental Options */
+    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
+    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */
+
+    /* Advanced Options */
+    "skipLibCheck": true,                     /* Skip type checking of declaration files. */
+    "forceConsistentCasingInFileNames": true  /* Disallow inconsistently-cased references to the same file. */
+  },
+  "include": ["./src/**/*"]
+}