From 616135962a818e2987eb8d11f431453fd8450cdd Mon Sep 17 00:00:00 2001
From: Wojciech Maj <kontakt@wojtekmaj.pl>
Date: Fri, 23 Nov 2018 13:49:58 +0100
Subject: [PATCH 1/2] Fix badly formatted .eslintrc

---
 .eslintrc      | 2 +-
 test/.eslintrc | 2 +-
 web/.eslintrc  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/.eslintrc b/.eslintrc
index ca3c43649..19c43c214 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -16,7 +16,7 @@
     "amd": true,
   },
 
-  globals: {
+  "globals": {
     "PDFJSDev": false,
     "exports": false,
     "SystemJS": false,
diff --git a/test/.eslintrc b/test/.eslintrc
index 23c10b9df..e41ade95b 100644
--- a/test/.eslintrc
+++ b/test/.eslintrc
@@ -1,6 +1,6 @@
 {
   "extends": [
-    ../.eslintrc
+    "../.eslintrc"
   ],
 
   "env": {
diff --git a/web/.eslintrc b/web/.eslintrc
index 1c31729d5..4a0b538f6 100644
--- a/web/.eslintrc
+++ b/web/.eslintrc
@@ -1,6 +1,6 @@
 {
   "extends": [
-    ../.eslintrc
+    "../.eslintrc"
   ],
 
   "rules": {

From 9921f92a369c6d6b253cba03a1fdc991d86e9897 Mon Sep 17 00:00:00 2001
From: Wojciech Maj <kontakt@wojtekmaj.pl>
Date: Fri, 23 Nov 2018 13:50:28 +0100
Subject: [PATCH 2/2] Enable eslint-plugin-import to prevent unresolved paths

---
 .eslintrc         |   2 +
 package-lock.json | 110 ++++++++++++++++++++++++++++++++++++++++++++++
 package.json      |   1 +
 web/.eslintrc     |   3 ++
 4 files changed, 116 insertions(+)

diff --git a/.eslintrc b/.eslintrc
index 19c43c214..7b6dbf980 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -5,6 +5,7 @@
   },
 
   "plugins": [
+    "import",
     "mozilla",
     "unicorn",
   ],
@@ -24,6 +25,7 @@
 
   "rules": {
     // Plugins
+    "import/no-unresolved": "error",
     "mozilla/avoid-removeChild": "error",
     "mozilla/use-includes-instead-of-indexOf": "error",
     "unicorn/no-array-instanceof": "error",
diff --git a/package-lock.json b/package-lock.json
index a156d03cb..c667bcf04 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1959,6 +1959,12 @@
       "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.5.1",
       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
@@ -2693,6 +2699,86 @@
         "lodash.zip": "^4.2.0"
       }
     },
+    "eslint-import-resolver-node": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
+      "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+      "dev": true,
+      "requires": {
+        "debug": "^2.6.9",
+        "resolve": "^1.5.0"
+      }
+    },
+    "eslint-module-utils": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz",
+      "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
+      "dev": true,
+      "requires": {
+        "debug": "^2.6.8",
+        "pkg-dir": "^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-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"
+          }
+        }
+      }
+    },
+    "eslint-plugin-import": {
+      "version": "2.14.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz",
+      "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==",
+      "dev": true,
+      "requires": {
+        "contains-path": "^0.1.0",
+        "debug": "^2.6.8",
+        "doctrine": "1.5.0",
+        "eslint-import-resolver-node": "^0.3.1",
+        "eslint-module-utils": "^2.2.0",
+        "has": "^1.0.1",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.3",
+        "read-pkg-up": "^2.0.0",
+        "resolve": "^1.6.0"
+      },
+      "dependencies": {
+        "doctrine": {
+          "version": "1.5.0",
+          "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+          "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+          "dev": true,
+          "requires": {
+            "esutils": "^2.0.2",
+            "isarray": "^1.0.0"
+          }
+        }
+      }
+    },
     "eslint-plugin-mozilla": {
       "version": "0.14.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-mozilla/-/eslint-plugin-mozilla-0.14.0.tgz",
@@ -4379,6 +4465,15 @@
         "glogg": "^1.0.0"
       }
     },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
     "has-ansi": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
@@ -11626,6 +11721,21 @@
       "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
       "dev": true
     },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
+    },
+    "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",
diff --git a/package.json b/package.json
index 3769ae4a8..f2a36bc19 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
     "core-js": "^2.5.7",
     "escodegen": "^1.11.0",
     "eslint": "^5.9.0",
+    "eslint-plugin-import": "^2.14.0",
     "eslint-plugin-mozilla": "^0.14.0",
     "eslint-plugin-no-unsanitized": "^3.0.2",
     "eslint-plugin-unicorn": "^4.0.3",
diff --git a/web/.eslintrc b/web/.eslintrc
index 4a0b538f6..4bf1e6286 100644
--- a/web/.eslintrc
+++ b/web/.eslintrc
@@ -4,6 +4,9 @@
   ],
 
   "rules": {
+    // Plugins
+    "import/no-unresolved": ["error", { "ignore": ["pdfjs-lib"]}],
+
     // ECMAScript 6
     "no-var": "error",
   },