diff --git a/.editorconfig b/.editorconfig index 0f1786729..5d1263484 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,9 +1,13 @@ +# editorconfig.org root = true [*] -charset = utf-8 -end_of_line = lf -indent_size = 2 indent_style = space -insert_final_newline = true +indent_size = 2 +end_of_line = lf +charset = utf-8 trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.eslintrc.js b/.eslintrc.js index d262d9909..8ff448efd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,20 @@ module.exports = { - "extends": "airbnb-base", - "rules": { - "no-param-reassign": 0 - } -}; + root: true, + env: { + browser: true, + node: true + }, + parserOptions: { + parser: 'babel-eslint' + }, + extends: [ + '@nuxtjs', + 'prettier', + 'prettier/vue', + 'plugin:prettier/recommended', + 'plugin:nuxt/recommended' + ], + plugins: [ + 'prettier' + ], +} diff --git a/.gitignore b/.gitignore index 4c54d94c3..d189d1a98 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ /build/* -/src/icons/converted/* /node_modules /npm-debug.log /npm-debug.log diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..59639c50d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "arrowParens": "always", + "singleQuote": true +} diff --git a/.travis.yml b/.travis.yml index a57aeafd9..8803db3d8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,20 @@ services: - docker -before_install: npm install -g npm@latest -install: npm ci - after_success: - sha256sum build/* > build/SHA256SUMS - cat build/SHA256SUMS +cache: + yarn: true + directories: + - node_modules + script: - >- - version=$(grep '"version":' src/drivers/webextension/manifest.json | sed 's/^.*"version": "\(.*\)".*$/\1/') ; - ./run build $version ; + version=$(grep '"version":' src/drivers/webextension/manifest.json | sed 's/^.*"version": "\(.*\)".*$/\1/') && + echo Version is $version && + ./run build $version && docker build -t wappalyzer/cli:latest -t wappalyzer/cli:$version src/drivers/npm env: diff --git a/Dockerfile b/Dockerfile index e7c9e6806..9258d45fd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,13 +4,14 @@ LABEL maintainer="elbert@alias.io" ENV WAPPALYZER_DIR=/opt/wappalyzer -RUN apk update && apk add --no-cache \ +RUN apk update && apk add -u --no-cache \ bash \ curl \ fontconfig \ nodejs-npm \ optipng \ - zip + zip \ + yarn # Fixes PhantomJS # https://github.com/dustinblackman/phantomized diff --git a/bin/build b/bin/build index d856bb995..7f88615f8 100755 --- a/bin/build +++ b/bin/build @@ -26,14 +26,14 @@ sed -e 's/\\\\/{{ESCAPE}}/g' src/apps.json | jsonlint-cli -ps | sed -e 's/{{ESCA echo "Converting SVG icons to PNG..." -svg2png-many -i src/icons/ -o src/icons/converted/ --width=32 --height=32 +svg2png-many -i src/drivers/webextension/images/icons/ -o src/drivers/webextension/images/icons/converted/ --width=32 --height=32 echo "Compressing PNG icons..." set +e -optipng -quiet "src/icons/*.png" -optipng -quiet "src/icons/converted/*.png" +optipng -quiet "src/drivers/webextension/images/icons/*.png" +optipng -quiet "src/drivers/webextension/images/icons/converted/*.png" set -e diff --git a/bin/links b/bin/links index 3bbf1dc9f..1bcff8216 100755 --- a/bin/links +++ b/bin/links @@ -7,8 +7,10 @@ echo "Creating links..." ln -nf apps.json drivers/npm ln -nf wappalyzer.js drivers/npm +ln -nf apps.json drivers/puppeteer +ln -nf wappalyzer.js drivers/puppeteer + ln -nf apps.json drivers/webextension ln -nf wappalyzer.js drivers/webextension/js -ln -nsf ../../../icons/ drivers/webextension/images/icons echo "Done." diff --git a/bin/validate b/bin/validate index 2c60e5b90..3e5007a71 100755 --- a/bin/validate +++ b/bin/validate @@ -18,4 +18,4 @@ echo "Validating icons..." echo "Running tests..." -npm run test +yarn run test diff --git a/bin/validate-icons b/bin/validate-icons index e64efac02..8df841f16 100755 --- a/bin/validate-icons +++ b/bin/validate-icons @@ -1,60 +1,82 @@ #!/usr/bin/env node -var - app, - fs = require('fs'), - fileType = require('../node_modules/file-type'), - readChunk = require('../node_modules/read-chunk'), - isSvg = require('../node_modules/is-svg'), - json = require('../src/apps.json'), +let app +const fs = require('fs') +const fileType = require('../node_modules/file-type') +const readChunk = require('../node_modules/read-chunk') +const isSvg = require('../node_modules/is-svg') +const json = require('../src/apps.json') - basePath = 'src/icons/', - - iconPaths = [];//Will be used to check for stray icons +const basePath = 'src/drivers/webextension/images/icons/' +const iconPaths = [] // Will be used to check for stray icons for (app in json.apps) { - (function(app) { - var - iconPath = json.apps[app].icon || 'default.svg', - path = basePath + iconPath, - ext = iconPath.substr(iconPath.length - 4); - - iconPaths.push(iconPath) - - if ( ext !== '.png' && ext !== '.svg' ) { - throw err = new Error('Icon file extension specified for app "' + app + '" is not ".png" or ".svg": src/icons/' + iconPath); - } - - fs.exists(path, function(exists) { - if ( exists ) { - if ( ext === '.png' ) { - var buffer = fileType(readChunk.sync(path, 0, 262)); - - if ( buffer === null ) { - throw new Error('Unknown mimetype or bad file for "' + app + '": src/icons/' + iconPath); - } else if ( buffer.mime !== 'image/png' ) { - throw new Error('Incorrect mimetype "' + buffer.mime + '" when expected PNG for app "' + app + '": src/icons/' + iconPath); - } - } else if ( ext === '.svg' ) { - if ( !isSvg(fs.readFileSync(path)) ) { - throw new Error('Incorrect mimetype when expected SVG for app "' + app + '": src/icons/' + iconPath); - } - } - } else { - throw Error('Missing file for app "' + app + '": src/icons/' + iconPath); - } - }); - }(app)); -} + ;(function(app) { + const iconPath = json.apps[app].icon || 'default.svg' + const path = basePath + iconPath + const ext = iconPath.substr(iconPath.length - 4) + iconPaths.push(iconPath) -// Check for stray files in icons folder - fs.readdirSync(basePath).forEach(function(file) { - if (!fs.statSync(basePath + file).isDirectory()) { - if(iconPaths.indexOf(file) === -1){ - throw new Error('Stray file (no associated app): ' + basePath + file); - } - } - }); + if (ext !== '.png' && ext !== '.svg') { + throw (err = new Error( + 'Icon file extension specified for app "' + + app + + '" is not ".png" or ".svg": src/drivers/webextension/images/icons/' + + iconPath + )) + } + + fs.exists(path, function(exists) { + if (exists) { + if (ext === '.png') { + const buffer = fileType(readChunk.sync(path, 0, 262)) + if (buffer === null) { + throw new Error( + 'Unknown mimetype or bad file for "' + + app + + '": src/drivers/webextension/images/icons/' + + iconPath + ) + } else if (buffer.mime !== 'image/png') { + throw new Error( + 'Incorrect mimetype "' + + buffer.mime + + '" when expected PNG for app "' + + app + + '": src/drivers/webextension/images/icons/' + + iconPath + ) + } + } else if (ext === '.svg') { + if (!isSvg(fs.readFileSync(path))) { + throw new Error( + 'Incorrect mimetype when expected SVG for app "' + + app + + '": src/drivers/webextension/images/icons/' + + iconPath + ) + } + } + } else { + throw new Error( + 'Missing file for app "' + + app + + '": src/drivers/webextension/images/icons/' + + iconPath + ) + } + }) + })(app) +} + +// Check for stray files in icons folder +fs.readdirSync(basePath).forEach(function(file) { + if (!fs.statSync(basePath + file).isDirectory()) { + if (!iconPaths.includes(file)) { + throw new Error('Stray file (no associated app): ' + basePath + file) + } + } +}) diff --git a/src/icons/converted/.gitkeep b/build/.gitkeep similarity index 100% rename from src/icons/converted/.gitkeep rename to build/.gitkeep diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json deleted file mode 100644 index 221001f31..000000000 --- a/npm-shrinkwrap.json +++ /dev/null @@ -1,1781 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "acorn": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", - "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", - "dev": true, - "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", - "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - } - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "color-convert": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", - "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", - "dev": true, - "requires": { - "color-name": "1.1.1" - } - }, - "color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", - "dev": true - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "^1.1.1", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", - "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", - "dev": true, - "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.4", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^1.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "4.0.2", - "text-table": "~0.2.0" - } - }, - "eslint-config-airbnb-base": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.0.0.tgz", - "integrity": "sha512-hUFXRlE6AY84z0qYh4wKdtSF4EqDnyT8sxrvTpcXCV4ENSLF8li5yNA1yDM26iinH8Ierbpc4lv8Rp62uX6VSQ==", - "dev": true, - "requires": { - "eslint-restricted-globals": "^0.1.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4" - } - }, - "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" - }, - "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" - } - } - } - }, - "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": { - "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" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz", - "integrity": "sha512-t6hGKQDMIt9N8R7vLepsYXgDfeuhp6ZJSgtrLEDxonpSubyxUZHjhm6LsAaZX8q6GYVxkbT3kTsV9G5mBCFR6A==", - "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": { - "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" - } - } - } - }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, - "eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - } - }, - "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.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "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", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "file-type": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-7.4.0.tgz", - "integrity": "sha1-KnyU9ioAMBULt9m2xwz6HT51nIY=" - }, - "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" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "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 - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "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" - } - }, - "globals": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", - "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "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", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "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=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "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.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.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" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "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" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "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": "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" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "read-chunk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", - "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", - "requires": { - "pify": "^3.0.0", - "safe-buffer": "^5.1.1" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^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=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "*" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } -} diff --git a/package.json b/package.json index e7bee5930..d9df08782 100644 --- a/package.json +++ b/package.json @@ -5,11 +5,17 @@ "read-chunk": "2.1.*" }, "devDependencies": { - "chai": "^4.1.2", - "eslint": "^4.19.1", - "eslint-config-airbnb-base": "^13.0.0", - "eslint-plugin-import": "^2.13.0", - "mocha": "^5.2.0" + "@nuxtjs/eslint-config": "^1.0.1", + "@nuxtjs/eslint-module": "^1.2.0", + "babel-eslint": "^10.1.0", + "chai": "^4.2.0", + "dotenv": "^8.2.0", + "eslint": "^6.1.0", + "eslint-config-prettier": "^4.1.0", + "eslint-plugin-nuxt": "^0.5.2", + "eslint-plugin-prettier": "^3.1.3", + "mocha": "^5.2.0", + "prettier": "^1.16.4" }, "scripts": { "test": "mocha -R spec src", diff --git a/run b/run index 06556bb07..bf0262bf3 100755 --- a/run +++ b/run @@ -11,14 +11,13 @@ fi cmd="docker run --rm -v "$(pwd):/opt/wappalyzer" -it wappalyzer/dev" $cmd sh -c "\ - npm i; \ - npm shrinkwrap; \ + yarn install; \ cd src/drivers/webextension; \ - npm i; \ - npm shrinkwrap; \ + yarn install; \ cd ../npm; \ - npm i; \ - npm shrinkwrap" + yarn install; \ + cd ../puppeteer; \ + yarn install" $cmd sh -c "cat patches/*.patch | patch -p0" diff --git a/schema.json b/schema.json index 45b52ac12..c5a875676 100644 --- a/schema.json +++ b/schema.json @@ -1,19 +1,25 @@ { "title": "Wappalyzer Schema", + "definitions": { + "non-empty-non-blank-sting": { + "type": "string", + "pattern": "^(?!\\s*$).+" + } + }, "type": "object", "additionalProperties": false, + "required": ["categories","apps"], "properties": { "$schema": { "type": "string" }, "categories": { "type": "object", - "required": true, + "minProperties": 64, "additionalProperties": false, "patternProperties": { "^[0-9]+$": { "type": "object", - "required": true, "properties": { "priority": { "type": "number" @@ -27,89 +33,124 @@ }, "apps": { "type": "object", - "required": true, "additionalProperties": { "additionalProperties": false, + "required": ["cats","website"], "properties": { "cats": { "type": "array", "items": { "type": "number" }, - "required": true + "minItems": 1 }, "cpe": { - "type": "string" + "$ref": "#/definitions/non-empty-non-blank-sting" }, "cookies": { "type": "object", - "additionalProperties": { - "type": "string" + "additionalProperties": false, + "patternProperties": { + "^.+$": { + }, + "additionalProperties": { + "type": "string" + } } }, "js": { "type": "object", - "additionalProperties": { - "type": "string" + "additionalProperties": false, + "patternProperties": { + "^.+$": { + }, + "additionalProperties": { + "type": "string" + } } }, "headers": { "type": "object", - "additionalProperties": { - "type": "string" + "additionalProperties": false, + "patternProperties": { + "^.+$": { + }, + "additionalProperties": { + "type": "string" + } } }, "html": { - "type": [ - "string", - "array" - ], - "items": { - "type": "string" - } + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-sting" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-sting" + } + ] }, "excludes": { - "type": [ - "string", - "array" - ], - "items": { - "type": "string" - } + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-sting" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-sting" + } + ] }, "implies": { - "type": [ - "string", - "array" - ], - "items": { - "type": "string" - } + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-sting" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-sting" + } + ] }, "meta": { "type": "object", - "additionalProperties": { - "type": "string" + "additionalProperties": false, + "patternProperties": { + "^.+$": { + }, + "additionalProperties": { + "type": "string" + } } }, "script": { - "type": [ - "string", - "array" - ], - "items": { - "type": "string" - } + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-sting" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-sting" + } + ] }, "url": { - "type": "string" + "$ref": "#/definitions/non-empty-non-blank-sting" }, "website": { - "type": "string", - "required": true + "$ref": "#/definitions/non-empty-non-blank-sting" }, "icon": { - "type": "string" + "$ref": "#/definitions/non-empty-non-blank-sting" } } } diff --git a/src/apps.json b/src/apps.json index 9fc2ed1e1..42a9b8542 100644 --- a/src/apps.json +++ b/src/apps.json @@ -83,8 +83,14 @@ "cats": [ 12 ], - "html": "<[^>]+x-data[^<]+", + "html": "<[^>]+[^\\w-]x-data[^\\w-][^<]+\\;confidence:75", + "js": { + "Alpine.version": "^(.+)$\\;version:\\1" + }, "icon": "Alpine.js.png", + "script": [ + "/alpine(?:\\.min)?\\.js" + ], "website": "https://github.com/alpinejs/alpine" }, "AOLserver": { @@ -154,9 +160,7 @@ 5 ], "icon": "Accelerated-Mobile-Pages.svg", - "implies": [ - "WordPress" - ], + "implies": "WordPress", "meta": { "generator": "^AMP Plugin v(\\d+\\.\\d+.*)$\\;version:\\1" }, @@ -1052,9 +1056,7 @@ "Server": "Artifactory(?:/([\\d.]+))?\\;version:\\1" }, "icon": "Artifactory.svg", - "implies": [ - "Artifactory" - ], + "implies": "Artifactory", "website": "http://jfrog.com/open-source/#os-arti" }, "ArvanCloud": { @@ -1608,7 +1610,6 @@ 32 ], "html": "]+wire:", + "icon": "Livewire.png", + "implies": "Laravel", + "js": { + "livewire": "" + }, + "script": "livewire(?:\\.min)?\\.js", + "website": "https://laravel-livewire.com" + }, "LocalFocus": { "cats": [ 61 @@ -7547,9 +7598,7 @@ "\\;version:\\1" ], "icon": "NextGEN Gallery.png", - "implies": [ - "WordPress" - ], + "implies": "WordPress", "script": "/nextgen-gallery/js/", "website": "https://www.imagely.com/wordpress-gallery-plugin" }, @@ -7600,6 +7649,15 @@ "icon": "vercel.svg", "website": "https://vercel.com" }, + "Nuvemshop": { + "cats": [ + 6 + ], + "script": "Nuvem", + "html": "]+(?:class|id)=\"phabricator-", "icon": "Phabricator.png", - "implies": [ - "PHP" - ], + "implies": "PHP", "script": "/phabricator/[a-f0-9]{8}/rsrc/js/phui/[a-z-]+\\.js$", "website": "http://phacility.com" }, @@ -8341,9 +8411,7 @@ "<[^>]+id=\"phenomic(?:root)?\"" ], "icon": "Phenomic.svg", - "implies": [ - "React" - ], + "implies": "React", "script": "/phenomic\\.browser\\.[a-f0-9]+\\.js", "website": "https://phenomic.io/" }, @@ -8498,6 +8566,17 @@ "script": "https?://cdn\\.plot\\.ly/plotly", "website": "https://plot.ly/javascript/" }, + "Plyr": { + "cats": [ + 14 + ], + "js": { + "Plyr": "" + }, + "icon": "Plyr.png", + "script": "https://cdn\\.plyr\\.io/([0-9.]+)/.+\\.js\\;version:\\1", + "website": "https://plyr.io/" + }, "Po.st": { "cats": [ 5 @@ -8551,6 +8630,14 @@ "icon": "PostgreSQL.png", "website": "http://www.postgresql.org/" }, + "Powerboutique": { + "cats": [ + 6 + ], + "script": "powerboutique", + "icon": "powerboutique.png", + "website": "https://www.powerboutique.com/" + }, "Powergap": { "cats": [ 6 @@ -9430,9 +9517,7 @@ 9 ], "icon": "SlickStack.png", - "implies": [ - "WordPress" - ], + "implies": "WordPress", "headers": { "x-powered-by": "SlickStack" }, @@ -9485,6 +9570,14 @@ }, "website": "http://www.spip.net" }, + "Splitbee": { + "cats": [ + 10 + ], + "icon": "splitbee.svg", + "script": "^https:\\/\\/cdn\\.splitbee\\.io\\/sb\\.js", + "website": "https://splitbee.io" + }, "SQL Buddy": { "cats": [ 3 @@ -9711,9 +9804,7 @@ "headers": { "x-powered-by": "^Seravo" }, - "implies": [ - "WordPress" - ], + "implies": "WordPress", "icon": "seravo.svg", "website": "https://seravo.com" }, @@ -10286,6 +10377,16 @@ "script": "^/js/bundles/sonar\\.js?v=([\\d.]+)$\\;version:\\1", "website": "https://www.sonarqube.org/" }, + "Sotel": { + "cats": [ + 1 + ], + "icon": "default.svg", + "meta": { + "generator": "sotel" + }, + "website": "https://www.soteledu.com/en/" + }, "SoundManager": { "cats": [ 59 @@ -10759,7 +10860,9 @@ "cats": [ 66 ], - "html": "]+?href=\"[^\"]+tailwindcss(?:\\.min)?\\.css", + "html": [ + "]+?href=\"[^\"]+tailwindcss(?:\\.min)?\\.css" + ], "icon": "tailwindcss.svg", "website": "https://tailwindcss.com/" }, @@ -10876,9 +10979,7 @@ "cookies": { "TNEW": "" }, - "implies": [ - "Tessitura" - ], + "implies": "Tessitura", "icon": "tessitura.svg", "website": "https://www.tessituranetwork.com" }, @@ -11673,7 +11774,7 @@ "vue[.-]([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "(?:/([\\d.]+))?/vue(?:\\.min)?\\.js\\;version:\\1" ], - "website": "http://vuejs.org" + "website": "https://vuejs.org" }, "Nuxt.js": { "cats": [ @@ -12110,9 +12211,7 @@ "X-Wix-Server-Artifact-Id": "" }, "icon": "Wix.png", - "implies": [ - "React" - ], + "implies": "React", "js": { "wixBiSession": "" }, @@ -12184,13 +12283,15 @@ "MySQL" ], "headers": { - "link": "rel=\"https://api\\.w\\.org/\"" + "link": "rel=\"https://api\\.w\\.org/\"", + "X-Pingback": "/xmlrpc\\.php$" }, "js": { "wp_username": "" }, "meta": { - "generator": "^WordPress ?([\\d.]+)?\\;version:\\1" + "generator": "^WordPress ?([\\d.]+)?\\;version:\\1", + "shareaholic:wp_version": "" }, "script": "/wp-(?:content|includes)/", "website": "https://wordpress.org" @@ -12214,11 +12315,22 @@ "headers": { "x-powered-by": "^WordPress\\.com VIP" }, + "implies": "WordPress", + "icon": "wpvip.svg", + "website": "https://wpvip.com" + }, + "WPCacheOn": { + "cats": [ + 23 + ], + "headers": { + "x-powered-by": "^Optimized by WPCacheOn" + }, + "icon": "WPCacheOn.png", "implies": [ "WordPress" ], - "icon": "wpvip.svg", - "website": "https://wpvip.com" + "website": "https://wpcacheon.io" }, "kolors4u": { "cats": [ @@ -12234,6 +12346,7 @@ "meta": { "generator": "kolors4u (?: ([\\d.]+))?\\;version:\\1" }, + "icon": "kolors4u.png", "website": "http://kolors4u.com" }, "Wowza Media Server": { @@ -12385,9 +12498,7 @@ "X-Powered-By": "XeoraCube" }, "html": "", - "implies": [ - "Microsoft ASP.NET" - ], + "implies": "Microsoft ASP.NET", "icon": "xeora.png", "script": "/_bi_sps_v.+\\.js", "website": "http://www.xeora.org" @@ -12538,9 +12649,7 @@ "Server": "Yaws(?: ([\\d.]+))?\\;version:\\1" }, "icon": "Yaws.png", - "implies": [ - "Erlang" - ], + "implies": "Erlang", "website": "http://yaws.hyber.org" }, "Yieldlab": { @@ -12564,9 +12673,7 @@ "]+sc-component-id: sc-" ], "icon": "styled-components.png", - "implies": [ - "React" - ], + "implies": "React", "js": { "styled": "" }, diff --git a/src/drivers/bookmarklet/driver.js b/src/drivers/bookmarklet/driver.js index 361862657..1b1503d96 100644 --- a/src/drivers/bookmarklet/driver.js +++ b/src/drivers/bookmarklet/driver.js @@ -5,150 +5,167 @@ /** global: wappalyzer */ /** global: XMLHttpRequest */ -(function () { - wappalyzer.driver.document = document; +;(function() { + wappalyzer.driver.document = document - const container = document.getElementById('wappalyzer-container'); - const url = wappalyzer.parseUrl(window.top.location.href); - const hasOwn = Object.prototype.hasOwnProperty; + const container = document.getElementById('wappalyzer-container') + const url = wappalyzer.parseUrl(window.top.location.href) + const hasOwn = Object.prototype.hasOwnProperty /** * Log messages to console */ wappalyzer.driver.log = (message, source, type) => { - console.log(`[wappalyzer ${type}]`, `[${source}]`, message); - }; + console.log(`[wappalyzer ${type}]`, `[${source}]`, message) + } function getPageContent() { - wappalyzer.log('func: getPageContent', 'driver'); + wappalyzer.log('func: getPageContent', 'driver') const scripts = Array.prototype.slice .apply(document.scripts) - .filter(s => s.src) - .map(s => s.src); + .filter((s) => s.src) + .map((s) => s.src) - let html = new window.XMLSerializer().serializeToString(document).split('\n'); + let html = new window.XMLSerializer() + .serializeToString(document) + .split('\n') html = html - .slice(0, 1000).concat(html.slice(html.length - 1000)) - .map(line => line.substring(0, 1000)) - .join('\n'); + .slice(0, 1000) + .concat(html.slice(html.length - 1000)) + .map((line) => line.substring(0, 1000)) + .join('\n') wappalyzer.analyze(url, { html, - scripts, - }); + scripts + }) } function getResponseHeaders() { - wappalyzer.log('func: getResponseHeaders', 'driver'); + wappalyzer.log('func: getResponseHeaders', 'driver') - const xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest() - xhr.open('GET', url, true); + xhr.open('GET', url, true) xhr.onreadystatechange = () => { if (xhr.readyState === 4 && xhr.status) { - const headers = xhr.getAllResponseHeaders().split('\n'); + const headers = xhr.getAllResponseHeaders().split('\n') if (headers.length > 0 && headers[0] != '') { - wappalyzer.log(`responseHeaders: ${xhr.getAllResponseHeaders()}`, 'driver'); + wappalyzer.log( + `responseHeaders: ${xhr.getAllResponseHeaders()}`, + 'driver' + ) - const responseHeaders = {}; + const responseHeaders = {} headers.forEach((line) => { - let name, - value; + let name, value if (line) { - name = line.substring(0, line.indexOf(': ')); - value = line.substring(line.indexOf(': ') + 2, line.length - 1); + name = line.substring(0, line.indexOf(': ')) + value = line.substring(line.indexOf(': ') + 2, line.length - 1) if (!responseHeaders[name.toLowerCase()]) { - responseHeaders[name.toLowerCase()] = []; + responseHeaders[name.toLowerCase()] = [] } - responseHeaders[name.toLowerCase()].push(value); + responseHeaders[name.toLowerCase()].push(value) } - }); + }) wappalyzer.analyze(url, { - headers: responseHeaders, - }); + headers: responseHeaders + }) } } - }; + } - xhr.send(); + xhr.send() } /** * Display apps */ - wappalyzer.driver.displayApps = (detected) => { - wappalyzer.log('func: displayApps', 'driver'); + ;(wappalyzer.driver.displayApps = (detected) => { + wappalyzer.log('func: displayApps', 'driver') - let first = true; - let app; - let category; - let html; + let first = true + let app + let category + let html - html = '' - + 'Close' - + '' - + '
'; + html = + '' + + 'Close' + + '' + + '
' if (detected != null && Object.keys(detected).length) { for (app in detected) { if (!hasOwn.call(detected, app)) { - continue; + continue } - let version = detected[app].version, - confidence = detected[app].confidence; - - html - += `
` - + `` - + '' - + ` ${app - }${ - version ? ` ${version}` : ''}${confidence < 100 ? ` (${confidence}% sure)` : '' - }`; + const version = detected[app].version + const confidence = detected[app].confidence + + html += + `
` + + `` + + '' + + ` ${app}${ + version ? ` ${version}` : '' + }${confidence < 100 ? ` (${confidence}% sure)` : ''}` for (const i in wappalyzer.apps[app].cats) { if (!hasOwn.call(wappalyzer.apps[app].cats, i)) { - continue; + continue } - category = wappalyzer.categories[wappalyzer.apps[app].cats[i]].name; + category = wappalyzer.categories[wappalyzer.apps[app].cats[i]].name - html += `${category}`; + html += `${category}` } - html += '
'; + html += '
' - first = false; + first = false } } else { - html += '
No applications detected
'; + html += '
No applications detected
' } - html += '
'; - - container.innerHTML = html; - }, + html += '
' - /** - * Open a tab - */ - function openTab(args) { - open(args.url); - }; + container.innerHTML = html + }), + /** + * Open a tab + */ + function openTab(args) { + open(args.url) + } function slugify(string) { - return string.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/--+/g, '-').replace(/(?:^-|-$)/, ''); + return string + .toLowerCase() + .replace(/[^a-z0-9-]/g, '-') + .replace(/--+/g, '-') + .replace(/(?:^-|-$)/, '') } - getPageContent(); - getResponseHeaders(); -}()); + getPageContent() + getResponseHeaders() +})() diff --git a/src/drivers/npm/browsers/puppeteer.js b/src/drivers/npm/browsers/puppeteer.js index 7b0779adf..9e4d5f8e4 100644 --- a/src/drivers/npm/browsers/puppeteer.js +++ b/src/drivers/npm/browsers/puppeteer.js @@ -1,218 +1,245 @@ -const { - AWS_LAMBDA_FUNCTION_NAME, - CHROME_BIN, -} = process.env; +const { AWS_LAMBDA_FUNCTION_NAME, CHROME_BIN } = process.env -let chromium; -let puppeteer; +let chromium +let puppeteer if (AWS_LAMBDA_FUNCTION_NAME) { // eslint-disable-next-line global-require, import/no-unresolved - chromium = require('chrome-aws-lambda'); - - ({ puppeteer } = chromium); + chromium = require('chrome-aws-lambda') + ;({ puppeteer } = chromium) } else { // eslint-disable-next-line global-require - puppeteer = require('puppeteer'); + puppeteer = require('puppeteer') } -const Browser = require('../browser'); +const Browser = require('../browser') function getJs() { const dereference = (obj, level = 0) => { try { // eslint-disable-next-line no-undef if (level > 5 || (level && obj === window)) { - return '[Removed]'; + return '[Removed]' } if (Array.isArray(obj)) { - obj = obj.map(item => dereference(item, level + 1)); + obj = obj.map((item) => dereference(item, level + 1)) } - if (typeof obj === 'function' || (typeof obj === 'object' && obj !== null)) { - const newObj = {}; + if ( + typeof obj === 'function' || + (typeof obj === 'object' && obj !== null) + ) { + const newObj = {} Object.keys(obj).forEach((key) => { - newObj[key] = dereference(obj[key], level + 1); - }); + newObj[key] = dereference(obj[key], level + 1) + }) - return newObj; + return newObj } - return obj; + return obj } catch (error) { - return undefined; + return undefined } - }; + } // eslint-disable-next-line no-undef - return dereference(window); + return dereference(window) } class PuppeteerBrowser extends Browser { constructor(options) { - options.maxWait = options.maxWait || 60; + options.maxWait = options.maxWait || 60 - super(options); + super(options) } async visit(url) { - let done = false; - let browser; + let done = false + let browser try { await new Promise(async (resolve, reject) => { try { - browser = await puppeteer.launch(chromium ? { - args: [...chromium.args, '--ignore-certificate-errors'], - defaultViewport: chromium.defaultViewport, - executablePath: await chromium.executablePath, - headless: chromium.headless, - } : { - args: ['--no-sandbox', '--headless', '--disable-gpu', '--ignore-certificate-errors'], - executablePath: CHROME_BIN, - }); + browser = await puppeteer.launch( + chromium + ? { + args: [...chromium.args, '--ignore-certificate-errors'], + defaultViewport: chromium.defaultViewport, + executablePath: await chromium.executablePath, + headless: chromium.headless + } + : { + args: [ + '--no-sandbox', + '--headless', + '--disable-gpu', + '--ignore-certificate-errors' + ], + executablePath: CHROME_BIN + } + ) browser.on('disconnected', () => { if (!done) { - reject(new Error('browser: disconnected')); + reject(new Error('browser: disconnected')) } - }); + }) - const page = await browser.newPage(); + const page = await browser.newPage() - page.setDefaultTimeout(this.options.maxWait * 1.1); + page.setDefaultTimeout(this.options.maxWait * 1.1) - await page.setRequestInterception(true); + await page.setRequestInterception(true) - page.on('error', error => reject(new Error(`page error: ${error.message || error}`))); + page.on('error', (error) => + reject(new Error(`page error: ${error.message || error}`)) + ) - let responseReceived = false; + let responseReceived = false page.on('request', (request) => { try { if ( - responseReceived - && request.isNavigationRequest() - && request.frame() === page.mainFrame() - && request.url() !== url + responseReceived && + request.isNavigationRequest() && + request.frame() === page.mainFrame() && + request.url() !== url ) { - this.log(`abort navigation to ${request.url()}`); + this.log(`abort navigation to ${request.url()}`) - request.abort('aborted'); + request.abort('aborted') } else if (!done) { if (!['document', 'script'].includes(request.resourceType())) { - request.abort(); + request.abort() } else { - request.continue(); + request.continue() } } } catch (error) { - reject(new Error(`page error: ${error.message || error}`)); + reject(new Error(`page error: ${error.message || error}`)) } - }); + }) page.on('response', (response) => { try { if (!this.statusCode) { - this.statusCode = response.status(); + this.statusCode = response.status() - this.headers = {}; + this.headers = {} - const headers = response.headers(); + const headers = response.headers() Object.keys(headers).forEach((key) => { - this.headers[key] = Array.isArray(headers[key]) ? headers[key] : [headers[key]]; - }); + this.headers[key] = Array.isArray(headers[key]) + ? headers[key] + : [headers[key]] + }) - this.contentType = headers['content-type'] || null; + this.contentType = headers['content-type'] || null } if (response.status() < 300 || response.status() > 399) { - responseReceived = true; + responseReceived = true } } catch (error) { - reject(new Error(`page error: ${error.message || error}`)); + reject(new Error(`page error: ${error.message || error}`)) } - }); + }) page.on('console', ({ _type, _text, _location }) => { if (!/Failed to load resource: net::ERR_FAILED/.test(_text)) { - this.log(`${_text} (${_location.url}: ${_location.lineNumber})`, _type); + this.log( + `${_text} (${_location.url}: ${_location.lineNumber})`, + _type + ) } - }); + }) if (this.options.userAgent) { - await page.setUserAgent(this.options.userAgent); + await page.setUserAgent(this.options.userAgent) } try { await Promise.race([ page.goto(url, { waitUntil: 'domcontentloaded' }), // eslint-disable-next-line no-shadow - new Promise((resolve, reject) => setTimeout(() => reject(new Error('timeout')), this.options.maxWait)), - ]); + new Promise((resolve, reject) => + setTimeout( + () => reject(new Error('timeout')), + this.options.maxWait + ) + ) + ]) } catch (error) { - throw new Error(error.message || error.toString()); + throw new Error(error.message || error.toString()) } // eslint-disable-next-line no-undef - const links = await page.evaluateHandle(() => Array.from(document.getElementsByTagName('a')).map(({ - hash, hostname, href, pathname, protocol, rel, - }) => ({ - hash, - hostname, - href, - pathname, - protocol, - rel, - }))); - - this.links = await links.jsonValue(); + const links = await page.evaluateHandle(() => + Array.from(document.getElementsByTagName('a')).map( + ({ hash, hostname, href, pathname, protocol, rel }) => ({ + hash, + hostname, + href, + pathname, + protocol, + rel + }) + ) + ) + + this.links = await links.jsonValue() // eslint-disable-next-line no-undef - const scripts = await page.evaluateHandle(() => Array.from(document.getElementsByTagName('script')).map(({ - src, - }) => src)); + const scripts = await page.evaluateHandle(() => + Array.from(document.getElementsByTagName('script')).map( + ({ src }) => src + ) + ) - this.scripts = (await scripts.jsonValue()).filter(script => script); + this.scripts = (await scripts.jsonValue()).filter((script) => script) - this.js = await page.evaluate(getJs); + this.js = await page.evaluate(getJs) - this.cookies = (await page.cookies()).map(({ - name, value, domain, path, - }) => ({ - name, value, domain, path, - })); + this.cookies = (await page.cookies()).map( + ({ name, value, domain, path }) => ({ + name, + value, + domain, + path + }) + ) - this.html = await page.content(); + this.html = await page.content() - resolve(); + resolve() } catch (error) { - reject(new Error(`visit error: ${error.message || error}`)); + reject(new Error(`visit error: ${error.message || error}`)) } - }); + }) } catch (error) { - this.log(`visit error: ${error.message || error} (${url})`, 'error'); + this.log(`visit error: ${error.message || error} (${url})`, 'error') - throw new Error(error.message || error.toString()); + throw new Error(error.message || error.toString()) } finally { - done = true; + done = true if (browser) { try { - await browser.close(); + await browser.close() - this.log('browser close ok'); + this.log('browser close ok') } catch (error) { - this.log(`browser close error: ${error.message || error}`, 'error'); + this.log(`browser close error: ${error.message || error}`, 'error') } } } - this.log(`visit ok (${url})`); + this.log(`visit ok (${url})`) } } -module.exports = PuppeteerBrowser; +module.exports = PuppeteerBrowser diff --git a/src/drivers/npm/npm-shrinkwrap.json b/src/drivers/npm/npm-shrinkwrap.json deleted file mode 100644 index b7d31ac7c..000000000 --- a/src/drivers/npm/npm-shrinkwrap.json +++ /dev/null @@ -1,791 +0,0 @@ -{ - "name": "wappalyzer", - "version": "5.9.33", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==" - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==" - } - } - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" - }, - "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "escodegen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "requires": { - "original": "^1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "languagedetect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/languagedetect/-/languagedetect-2.0.0.tgz", - "integrity": "sha512-AZb/liiQ+6ZoTj4f1J0aE6OkzhCo8fyH+tuSaPfSo8YHCWLFJrdSixhtO2TYdIkjcDQNaR4RmGaV2A5FJklDMQ==" - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", - "requires": { - "mime-db": "1.43.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "requires": { - "url-parse": "^1.4.3" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "zombie": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/zombie/-/zombie-6.1.4.tgz", - "integrity": "sha512-yxNvKtyz3PP8lkr31AYh7vdbBD4is9hYXiOQKPp+k/7GiDiFQXX1Ex+peCl4ttodu/bHZcIluJ8lxMla5XefBQ==", - "requires": { - "babel-runtime": "6.26.0", - "bluebird": "^3.5.1", - "debug": "^4.1.0", - "eventsource": "^1.0.5", - "iconv-lite": "^0.4.21", - "jsdom": "11.12.0", - "lodash": "^4.17.10", - "mime": "^2.3.1", - "ms": "^2.1.1", - "request": "^2.85.0", - "tough-cookie": "^2.3.4", - "ws": "^6.1.2" - } - } - } -} diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 6bad6ee83..b5afa9d38 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -2,7 +2,7 @@ "name": "wappalyzer", "description": "Identify technology on websites", "homepage": "https://www.wappalyzer.com", - "version": "5.9.34", + "version": "5.10.1", "author": "Wappalyzer", "license": "MIT", "repository": { diff --git a/src/drivers/npm/yarn.lock b/src/drivers/npm/yarn.lock new file mode 100644 index 000000000..3be293483 --- /dev/null +++ b/src/drivers/npm/yarn.lock @@ -0,0 +1,741 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abab@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== + +acorn-globals@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^5.5.3: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + +acorn@^6.0.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +ajv@^6.5.5: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + +babel-runtime@6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bluebird@^3.5.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== + dependencies: + cssom "0.3.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +escodegen@^1.9.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventsource@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.21: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@11.12.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +languagedetect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/languagedetect/-/languagedetect-2.0.0.tgz#4b8fa2b7593b2a3a02fb1100891041c53238936c" + integrity sha512-AZb/liiQ+6ZoTj4f1J0aE6OkzhCo8fyH+tuSaPfSo8YHCWLFJrdSixhtO2TYdIkjcDQNaR4RmGaV2A5FJklDMQ== + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash@^4.17.10, lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@^2.3.1: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nwsapi@^2.0.7: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== + dependencies: + lodash "^4.17.15" + +request-promise-native@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + dependencies: + request-promise-core "1.1.3" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.85.0, request@^2.87.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +ws@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +zombie@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/zombie/-/zombie-6.1.4.tgz#9f0f53f3d9a032beb7f3fe5b382146a3475a4d47" + integrity sha512-yxNvKtyz3PP8lkr31AYh7vdbBD4is9hYXiOQKPp+k/7GiDiFQXX1Ex+peCl4ttodu/bHZcIluJ8lxMla5XefBQ== + dependencies: + babel-runtime "6.26.0" + bluebird "^3.5.1" + debug "^4.1.0" + eventsource "^1.0.5" + iconv-lite "^0.4.21" + jsdom "11.12.0" + lodash "^4.17.10" + mime "^2.3.1" + ms "^2.1.1" + request "^2.85.0" + tough-cookie "^2.3.4" + ws "^6.1.2" diff --git a/src/drivers/puppeteer/.gitignore b/src/drivers/puppeteer/.gitignore new file mode 100644 index 000000000..5558dedd3 --- /dev/null +++ b/src/drivers/puppeteer/.gitignore @@ -0,0 +1,3 @@ +/apps.json +/wappalyzer.js +/node_modules diff --git a/src/drivers/puppeteer/Dockerfile b/src/drivers/puppeteer/Dockerfile new file mode 100644 index 000000000..4c1c3596b --- /dev/null +++ b/src/drivers/puppeteer/Dockerfile @@ -0,0 +1,34 @@ +FROM node:12-alpine + +MAINTAINER Wappalyzer + +ENV WAPPALYZER_ROOT /opt/wappalyzer +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true +ENV CHROME_BIN /usr/bin/chromium-browser + +RUN apk update && apk add --no-cache \ + nodejs \ + nodejs-npm \ + udev \ + chromium \ + ttf-freefont + +RUN mkdir -p "$WAPPALYZER_ROOT/browsers" + +WORKDIR "$WAPPALYZER_ROOT" + +ADD apps.json . +ADD browser.js . +ADD browsers/zombie.js ./browsers +ADD browsers/puppeteer.js ./browsers +ADD cli.js . +ADD driver.js . +ADD index.js . +ADD package.json . +ADD wappalyzer.js . + +RUN npm i && npm i puppeteer + +RUN /usr/bin/chromium-browser --version + +ENTRYPOINT ["node", "cli.js"] diff --git a/src/drivers/puppeteer/README.md b/src/drivers/puppeteer/README.md new file mode 100644 index 000000000..acfd9cbea --- /dev/null +++ b/src/drivers/puppeteer/README.md @@ -0,0 +1,94 @@ +# Wappalyzer + +[Wappalyzer](https://www.wappalyzer.com/) is a +[cross-platform](https://www.wappalyzer.com/nodejs) utility that uncovers the +technologies used on websites. It detects +[content management systems](https://www.wappalyzer.com/technologies/cms), [ecommerce platforms](https://www.wappalyzer.com/technologies/ecommerce), [web servers](https://www.wappalyzer.com/technologies/web-servers), [JavaScript frameworks](https://www.wappalyzer.com/technologies/javascript-frameworks), +[analytics tools](https://www.wappalyzer.com/technologies/analytics) and +[many more](https://www.wappalyzer.com/technologies). + + +## Installation + +```shell +$ npm i -g wappalyzer # Globally +$ npm i wappalyzer --save # As a dependency +``` + +To use Puppeteer (headless Chrome browser), you must install the NPM package manually: + +```shell +$ npm i puppeteer@^2.0.0 +``` + + +## Run from the command line + +``` +wappalyzer [options] +``` + +### Options + +``` +-b, --batch-size=... Process links in batches +-d, --debug Output debug messages +-t, --delay=ms Wait for ms milliseconds between requests +-h, --help This text +--html-max-cols=... Limit the number of HTML characters per line processed +--html-max-rows=... Limit the number of HTML lines processed +-D, --max-depth=... Don't analyse pages more than num levels deep +-m, --max-urls=... Exit when num URLs have been analysed +-w, --max-wait=... Wait no more than ms milliseconds for page resources to load +-P, --pretty Pretty-print JSON output +-r, --recursive Follow links on pages (crawler) +-a, --user-agent=... Set the user agent string +``` + + +## Run from a script + +```javascript +const Wappalyzer = require('wappalyzer'); + +const url = 'https://www.wappalyzer.com'; + +const options = { + debug: false, + delay: 500, + maxDepth: 3, + maxUrls: 10, + maxWait: 5000, + recursive: true, + userAgent: 'Wappalyzer', + htmlMaxCols: 2000, + htmlMaxRows: 2000, +}; + +;(async function() { + const wappalyzer = await new Wappalyzer(options) + + try { + await wappalyzer.init() + + const site = await wappalyzer.open(url) + + site.on('error', (error) => { + process.stderr.write(`error: ${error}\n`) + }) + + const results = await site.analyze() + + process.stdout.write(`${JSON.stringify(results, null, 2)}\n`) + + await wappalyzer.destroy() + + process.exit(0) + } catch (error) { + process.stderr.write(error.toString()) + + await wappalyzer.destroy() + + process.exit(1) + } +})() diff --git a/src/drivers/puppeteer/browser.js b/src/drivers/puppeteer/browser.js new file mode 100644 index 000000000..532a75aa3 --- /dev/null +++ b/src/drivers/puppeteer/browser.js @@ -0,0 +1,20 @@ +class Browser { + constructor(options) { + this.options = options; + + this.window = null; + this.document = null; + this.statusCode = null; + this.contentType = null; + this.headers = null; + this.statusCode = null; + this.contentType = null; + this.html = null; + this.js = null; + this.links = null; + this.scripts = null; + this.cookies = null; + } +} + +module.exports = Browser; diff --git a/src/drivers/puppeteer/cli.js b/src/drivers/puppeteer/cli.js new file mode 100755 index 000000000..9348ce709 --- /dev/null +++ b/src/drivers/puppeteer/cli.js @@ -0,0 +1,107 @@ +#!/usr/bin/env node + +const Wappalyzer = require('./driver') + +const args = process.argv.slice(2) + +const options = {} + +let url +let arg + +const aliases = { + a: 'userAgent', + b: 'batchSize', + d: 'debug', + t: 'delay', + h: 'help', + D: 'maxDepth', + m: 'maxUrls', + P: 'pretty', + r: 'recursive', + w: 'maxWait' +} + +while (true) { + // eslint-disable-line no-constant-condition + arg = args.shift() + + if (!arg) { + break + } + + const matches = /^-?-([^=]+)(?:=(.+)?)?/.exec(arg) + + if (matches) { + const key = + aliases[matches[1]] || + matches[1].replace(/-\w/g, (_matches) => _matches[1].toUpperCase()) + // eslint-disable-next-line no-nested-ternary + const value = matches[2] + ? matches[2] + : args[0] && !args[0].startsWith('-') + ? args.shift() + : true + + options[key] = value + } else { + url = arg + } +} + +if (!url || options.help) { + process.stdout.write(`Usage: + wappalyzer [options] + +Examples: + wappalyzer https://www.example.com + node cli.js https://www.example.com -r -D 3 -m 50 + docker wappalyzer/cli https://www.example.com --pretty + +Options: + -b, --batch-size=... Process links in batches + -d, --debug Output debug messages + -t, --delay=ms Wait for ms milliseconds between requests + -h, --help This text + --html-max-cols=... Limit the number of HTML characters per line processed + --html-max-rows=... Limit the number of HTML lines processed + -D, --max-depth=... Don't analyse pages more than num levels deep + -m, --max-urls=... Exit when num URLs have been analysed + -w, --max-wait=... Wait no more than ms milliseconds for page resources to load + -P, --pretty Pretty-print JSON output + -r, --recursive Follow links on pages (crawler) + -a, --user-agent=... Set the user agent string +`) + + process.exit(1) +} + +;(async function() { + const wappalyzer = await new Wappalyzer(options) + + try { + await wappalyzer.init() + + const site = await wappalyzer.open(url) + + site.on('error', (error) => { + process.stderr.write(`page error: ${error}\n`) + }) + + const results = await site.analyze() + + process.stdout.write( + `${JSON.stringify(results, null, options.pretty ? 2 : null)}\n` + ) + + await wappalyzer.destroy() + + process.exit(0) + } catch (error) { + process.stderr.write(error.toString()) + + await wappalyzer.destroy() + + process.exit(1) + } +})() diff --git a/src/drivers/puppeteer/driver.js b/src/drivers/puppeteer/driver.js new file mode 100644 index 000000000..b8fb2534c --- /dev/null +++ b/src/drivers/puppeteer/driver.js @@ -0,0 +1,540 @@ +const { URL } = require('url') +const fs = require('fs') +const LanguageDetect = require('languagedetect') +const Wappalyzer = require('./wappalyzer') + +const { AWS_LAMBDA_FUNCTION_NAME } = process.env + +let puppeteer + +if (AWS_LAMBDA_FUNCTION_NAME) { + // eslint-disable-next-line global-require, import/no-unresolved + ;({ + chromium: { puppeteer } + } = require('chrome-aws-lambda')) +} else { + // eslint-disable-next-line global-require + puppeteer = require('puppeteer') +} + +const languageDetect = new LanguageDetect() + +languageDetect.setLanguageType('iso2') + +const json = JSON.parse(fs.readFileSync('./apps.json')) + +const extensions = /^([^.]+$|\.(asp|aspx|cgi|htm|html|jsp|php)$)/ + +const errorTypes = { + RESPONSE_NOT_OK: 'Response was not ok', + NO_RESPONSE: 'No response from server', + NO_HTML_DOCUMENT: 'No HTML document' +} + +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)) +} + +function getJs() { + const dereference = (obj, level = 0) => { + try { + // eslint-disable-next-line no-undef + if (level > 5 || (level && obj === window)) { + return '[Removed]' + } + + if (Array.isArray(obj)) { + obj = obj.map((item) => dereference(item, level + 1)) + } + + if ( + typeof obj === 'function' || + (typeof obj === 'object' && obj !== null) + ) { + const newObj = {} + + Object.keys(obj).forEach((key) => { + newObj[key] = dereference(obj[key], level + 1) + }) + + return newObj + } + + return obj + } catch (error) { + return undefined + } + } + + // eslint-disable-next-line no-undef + return dereference(window) +} + +function processJs(window, patterns) { + const js = {} + + Object.keys(patterns).forEach((appName) => { + js[appName] = {} + + Object.keys(patterns[appName]).forEach((chain) => { + js[appName][chain] = {} + + patterns[appName][chain].forEach((pattern, index) => { + const properties = chain.split('.') + + let value = properties.reduce( + (parent, property) => + parent && parent[property] ? parent[property] : null, + window + ) + + value = + typeof value === 'string' || typeof value === 'number' + ? value + : !!value + + if (value) { + js[appName][chain][index] = value + } + }) + }) + }) + + return js +} + +function processHtml(html, maxCols, maxRows) { + if (maxCols || maxRows) { + const batchs = [] + const rows = html.length / maxCols + + for (let i = 0; i < rows; i += 1) { + if (i < maxRows / 2 || i > rows - maxRows / 2) { + batchs.push(html.slice(i * maxCols, (i + 1) * maxCols)) + } + } + + html = batchs.join('\n') + } + + return html +} + +class Driver { + constructor(options = {}) { + this.options = { + batchSize: 5, + debug: false, + delay: 500, + htmlMaxCols: 2000, + htmlMaxRows: 3000, + maxDepth: 3, + maxUrls: 10, + maxWait: 5000, + recursive: false, + ...options + } + + this.options.debug = Boolean(+this.options.debug) + this.options.recursive = Boolean(+this.options.recursive) + this.options.delay = this.options.recursive + ? parseInt(this.options.delay, 10) + : 0 + this.options.maxDepth = parseInt(this.options.maxDepth, 10) + this.options.maxUrls = parseInt(this.options.maxUrls, 10) + this.options.maxWait = parseInt(this.options.maxWait, 10) + this.options.htmlMaxCols = parseInt(this.options.htmlMaxCols, 10) + this.options.htmlMaxRows = parseInt(this.options.htmlMaxRows, 10) + + this.destroyed = false + } + + async init() { + this.log('Launching browser...') + + try { + this.browser = await puppeteer.launch({ + args: [ + '--no-sandbox', + '--headless', + '--disable-gpu', + '--ignore-certificate-errors' + ] + }) + + this.browser.on('disconnected', async () => { + this.log('Browser disconnected') + + if (!this.destroyed) { + await this.init() + } + }) + } catch (error) { + throw new Error(error.toString()) + } + } + + async destroy() { + this.destroyed = true + + if (this.browser) { + try { + await sleep(1) + + await this.browser.close() + + this.log('Done') + } catch (error) { + throw new Error(error.toString()) + } + } + } + + open(url) { + return new Site(url, this) + } + + log(message, source = 'driver', type = 'debug') { + if (this.options.debug) { + // eslint-disable-next-line no-console + console.log(`${type.toUpperCase()} | ${source} | ${message}`) + } + } +} + +class Site { + constructor(url, driver) { + ;({ options: this.options, browser: this.browser } = driver) + + this.driver = driver + + try { + this.originalUrl = new URL(url) + } catch (error) { + throw new Error(error.message || error.toString()) + } + + this.wappalyzer = new Wappalyzer() + + this.wappalyzer.apps = json.apps + this.wappalyzer.categories = json.categories + + this.wappalyzer.parseJsPatterns() + + this.wappalyzer.driver.log = (message, source, type) => + this.log(message, source, type) + this.wappalyzer.driver.displayApps = (detected, meta, context) => + this.displayApps(detected, meta, context) + + this.analyzedUrls = {} + this.technologies = [] + this.meta = {} + + this.listeners = {} + + this.headers = {} + } + + async init() {} + + on(event, callback) { + if (!this.listeners[event]) { + this.listeners[event] = [] + } + + this.listeners[event].push(callback) + } + + emit(event, params) { + if (this.listeners[event]) { + this.listeners[event].forEach((listener) => listener(params)) + } + } + + log(...args) { + this.emit('log', ...args) + + this.driver.log(...args) + } + + async fetch(url, index, depth) {} + + async goto(url) { + // Return when the URL is a duplicate or maxUrls has been reached + if ( + this.analyzedUrls[url.href] || + Object.keys(this.analyzedUrls).length >= this.options.maxUrls + ) { + return + } + + this.log(`Navigate to ${url}`, 'page') + + this.analyzedUrls[url.href] = { + status: 0 + } + + if (!this.browser) { + throw new Error('Browser closed') + } + + const page = await this.browser.newPage() + + page.setDefaultTimeout(this.options.maxWait) + + await page.setRequestInterception(true) + + page.on('error', (error) => this.emit('error', error)) + + let responseReceived = false + + page.on('request', (request) => { + try { + if ( + (responseReceived && request.isNavigationRequest()) || + request.frame() !== page.mainFrame() || + !['document', 'script'].includes(request.resourceType()) + ) { + request.abort('blockedbyclient') + } else { + request.continue() + } + } catch (error) { + this.emit('error', error) + } + }) + + page.on('response', (response) => { + try { + if (response.url() === url.href) { + this.analyzedUrls[url.href] = { + status: response.status() + } + + const headers = response.headers() + + Object.keys(headers).forEach((key) => { + this.headers[key] = [ + ...(this.headers[key] || []), + ...(Array.isArray(headers[key]) ? headers[key] : [headers[key]]) + ] + }) + + this.contentType = headers['content-type'] || null + + if (response.status() >= 300 && response.status() < 400) { + if (this.headers.location) { + url = new URL(this.headers.location.slice(-1)) + } + } else { + responseReceived = true + } + } + } catch (error) { + this.emit('error', error) + } + }) + + if (this.options.userAgent) { + await page.setUserAgent(this.options.userAgent) + } + + try { + await Promise.race([ + page.goto(url.href, { waitUntil: 'domcontentloaded' }), + new Promise((resolve, reject) => + setTimeout(() => reject(new Error('Timeout')), this.options.maxWait) + ) + ]) + } catch (error) { + this.emit('error', error) + } + + await sleep(1000) + + const links = await ( + await page.evaluateHandle(() => + Array.from(document.getElementsByTagName('a')).map( + ({ hash, hostname, href, pathname, protocol, rel }) => ({ + hash, + hostname, + href, + pathname, + protocol, + rel + }) + ) + ) + ).jsonValue() + + // eslint-disable-next-line no-undef + const scripts = ( + await ( + await page.evaluateHandle(() => + Array.from(document.getElementsByTagName('script')).map( + ({ src }) => src + ) + ) + ).jsonValue() + ).filter((script) => script) + + const js = processJs(await page.evaluate(getJs), this.wappalyzer.jsPatterns) + + const cookies = (await page.cookies()).map( + ({ name, value, domain, path }) => ({ + name, + value, + domain, + path + }) + ) + + const html = processHtml( + await page.content(), + this.options.htmlMaxCols, + this.options.htmlMaxRows + ) + + // Validate response + if (!this.analyzedUrls[url.href].status) { + throw new Error('NO_RESPONSE') + } + + let language = null + + try { + const [attrs] = languageDetect.detect( + html.replace(/<\/?[^>]+(>|$)/g, ' '), + 1 + ) + + if (attrs) { + ;[language] = attrs + } + } catch (error) { + this.log(`${error} (${url.href})`, 'driver', 'error') + } + + await this.wappalyzer.analyze(url, { + cookies, + headers: this.headers, + html, + js, + scripts, + language + }) + + const reducedLinks = Array.prototype.reduce.call( + links, + (results, link) => { + if ( + results && + Object.prototype.hasOwnProperty.call( + Object.getPrototypeOf(results), + 'push' + ) && + link.protocol && + link.protocol.match(/https?:/) && + link.rel !== 'nofollow' && + link.hostname === url.hostname && + extensions.test(link.pathname) + ) { + results.push(new URL(link.href.split('#')[0])) + } + + return results + }, + [] + ) + + this.emit('goto', url) + + return reducedLinks + } + + async analyze(url = this.originalUrl, index = 1, depth = 1) { + try { + await sleep(this.options.delay * index) + + const links = await this.goto(url) + + if (links && this.options.recursive && depth < this.options.maxDepth) { + await this.batch(links.slice(0, this.options.maxUrls), depth + 1) + } + } catch (error) { + const type = + error.message && errorTypes[error.message] + ? error.message + : 'UNKNOWN_ERROR' + const message = + error.message && errorTypes[error.message] + ? errorTypes[error.message] + : 'Unknown error' + + this.analyzedUrls[url.href] = { + status: 0, + error: { + type, + message + } + } + + this.log(`${message} (${url.href})`, 'driver', 'error') + } + + return { + urls: this.analyzedUrls, + applications: this.technologies, + meta: this.meta + } + } + + async batch(links, depth, batch = 0) { + if (links.length === 0) { + return + } + + const batched = links.splice(0, this.options.batchSize) + + await Promise.all( + batched.map((link, index) => this.analyze(link, index, depth)) + ) + + await this.batch(links, depth, batch + 1) + } + + displayApps(technologies, meta) { + this.meta = meta + + Object.keys(technologies).forEach((name) => { + const { + confidenceTotal: confidence, + version, + props: { cats, icon, website, cpe } + } = technologies[name] + + const categories = cats.reduce((categories, id) => { + categories[id] = json.categories[id].name + + return categories + }, {}) + + if (!this.technologies.some(({ name: _name }) => name === _name)) { + this.technologies.push({ + name, + confidence, + version: version || null, + icon: icon || 'default.svg', + website, + cpe: cpe || null, + categories + }) + } + }) + } +} + +module.exports = Driver + +module.exports.processJs = processJs +module.exports.processHtml = processHtml diff --git a/src/drivers/puppeteer/index.js b/src/drivers/puppeteer/index.js new file mode 100755 index 000000000..81cf5899f --- /dev/null +++ b/src/drivers/puppeteer/index.js @@ -0,0 +1,12 @@ +const Driver = require('./driver'); + +class Wappalyzer { + constructor(pageUrl, options) { + // eslint-disable-next-line import/no-dynamic-require, global-require + const Browser = require(`./browsers/${options.browser || 'zombie'}`); + + return new Driver(Browser, pageUrl, options); + } +} + +module.exports = Wappalyzer; diff --git a/src/drivers/puppeteer/package.json b/src/drivers/puppeteer/package.json new file mode 100644 index 000000000..6c2059d93 --- /dev/null +++ b/src/drivers/puppeteer/package.json @@ -0,0 +1,30 @@ +{ + "name": "wappalyzer", + "description": "Identify technology on websites", + "homepage": "https://www.wappalyzer.com", + "version": "6.0.0", + "author": "Wappalyzer", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/aliasio/wappalyzer" + }, + "funding": { + "url": "https://github.com/sponsors/aliasio" + }, + "main": "index.js", + "files": [ + "apps.json", + "cli.js", + "driver.js", + "index.js", + "wappalyzer.js" + ], + "bin": { + "wappalyzer": "./cli.js" + }, + "dependencies": { + "languagedetect": "^2.0.0", + "puppeteer": "^2.0.0" + } +} diff --git a/src/drivers/puppeteer/yarn.lock b/src/drivers/puppeteer/yarn.lock new file mode 100644 index 000000000..0fb2fe9c8 --- /dev/null +++ b/src/drivers/puppeteer/yarn.lock @@ -0,0 +1,296 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/mime-types@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73" + integrity sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM= + +agent-base@5: + version "5.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +debug@4, debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +extract-zip@^1.6.6: + version "1.7.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" + integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== + dependencies: + concat-stream "^1.6.2" + debug "^2.6.9" + mkdirp "^0.5.4" + yauzl "^2.10.0" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + 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" + +https-proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== + dependencies: + agent-base "5" + debug "4" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +languagedetect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/languagedetect/-/languagedetect-2.0.0.tgz#4b8fa2b7593b2a3a02fb1100891041c53238936c" + integrity sha512-AZb/liiQ+6ZoTj4f1J0aE6OkzhCo8fyH+tuSaPfSo8YHCWLFJrdSixhtO2TYdIkjcDQNaR4RmGaV2A5FJklDMQ== + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.25: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@^2.0.3: + version "2.4.5" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.5.tgz#d8de2ecb92982dedbb6541c9b6841d7f218ea009" + integrity sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@^0.5.4: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proxy-from-env@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +puppeteer@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-2.1.1.tgz#ccde47c2a688f131883b50f2d697bd25189da27e" + integrity sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg== + dependencies: + "@types/mime-types" "^2.1.0" + debug "^4.1.0" + extract-zip "^1.6.6" + https-proxy-agent "^4.0.0" + mime "^2.0.3" + mime-types "^2.1.25" + progress "^2.0.1" + proxy-from-env "^1.0.0" + rimraf "^2.6.1" + ws "^6.1.0" + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" diff --git a/src/drivers/webextension/.gitignore b/src/drivers/webextension/.gitignore index 96fd3fbb8..c49f3131d 100644 --- a/src/drivers/webextension/.gitignore +++ b/src/drivers/webextension/.gitignore @@ -1,5 +1,4 @@ /apps.json -/images/icons/* /images/icons/converted/* /js/wappalyzer.js /node_modules diff --git a/src/drivers/webextension/_locales/ca/messages.json b/src/drivers/webextension/_locales/ca/messages.json index 825dcf3e4..721464c9d 100644 --- a/src/drivers/webextension/_locales/ca/messages.json +++ b/src/drivers/webextension/_locales/ca/messages.json @@ -15,6 +15,7 @@ "termsAccept": { "message": "Acceptar" }, "termsContent": { "message": "Aquesta extensió envia informació anònima sobre els llocs web que visiteu, inclosos el nom de domini i les tecnologies identificades a wappalyzer.com. Això pot desactivar-se a Opcions." }, "privacyPolicy": { "message": "Política de privadesa" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Taulers de missatgeria" }, "categoryName3": { "message": "Gestor de bases de dades" }, diff --git a/src/drivers/webextension/_locales/de/messages.json b/src/drivers/webextension/_locales/de/messages.json index f49ecc216..847dbf1fa 100644 --- a/src/drivers/webextension/_locales/de/messages.json +++ b/src/drivers/webextension/_locales/de/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Immer Icon anzeigen" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Nachrichten Board" }, "categoryName3": { "message": "Datenbankverwaltung" }, diff --git a/src/drivers/webextension/_locales/el/messages.json b/src/drivers/webextension/_locales/el/messages.json index 6f46ccd03..766f7f9b7 100644 --- a/src/drivers/webextension/_locales/el/messages.json +++ b/src/drivers/webextension/_locales/el/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Always show icon" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Διαδικτυακό Φόρουμ" }, "categoryName3": { "message": "Διαχειριστής Βάσης Δεδομένων" }, diff --git a/src/drivers/webextension/_locales/en/messages.json b/src/drivers/webextension/_locales/en/messages.json index c2b6245c7..60cba2dd6 100644 --- a/src/drivers/webextension/_locales/en/messages.json +++ b/src/drivers/webextension/_locales/en/messages.json @@ -15,6 +15,7 @@ "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Message boards" }, "categoryName3": { "message": "Database managers" }, @@ -59,7 +60,7 @@ "categoryName42": { "message": "Tag managers" }, "categoryName44": { "message": "CI" }, "categoryName46": { "message": "Remote Access" }, - "categoryName47": { "message": "Developmentl" }, + "categoryName47": { "message": "Development" }, "categoryName48": { "message": "Network storage" }, "categoryName49": { "message": "Feed readers" }, "categoryName50": { "message": "DMS" }, diff --git a/src/drivers/webextension/_locales/es/messages.json b/src/drivers/webextension/_locales/es/messages.json index ee0a480ee..14d102648 100644 --- a/src/drivers/webextension/_locales/es/messages.json +++ b/src/drivers/webextension/_locales/es/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Always show icon" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "Gestor de Contenido" }, "categoryName2": { "message": "Foro" }, "categoryName3": { "message": "Gestor de Bases de Datos" }, diff --git a/src/drivers/webextension/_locales/fa/messages.json b/src/drivers/webextension/_locales/fa/messages.json index 1407f089b..adb30b530 100644 --- a/src/drivers/webextension/_locales/fa/messages.json +++ b/src/drivers/webextension/_locales/fa/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "همیشه نماد را نشان بده" }, "termsAccept": { "message": "قبول" }, "termsContent": { "message": "این افزونه اطلاعات وب‌سایت‌های بازدید شده توسط شما را به صورت ناشناس ارسال می‌کند، مانند آدرس سایت و تکنولوژی‌های استفاده شده در آن سایت را ارسال می‌کند. اطلاعات بیشتر در wappalyzer.com. شما می‌توانید این افزونه را غیرفعال کنید." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "سیستم مدیریت محتوا" }, "categoryName2": { "message": "انجمن پیام" }, "categoryName3": { "message": "مدیریت پایگاه داده" }, diff --git a/src/drivers/webextension/_locales/fr/messages.json b/src/drivers/webextension/_locales/fr/messages.json index 88a4ba138..37fd1c2ce 100644 --- a/src/drivers/webextension/_locales/fr/messages.json +++ b/src/drivers/webextension/_locales/fr/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": " Toujours afficher l'icône" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Forum" }, "categoryName3": { "message": "Gestionnaire de base de données" }, diff --git a/src/drivers/webextension/_locales/gl_ES/messages.json b/src/drivers/webextension/_locales/gl_ES/messages.json index 6e54050a1..795060901 100644 --- a/src/drivers/webextension/_locales/gl_ES/messages.json +++ b/src/drivers/webextension/_locales/gl_ES/messages.json @@ -15,6 +15,7 @@ "termsAccept": { "message": "Aceptar" }, "termsContent": { "message": "Esta extensión envía anonimamente información acerca das webs que visitas, incluindo dominio e aplicativos identificados, a wappalyzer.com. Isto pode ser desactivado nas preferencias." }, "privacyPolicy": { "message": "Política de privacidade" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Taboleiro de mensaxes" }, "categoryName3": { "message": "Xestor de base de datos" }, diff --git a/src/drivers/webextension/_locales/gr/messages.json b/src/drivers/webextension/_locales/gr/messages.json index 6dceaf22c..b631044ee 100644 --- a/src/drivers/webextension/_locales/gr/messages.json +++ b/src/drivers/webextension/_locales/gr/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Always show icon" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Διαδικτυακό Φόρουμ" }, "categoryName3": { "message": "Διαχειριστής Βάσης Δεδομένων" }, diff --git a/src/drivers/webextension/_locales/id/messages.json b/src/drivers/webextension/_locales/id/messages.json index 31f4b64f7..11d46d599 100644 --- a/src/drivers/webextension/_locales/id/messages.json +++ b/src/drivers/webextension/_locales/id/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Always show icon" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "Sistem Pengelola Konten" }, "categoryName2": { "message": "Papan Pesan" }, "categoryName3": { "message": "Pengelola Basis Data" }, diff --git a/src/drivers/webextension/_locales/it/messages.json b/src/drivers/webextension/_locales/it/messages.json index 0f6f656d1..27882408a 100644 --- a/src/drivers/webextension/_locales/it/messages.json +++ b/src/drivers/webextension/_locales/it/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Always show icon" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Forum" }, "categoryName3": { "message": "Gestore di Database" }, diff --git a/src/drivers/webextension/_locales/ja/messages.json b/src/drivers/webextension/_locales/ja/messages.json index 362b88f5f..666d4d957 100644 --- a/src/drivers/webextension/_locales/ja/messages.json +++ b/src/drivers/webextension/_locales/ja/messages.json @@ -15,6 +15,7 @@ "termsAccept": { "message": "受諾する" }, "termsContent": { "message": "この拡張機能は、ドメイン名や特定された技術など、アクセスしたWebサイトに関する匿名情報をwappalyzer.comに送信します。これは設定で無効にできます。" }, "privacyPolicy": { "message": "プライバシーポリシー" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "メッセージボード" }, "categoryName3": { "message": "データベースマネージャー" }, diff --git a/src/drivers/webextension/_locales/pl/messages.json b/src/drivers/webextension/_locales/pl/messages.json index b04f2400e..90e83acfd 100644 --- a/src/drivers/webextension/_locales/pl/messages.json +++ b/src/drivers/webextension/_locales/pl/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Zawsze pokazuj tą ikonę" }, "termsAccept": { "message": "Akceptuj" }, "termsContent": { "message": "To rozszerzenie wysyła anonimowe informacje o stronach, które odwiedzasz, uwzględniając nazwy domen i zidentyfikowane technologie do wappalyzer.com. Opcja może zostać wyłączona w ustawieniach." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "System zarządzania treścią" }, "categoryName2": { "message": "Forum" }, "categoryName3": { "message": "Menedżer baz danych" }, diff --git a/src/drivers/webextension/_locales/pt/messages.json b/src/drivers/webextension/_locales/pt/messages.json index e358292b1..a7fd7a55a 100644 --- a/src/drivers/webextension/_locales/pt/messages.json +++ b/src/drivers/webextension/_locales/pt/messages.json @@ -15,6 +15,7 @@ "termsAccept": { "message": "Aceitar" }, "termsContent": { "message": "Esta extensão envia informações anónimas sobre os sites que visitas, incluindo o nome de domínio e as tecnologias identificadas, para o wappalyzer.com. Isso pode ser desativado nas configurações." }, "privacyPolicy": { "message": "Políticas de Privacidade" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Fórum" }, "categoryName3": { "message": "Gestor de Base de Dados" }, diff --git a/src/drivers/webextension/_locales/pt_BR/messages.json b/src/drivers/webextension/_locales/pt_BR/messages.json index 217d81b16..e32b108aa 100644 --- a/src/drivers/webextension/_locales/pt_BR/messages.json +++ b/src/drivers/webextension/_locales/pt_BR/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Sempre mostrar ícone" }, "termsAccept": { "message": "Aceitar" }, "termsContent": { "message": "Esta extensão envia informações anônimas sobre os sites que você visita, incluindo domínio e tecnologias identificadas para wappalyzer.com. Este comportamento pode ser desativado nas configurações." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Fórum" }, "categoryName3": { "message": "Gestão de Banco de Dados" }, diff --git a/src/drivers/webextension/_locales/ro/messages.json b/src/drivers/webextension/_locales/ro/messages.json index 68415aa06..a3036e74a 100644 --- a/src/drivers/webextension/_locales/ro/messages.json +++ b/src/drivers/webextension/_locales/ro/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Afișează icon tot timpul" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Forum de discuții" }, "categoryName3": { "message": "Manager baze de date" }, diff --git a/src/drivers/webextension/_locales/ru/messages.json b/src/drivers/webextension/_locales/ru/messages.json index 6d7a691fb..1c73c5907 100644 --- a/src/drivers/webextension/_locales/ru/messages.json +++ b/src/drivers/webextension/_locales/ru/messages.json @@ -67,6 +67,8 @@ "categoryPin": { "message": "Always show icon" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName54": { "message": "SEO" }, "categoryName55": { "message": "Бухгалтерский учёт" }, "categoryName56": { "message": "Криптомайнер" }, diff --git a/src/drivers/webextension/_locales/sk/messages.json b/src/drivers/webextension/_locales/sk/messages.json index e07d4c928..b9ed2ce77 100644 --- a/src/drivers/webextension/_locales/sk/messages.json +++ b/src/drivers/webextension/_locales/sk/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Always show icon" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Message Board" }, "categoryName3": { "message": "Správca databáz" }, diff --git a/src/drivers/webextension/_locales/tr/messages.json b/src/drivers/webextension/_locales/tr/messages.json index 5ded59dd2..63167726a 100644 --- a/src/drivers/webextension/_locales/tr/messages.json +++ b/src/drivers/webextension/_locales/tr/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Her zaman bu kategorinin ikonunu kullan" }, "termsAccept": { "message": "Kabul Ediyorum" }, "termsContent": { "message": "Bu eklenti, ziyaret ettiğiniz web site bilgilerini, alan adları ve tespit edilen teknolojiler ile beraber anonim olarak wappalyzer.com'a gönderir. Bunu, eklenti ayarlarından değiştirebilirsiniz." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "İçerik Yönetim Sistemi" }, "categoryName2": { "message": "Mesaj Tahtası" }, "categoryName3": { "message": "Veritabanı Yöneticisi" }, diff --git a/src/drivers/webextension/_locales/uk/messages.json b/src/drivers/webextension/_locales/uk/messages.json index 176a02601..c8c28983f 100644 --- a/src/drivers/webextension/_locales/uk/messages.json +++ b/src/drivers/webextension/_locales/uk/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Always show icon" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS" }, "categoryName2": { "message": "Форум" }, "categoryName3": { "message": "Менеджер БД" }, diff --git a/src/drivers/webextension/_locales/uz/messages.json b/src/drivers/webextension/_locales/uz/messages.json index 6557c08d1..b0af1ba9f 100644 --- a/src/drivers/webextension/_locales/uz/messages.json +++ b/src/drivers/webextension/_locales/uz/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "Always show icon" }, "termsAccept": { "message": "Accept" }, "termsContent": { "message": "This extension sends anonymous information about websites you visit, including domain name and identified technologies, to wappalyzer.com. This can be disabled in the settings." }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "CMS (KBT)" }, "categoryName2": { "message": "Forum" }, "categoryName3": { "message": "MB boshqaruvi" }, diff --git a/src/drivers/webextension/_locales/zh_CN/messages.json b/src/drivers/webextension/_locales/zh_CN/messages.json index 270801b1a..2aadbda4c 100644 --- a/src/drivers/webextension/_locales/zh_CN/messages.json +++ b/src/drivers/webextension/_locales/zh_CN/messages.json @@ -15,6 +15,7 @@ "termsAccept": { "message": "接受" }, "termsContent": { "message": "此扩展程序发送关于您访问的网站的匿名信息至 wappalyzer.com,包含域名和检测到的技术。这可以在设置中禁用。" }, "privacyPolicy": { "message": "隐私政策" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "内容管理系统(CMS)" }, "categoryName2": { "message": "消息板" }, "categoryName3": { "message": "数据库管理器" }, diff --git a/src/drivers/webextension/_locales/zh_TW/messages.json b/src/drivers/webextension/_locales/zh_TW/messages.json index ac32f3009..9ca2612f3 100644 --- a/src/drivers/webextension/_locales/zh_TW/messages.json +++ b/src/drivers/webextension/_locales/zh_TW/messages.json @@ -14,6 +14,8 @@ "categoryPin": { "message": "永遠顯示圖示" }, "termsAccept": { "message": "接受" }, "termsContent": { "message": "這個擴充功能將你所造訪網站的網域名稱和識別到的技術等資訊,匿名傳送至 wappalyzer.com。你可以在選項中停用。" }, + "privacyPolicy": { "message": "Privacy policy" }, + "createAlert": { "message": "Create an alert for this website" }, "categoryName1": { "message": "內容管理系統(CMS)" }, "categoryName2": { "message": "留言板/討論區" }, "categoryName3": { "message": "資料庫管理" }, diff --git a/src/drivers/webextension/css/popup.css b/src/drivers/webextension/css/popup.css index c8968157c..14ecfd695 100644 --- a/src/drivers/webextension/css/popup.css +++ b/src/drivers/webextension/css/popup.css @@ -31,6 +31,24 @@ body { display: none; } +.footer { + align-items: center; + border-top: 1px solid #dbdbdb; + height: 3rem; + display: flex; + padding: 0 1.5rem; +} + +.footer__link { + color: #4608ad; + text-decoration: none; +} + +.footer__link:hover, .footer__link:active { + color: #4608ad; + text-decoration: underline; +} + .container { min-height: 5rem; padding: 1rem 1.5rem 0rem 1.5rem; @@ -202,50 +220,68 @@ body { margin-top: 1rem; } -/* Add alternative color palette for Dark mode theme. */ -body.theme-mode-sync { - background: linear-gradient(160deg, #32067c, #150233); -} +@media (prefers-color-scheme: dark) { + /* Add alternative color palette for Dark mode theme. */ + body.theme-mode-sync { + background: linear-gradient(160deg, #32067c, #150233); + } -.theme-mode-sync .header { - border-bottom: 1px solid #000; -} + .theme-mode-sync .header { + border-bottom: 1px solid rgba(255, 255, 255, .2); + } -.theme-mode-sync .header__logo--dark { - display: inline-block; -} + .theme-mode-sync .header__logo--dark { + display: inline-block; + } -.theme-mode-sync .header__logo--light { - display: none; -} + .theme-mode-sync .header__logo--light { + display: none; + } -.theme-mode-sync .container { - color: white; -} + .theme-mode-sync .footer { + border-top: 1px solid rgba(255, 255, 255, .2); + } -.theme-mode-sync .detected__category-link, .theme-mode-sync .detected__app { - color: white; -} + .theme-mode-sync .footer__link { + color: rgba(255, 255, 255, .8); + } -.theme-mode-sync .detected__category-link:hover { - color: white; - border-bottom: 1px solid white; -} + .theme-mode-sync .footer__link:hover, .theme-mode-sync .footer__link:active { + color: rgba(255, 255, 255, .8); + } -.theme-mode-sync .detected__app-version, .theme-mode-sync .detected__app-confidence { - background-color: #4608ad; -} + .theme-mode-sync .container { + color: white; + } -.theme-mode-sync .detected__app:hover .detected__app-name { - border-bottom: 1px solid white; -} + .theme-mode-sync .detected__category-link { + color: #fff; + } -.theme-mode-sync .detected__app:hover .theme-mode-sync .detected__app-version, -.theme-mode-sync .detected__app:hover .theme-mode-sync .detected__app-confidence { - border-bottom: none; -} + .theme-mode-sync .detected__app { + color: rgba(255, 255, 255, .8); + } -.theme-mode-sync .terms__accept, -.theme-mode-sync .terms__privacy { - color: white; + .theme-mode-sync .detected__category-link:hover { + color: white; + border-bottom: 1px solid white; + } + + .theme-mode-sync .detected__app-version, .theme-mode-sync .detected__app-confidence { + background-color: #4608ad; + } + + .theme-mode-sync .detected__app:hover .detected__app-name { + border-bottom: 1px solid white; + } + + .theme-mode-sync .detected__app:hover .theme-mode-sync .detected__app-version, + .theme-mode-sync .detected__app:hover .theme-mode-sync .detected__app-confidence { + border-bottom: none; + } + + .theme-mode-sync .terms__accept, + .theme-mode-sync .terms__privacy { + color: white; + } } diff --git a/src/drivers/webextension/html/popup.html b/src/drivers/webextension/html/popup.html index 730a1f496..15fdc91dd 100644 --- a/src/drivers/webextension/html/popup.html +++ b/src/drivers/webextension/html/popup.html @@ -14,8 +14,8 @@ @@ -24,11 +24,15 @@
- +
+ + diff --git a/src/drivers/webextension/images/icons b/src/drivers/webextension/images/icons deleted file mode 120000 index f7467b9a7..000000000 --- a/src/drivers/webextension/images/icons +++ /dev/null @@ -1 +0,0 @@ -../../../icons/ \ No newline at end of file diff --git a/src/icons/1C-Bitrix.png b/src/drivers/webextension/images/icons/1C-Bitrix.png similarity index 100% rename from src/icons/1C-Bitrix.png rename to src/drivers/webextension/images/icons/1C-Bitrix.png diff --git a/src/icons/3dCart.png b/src/drivers/webextension/images/icons/3dCart.png similarity index 100% rename from src/icons/3dCart.png rename to src/drivers/webextension/images/icons/3dCart.png diff --git a/src/icons/91app.png b/src/drivers/webextension/images/icons/91app.png similarity index 100% rename from src/icons/91app.png rename to src/drivers/webextension/images/icons/91app.png diff --git a/src/icons/A-Frame.svg b/src/drivers/webextension/images/icons/A-Frame.svg similarity index 100% rename from src/icons/A-Frame.svg rename to src/drivers/webextension/images/icons/A-Frame.svg diff --git a/src/icons/ADPLAN.png b/src/drivers/webextension/images/icons/ADPLAN.png similarity index 100% rename from src/icons/ADPLAN.png rename to src/drivers/webextension/images/icons/ADPLAN.png diff --git a/src/icons/AOLserver.png b/src/drivers/webextension/images/icons/AOLserver.png similarity index 100% rename from src/icons/AOLserver.png rename to src/drivers/webextension/images/icons/AOLserver.png diff --git a/src/icons/AT Internet.png b/src/drivers/webextension/images/icons/AT Internet.png similarity index 100% rename from src/icons/AT Internet.png rename to src/drivers/webextension/images/icons/AT Internet.png diff --git a/src/icons/AWStats.png b/src/drivers/webextension/images/icons/AWStats.png similarity index 100% rename from src/icons/AWStats.png rename to src/drivers/webextension/images/icons/AWStats.png diff --git a/src/icons/Accelerated-Mobile-Pages.svg b/src/drivers/webextension/images/icons/Accelerated-Mobile-Pages.svg similarity index 100% rename from src/icons/Accelerated-Mobile-Pages.svg rename to src/drivers/webextension/images/icons/Accelerated-Mobile-Pages.svg diff --git a/src/icons/ActOn.png b/src/drivers/webextension/images/icons/ActOn.png similarity index 100% rename from src/icons/ActOn.png rename to src/drivers/webextension/images/icons/ActOn.png diff --git a/src/icons/AdInfinity.png b/src/drivers/webextension/images/icons/AdInfinity.png similarity index 100% rename from src/icons/AdInfinity.png rename to src/drivers/webextension/images/icons/AdInfinity.png diff --git a/src/icons/AdOcean.png b/src/drivers/webextension/images/icons/AdOcean.png similarity index 100% rename from src/icons/AdOcean.png rename to src/drivers/webextension/images/icons/AdOcean.png diff --git a/src/icons/AdRiver.png b/src/drivers/webextension/images/icons/AdRiver.png similarity index 100% rename from src/icons/AdRiver.png rename to src/drivers/webextension/images/icons/AdRiver.png diff --git a/src/icons/AdRoll.svg b/src/drivers/webextension/images/icons/AdRoll.svg similarity index 100% rename from src/icons/AdRoll.svg rename to src/drivers/webextension/images/icons/AdRoll.svg diff --git a/src/icons/Adcash.svg b/src/drivers/webextension/images/icons/Adcash.svg similarity index 100% rename from src/icons/Adcash.svg rename to src/drivers/webextension/images/icons/Adcash.svg diff --git a/src/icons/AddShoppers.png b/src/drivers/webextension/images/icons/AddShoppers.png similarity index 100% rename from src/icons/AddShoppers.png rename to src/drivers/webextension/images/icons/AddShoppers.png diff --git a/src/icons/AddThis.svg b/src/drivers/webextension/images/icons/AddThis.svg similarity index 100% rename from src/icons/AddThis.svg rename to src/drivers/webextension/images/icons/AddThis.svg diff --git a/src/icons/AddToAny.png b/src/drivers/webextension/images/icons/AddToAny.png similarity index 100% rename from src/icons/AddToAny.png rename to src/drivers/webextension/images/icons/AddToAny.png diff --git a/src/icons/Adobe ColdFusion.svg b/src/drivers/webextension/images/icons/Adobe ColdFusion.svg similarity index 100% rename from src/icons/Adobe ColdFusion.svg rename to src/drivers/webextension/images/icons/Adobe ColdFusion.svg diff --git a/src/icons/Adobe Experience Manager.svg b/src/drivers/webextension/images/icons/Adobe Experience Manager.svg similarity index 100% rename from src/icons/Adobe Experience Manager.svg rename to src/drivers/webextension/images/icons/Adobe Experience Manager.svg diff --git a/src/icons/Adobe GoLive.png b/src/drivers/webextension/images/icons/Adobe GoLive.png similarity index 100% rename from src/icons/Adobe GoLive.png rename to src/drivers/webextension/images/icons/Adobe GoLive.png diff --git a/src/icons/Adobe RoboHelp.svg b/src/drivers/webextension/images/icons/Adobe RoboHelp.svg similarity index 100% rename from src/icons/Adobe RoboHelp.svg rename to src/drivers/webextension/images/icons/Adobe RoboHelp.svg diff --git a/src/icons/Advanced Web Stats.png b/src/drivers/webextension/images/icons/Advanced Web Stats.png similarity index 100% rename from src/icons/Advanced Web Stats.png rename to src/drivers/webextension/images/icons/Advanced Web Stats.png diff --git a/src/icons/Advert Stream.png b/src/drivers/webextension/images/icons/Advert Stream.png similarity index 100% rename from src/icons/Advert Stream.png rename to src/drivers/webextension/images/icons/Advert Stream.png diff --git a/src/icons/Adverticum.svg b/src/drivers/webextension/images/icons/Adverticum.svg similarity index 100% rename from src/icons/Adverticum.svg rename to src/drivers/webextension/images/icons/Adverticum.svg diff --git a/src/icons/Adyen.svg b/src/drivers/webextension/images/icons/Adyen.svg similarity index 100% rename from src/icons/Adyen.svg rename to src/drivers/webextension/images/icons/Adyen.svg diff --git a/src/icons/Adzerk.png b/src/drivers/webextension/images/icons/Adzerk.png similarity index 100% rename from src/icons/Adzerk.png rename to src/drivers/webextension/images/icons/Adzerk.png diff --git a/src/icons/Aegea.png b/src/drivers/webextension/images/icons/Aegea.png similarity index 100% rename from src/icons/Aegea.png rename to src/drivers/webextension/images/icons/Aegea.png diff --git a/src/icons/Afosto.svg b/src/drivers/webextension/images/icons/Afosto.svg similarity index 100% rename from src/icons/Afosto.svg rename to src/drivers/webextension/images/icons/Afosto.svg diff --git a/src/icons/Airee.png b/src/drivers/webextension/images/icons/Airee.png similarity index 100% rename from src/icons/Airee.png rename to src/drivers/webextension/images/icons/Airee.png diff --git a/src/icons/Airform.svg b/src/drivers/webextension/images/icons/Airform.svg similarity index 100% rename from src/icons/Airform.svg rename to src/drivers/webextension/images/icons/Airform.svg diff --git a/src/icons/Algolia.svg b/src/drivers/webextension/images/icons/Algolia.svg similarity index 100% rename from src/icons/Algolia.svg rename to src/drivers/webextension/images/icons/Algolia.svg diff --git a/src/icons/Allegro RomPager.png b/src/drivers/webextension/images/icons/Allegro RomPager.png similarity index 100% rename from src/icons/Allegro RomPager.png rename to src/drivers/webextension/images/icons/Allegro RomPager.png diff --git a/src/icons/AlloyUI.png b/src/drivers/webextension/images/icons/AlloyUI.png similarity index 100% rename from src/icons/AlloyUI.png rename to src/drivers/webextension/images/icons/AlloyUI.png diff --git a/src/icons/Alpine.js.png b/src/drivers/webextension/images/icons/Alpine.js.png similarity index 100% rename from src/icons/Alpine.js.png rename to src/drivers/webextension/images/icons/Alpine.js.png diff --git a/src/icons/Amaya.png b/src/drivers/webextension/images/icons/Amaya.png similarity index 100% rename from src/icons/Amaya.png rename to src/drivers/webextension/images/icons/Amaya.png diff --git a/src/icons/Amazon-Cloudfront.svg b/src/drivers/webextension/images/icons/Amazon-Cloudfront.svg similarity index 100% rename from src/icons/Amazon-Cloudfront.svg rename to src/drivers/webextension/images/icons/Amazon-Cloudfront.svg diff --git a/src/icons/Ametys.png b/src/drivers/webextension/images/icons/Ametys.png similarity index 100% rename from src/icons/Ametys.png rename to src/drivers/webextension/images/icons/Ametys.png diff --git a/src/icons/Amiro.CMS.png b/src/drivers/webextension/images/icons/Amiro.CMS.png similarity index 100% rename from src/icons/Amiro.CMS.png rename to src/drivers/webextension/images/icons/Amiro.CMS.png diff --git a/src/icons/Analysys Ark.svg b/src/drivers/webextension/images/icons/Analysys Ark.svg similarity index 100% rename from src/icons/Analysys Ark.svg rename to src/drivers/webextension/images/icons/Analysys Ark.svg diff --git a/src/icons/Anetwork.png b/src/drivers/webextension/images/icons/Anetwork.png similarity index 100% rename from src/icons/Anetwork.png rename to src/drivers/webextension/images/icons/Anetwork.png diff --git a/src/icons/Angular.svg b/src/drivers/webextension/images/icons/Angular.svg similarity index 100% rename from src/icons/Angular.svg rename to src/drivers/webextension/images/icons/Angular.svg diff --git a/src/icons/AngularDart.svg b/src/drivers/webextension/images/icons/AngularDart.svg similarity index 100% rename from src/icons/AngularDart.svg rename to src/drivers/webextension/images/icons/AngularDart.svg diff --git a/src/icons/AngularJS.svg b/src/drivers/webextension/images/icons/AngularJS.svg similarity index 100% rename from src/icons/AngularJS.svg rename to src/drivers/webextension/images/icons/AngularJS.svg diff --git a/src/icons/Ant Design.svg b/src/drivers/webextension/images/icons/Ant Design.svg similarity index 100% rename from src/icons/Ant Design.svg rename to src/drivers/webextension/images/icons/Ant Design.svg diff --git a/src/icons/Apache JSPWiki.png b/src/drivers/webextension/images/icons/Apache JSPWiki.png similarity index 100% rename from src/icons/Apache JSPWiki.png rename to src/drivers/webextension/images/icons/Apache JSPWiki.png diff --git a/src/icons/Apache Tomcat.svg b/src/drivers/webextension/images/icons/Apache Tomcat.svg similarity index 100% rename from src/icons/Apache Tomcat.svg rename to src/drivers/webextension/images/icons/Apache Tomcat.svg diff --git a/src/icons/Apache Traffic Server.png b/src/drivers/webextension/images/icons/Apache Traffic Server.png similarity index 100% rename from src/icons/Apache Traffic Server.png rename to src/drivers/webextension/images/icons/Apache Traffic Server.png diff --git a/src/icons/Apache Wicket.svg b/src/drivers/webextension/images/icons/Apache Wicket.svg similarity index 100% rename from src/icons/Apache Wicket.svg rename to src/drivers/webextension/images/icons/Apache Wicket.svg diff --git a/src/icons/Apache.svg b/src/drivers/webextension/images/icons/Apache.svg similarity index 100% rename from src/icons/Apache.svg rename to src/drivers/webextension/images/icons/Apache.svg diff --git a/src/icons/ApexPages.png b/src/drivers/webextension/images/icons/ApexPages.png similarity index 100% rename from src/icons/ApexPages.png rename to src/drivers/webextension/images/icons/ApexPages.png diff --git a/src/icons/Apollo.svg b/src/drivers/webextension/images/icons/Apollo.svg similarity index 100% rename from src/icons/Apollo.svg rename to src/drivers/webextension/images/icons/Apollo.svg diff --git a/src/icons/AppDynamics.png b/src/drivers/webextension/images/icons/AppDynamics.png similarity index 100% rename from src/icons/AppDynamics.png rename to src/drivers/webextension/images/icons/AppDynamics.png diff --git a/src/icons/AppNexus.svg b/src/drivers/webextension/images/icons/AppNexus.svg similarity index 100% rename from src/icons/AppNexus.svg rename to src/drivers/webextension/images/icons/AppNexus.svg diff --git a/src/icons/Apple.svg b/src/drivers/webextension/images/icons/Apple.svg similarity index 100% rename from src/icons/Apple.svg rename to src/drivers/webextension/images/icons/Apple.svg diff --git a/src/icons/Arastta.svg b/src/drivers/webextension/images/icons/Arastta.svg similarity index 100% rename from src/icons/Arastta.svg rename to src/drivers/webextension/images/icons/Arastta.svg diff --git a/src/icons/Arc-Publishing.svg b/src/drivers/webextension/images/icons/Arc-Publishing.svg similarity index 100% rename from src/icons/Arc-Publishing.svg rename to src/drivers/webextension/images/icons/Arc-Publishing.svg diff --git a/src/icons/Artifactory.svg b/src/drivers/webextension/images/icons/Artifactory.svg similarity index 100% rename from src/icons/Artifactory.svg rename to src/drivers/webextension/images/icons/Artifactory.svg diff --git a/src/icons/ArvanCloud.png b/src/drivers/webextension/images/icons/ArvanCloud.png similarity index 100% rename from src/icons/ArvanCloud.png rename to src/drivers/webextension/images/icons/ArvanCloud.png diff --git a/src/icons/AsciiDoc.png b/src/drivers/webextension/images/icons/AsciiDoc.png similarity index 100% rename from src/icons/AsciiDoc.png rename to src/drivers/webextension/images/icons/AsciiDoc.png diff --git a/src/icons/Atlassian Bitbucket.svg b/src/drivers/webextension/images/icons/Atlassian Bitbucket.svg similarity index 100% rename from src/icons/Atlassian Bitbucket.svg rename to src/drivers/webextension/images/icons/Atlassian Bitbucket.svg diff --git a/src/icons/Atlassian Confluence.svg b/src/drivers/webextension/images/icons/Atlassian Confluence.svg similarity index 100% rename from src/icons/Atlassian Confluence.svg rename to src/drivers/webextension/images/icons/Atlassian Confluence.svg diff --git a/src/icons/Atlassian FishEye.svg b/src/drivers/webextension/images/icons/Atlassian FishEye.svg similarity index 100% rename from src/icons/Atlassian FishEye.svg rename to src/drivers/webextension/images/icons/Atlassian FishEye.svg diff --git a/src/icons/Atlassian Jira.svg b/src/drivers/webextension/images/icons/Atlassian Jira.svg similarity index 100% rename from src/icons/Atlassian Jira.svg rename to src/drivers/webextension/images/icons/Atlassian Jira.svg diff --git a/src/icons/Atlassian Statuspage.svg b/src/drivers/webextension/images/icons/Atlassian Statuspage.svg similarity index 100% rename from src/icons/Atlassian Statuspage.svg rename to src/drivers/webextension/images/icons/Atlassian Statuspage.svg diff --git a/src/icons/Aurelia.svg b/src/drivers/webextension/images/icons/Aurelia.svg similarity index 100% rename from src/icons/Aurelia.svg rename to src/drivers/webextension/images/icons/Aurelia.svg diff --git a/src/icons/Avangate.svg b/src/drivers/webextension/images/icons/Avangate.svg similarity index 100% rename from src/icons/Avangate.svg rename to src/drivers/webextension/images/icons/Avangate.svg diff --git a/src/icons/Avasize.png b/src/drivers/webextension/images/icons/Avasize.png similarity index 100% rename from src/icons/Avasize.png rename to src/drivers/webextension/images/icons/Avasize.png diff --git a/src/icons/BEM.png b/src/drivers/webextension/images/icons/BEM.png similarity index 100% rename from src/icons/BEM.png rename to src/drivers/webextension/images/icons/BEM.png diff --git a/src/icons/BIGACE.png b/src/drivers/webextension/images/icons/BIGACE.png similarity index 100% rename from src/icons/BIGACE.png rename to src/drivers/webextension/images/icons/BIGACE.png diff --git a/src/icons/Babel.svg b/src/drivers/webextension/images/icons/Babel.svg similarity index 100% rename from src/icons/Babel.svg rename to src/drivers/webextension/images/icons/Babel.svg diff --git a/src/icons/Backbone.js.png b/src/drivers/webextension/images/icons/Backbone.js.png similarity index 100% rename from src/icons/Backbone.js.png rename to src/drivers/webextension/images/icons/Backbone.js.png diff --git a/src/icons/Backdrop.png b/src/drivers/webextension/images/icons/Backdrop.png similarity index 100% rename from src/icons/Backdrop.png rename to src/drivers/webextension/images/icons/Backdrop.png diff --git a/src/icons/Baidu Tongji.png b/src/drivers/webextension/images/icons/Baidu Tongji.png similarity index 100% rename from src/icons/Baidu Tongji.png rename to src/drivers/webextension/images/icons/Baidu Tongji.png diff --git a/src/icons/Banshee.png b/src/drivers/webextension/images/icons/Banshee.png similarity index 100% rename from src/icons/Banshee.png rename to src/drivers/webextension/images/icons/Banshee.png diff --git a/src/icons/BaseHTTP.png b/src/drivers/webextension/images/icons/BaseHTTP.png similarity index 100% rename from src/icons/BaseHTTP.png rename to src/drivers/webextension/images/icons/BaseHTTP.png diff --git a/src/icons/Bigcommerce.png b/src/drivers/webextension/images/icons/Bigcommerce.png similarity index 100% rename from src/icons/Bigcommerce.png rename to src/drivers/webextension/images/icons/Bigcommerce.png diff --git a/src/icons/Bigware.png b/src/drivers/webextension/images/icons/Bigware.png similarity index 100% rename from src/icons/Bigware.png rename to src/drivers/webextension/images/icons/Bigware.png diff --git a/src/icons/BittAds.png b/src/drivers/webextension/images/icons/BittAds.png similarity index 100% rename from src/icons/BittAds.png rename to src/drivers/webextension/images/icons/BittAds.png diff --git a/src/icons/Blade.png b/src/drivers/webextension/images/icons/Blade.png similarity index 100% rename from src/icons/Blade.png rename to src/drivers/webextension/images/icons/Blade.png diff --git a/src/icons/Blazor.png b/src/drivers/webextension/images/icons/Blazor.png similarity index 100% rename from src/icons/Blazor.png rename to src/drivers/webextension/images/icons/Blazor.png diff --git a/src/icons/Blessing Skin.png b/src/drivers/webextension/images/icons/Blessing Skin.png similarity index 100% rename from src/icons/Blessing Skin.png rename to src/drivers/webextension/images/icons/Blessing Skin.png diff --git a/src/icons/Blesta.png b/src/drivers/webextension/images/icons/Blesta.png similarity index 100% rename from src/icons/Blesta.png rename to src/drivers/webextension/images/icons/Blesta.png diff --git a/src/icons/Blip.tv.png b/src/drivers/webextension/images/icons/Blip.tv.png similarity index 100% rename from src/icons/Blip.tv.png rename to src/drivers/webextension/images/icons/Blip.tv.png diff --git a/src/icons/Blogger.png b/src/drivers/webextension/images/icons/Blogger.png similarity index 100% rename from src/icons/Blogger.png rename to src/drivers/webextension/images/icons/Blogger.png diff --git a/src/icons/Bloomreach.png b/src/drivers/webextension/images/icons/Bloomreach.png similarity index 100% rename from src/icons/Bloomreach.png rename to src/drivers/webextension/images/icons/Bloomreach.png diff --git a/src/icons/Bluefish.png b/src/drivers/webextension/images/icons/Bluefish.png similarity index 100% rename from src/icons/Bluefish.png rename to src/drivers/webextension/images/icons/Bluefish.png diff --git a/src/icons/BoldChat.png b/src/drivers/webextension/images/icons/BoldChat.png similarity index 100% rename from src/icons/BoldChat.png rename to src/drivers/webextension/images/icons/BoldChat.png diff --git a/src/icons/Bolt.png b/src/drivers/webextension/images/icons/Bolt.png similarity index 100% rename from src/icons/Bolt.png rename to src/drivers/webextension/images/icons/Bolt.png diff --git a/src/icons/Bonfire.png b/src/drivers/webextension/images/icons/Bonfire.png similarity index 100% rename from src/icons/Bonfire.png rename to src/drivers/webextension/images/icons/Bonfire.png diff --git a/src/icons/Bootstrap Table.svg b/src/drivers/webextension/images/icons/Bootstrap Table.svg similarity index 100% rename from src/icons/Bootstrap Table.svg rename to src/drivers/webextension/images/icons/Bootstrap Table.svg diff --git a/src/icons/Bootstrap.png b/src/drivers/webextension/images/icons/Bootstrap.png similarity index 100% rename from src/icons/Bootstrap.png rename to src/drivers/webextension/images/icons/Bootstrap.png diff --git a/src/icons/Botble-CMS.png b/src/drivers/webextension/images/icons/Botble-CMS.png similarity index 100% rename from src/icons/Botble-CMS.png rename to src/drivers/webextension/images/icons/Botble-CMS.png diff --git a/src/icons/Bounce Exchange.svg b/src/drivers/webextension/images/icons/Bounce Exchange.svg similarity index 100% rename from src/icons/Bounce Exchange.svg rename to src/drivers/webextension/images/icons/Bounce Exchange.svg diff --git a/src/icons/Braintree.svg b/src/drivers/webextension/images/icons/Braintree.svg similarity index 100% rename from src/icons/Braintree.svg rename to src/drivers/webextension/images/icons/Braintree.svg diff --git a/src/icons/Brightspot.svg b/src/drivers/webextension/images/icons/Brightspot.svg similarity index 100% rename from src/icons/Brightspot.svg rename to src/drivers/webextension/images/icons/Brightspot.svg diff --git a/src/icons/BrowserCMS.png b/src/drivers/webextension/images/icons/BrowserCMS.png similarity index 100% rename from src/icons/BrowserCMS.png rename to src/drivers/webextension/images/icons/BrowserCMS.png diff --git a/src/icons/BugSnag.png b/src/drivers/webextension/images/icons/BugSnag.png similarity index 100% rename from src/icons/BugSnag.png rename to src/drivers/webextension/images/icons/BugSnag.png diff --git a/src/icons/Bugzilla.png b/src/drivers/webextension/images/icons/Bugzilla.png similarity index 100% rename from src/icons/Bugzilla.png rename to src/drivers/webextension/images/icons/Bugzilla.png diff --git a/src/icons/Bulma.png b/src/drivers/webextension/images/icons/Bulma.png similarity index 100% rename from src/icons/Bulma.png rename to src/drivers/webextension/images/icons/Bulma.png diff --git a/src/icons/Burning Board.png b/src/drivers/webextension/images/icons/Burning Board.png similarity index 100% rename from src/icons/Burning Board.png rename to src/drivers/webextension/images/icons/Burning Board.png diff --git a/src/icons/Business Catalyst.png b/src/drivers/webextension/images/icons/Business Catalyst.png similarity index 100% rename from src/icons/Business Catalyst.png rename to src/drivers/webextension/images/icons/Business Catalyst.png diff --git a/src/icons/BuySellAds.png b/src/drivers/webextension/images/icons/BuySellAds.png similarity index 100% rename from src/icons/BuySellAds.png rename to src/drivers/webextension/images/icons/BuySellAds.png diff --git a/src/icons/CDN77.png b/src/drivers/webextension/images/icons/CDN77.png similarity index 100% rename from src/icons/CDN77.png rename to src/drivers/webextension/images/icons/CDN77.png diff --git a/src/icons/CFML.png b/src/drivers/webextension/images/icons/CFML.png similarity index 100% rename from src/icons/CFML.png rename to src/drivers/webextension/images/icons/CFML.png diff --git a/src/icons/CKEditor.png b/src/drivers/webextension/images/icons/CKEditor.png similarity index 100% rename from src/icons/CKEditor.png rename to src/drivers/webextension/images/icons/CKEditor.png diff --git a/src/icons/CMS Made Simple.png b/src/drivers/webextension/images/icons/CMS Made Simple.png similarity index 100% rename from src/icons/CMS Made Simple.png rename to src/drivers/webextension/images/icons/CMS Made Simple.png diff --git a/src/icons/CPG Dragonfly.png b/src/drivers/webextension/images/icons/CPG Dragonfly.png similarity index 100% rename from src/icons/CPG Dragonfly.png rename to src/drivers/webextension/images/icons/CPG Dragonfly.png diff --git a/src/icons/CS Cart.png b/src/drivers/webextension/images/icons/CS Cart.png similarity index 100% rename from src/icons/CS Cart.png rename to src/drivers/webextension/images/icons/CS Cart.png diff --git a/src/icons/CacheFly.png b/src/drivers/webextension/images/icons/CacheFly.png similarity index 100% rename from src/icons/CacheFly.png rename to src/drivers/webextension/images/icons/CacheFly.png diff --git a/src/icons/Cafe24.png b/src/drivers/webextension/images/icons/Cafe24.png similarity index 100% rename from src/icons/Cafe24.png rename to src/drivers/webextension/images/icons/Cafe24.png diff --git a/src/icons/CakePHP.png b/src/drivers/webextension/images/icons/CakePHP.png similarity index 100% rename from src/icons/CakePHP.png rename to src/drivers/webextension/images/icons/CakePHP.png diff --git a/src/icons/Captch Me.svg b/src/drivers/webextension/images/icons/Captch Me.svg similarity index 100% rename from src/icons/Captch Me.svg rename to src/drivers/webextension/images/icons/Captch Me.svg diff --git a/src/icons/Carbon Ads.png b/src/drivers/webextension/images/icons/Carbon Ads.png similarity index 100% rename from src/icons/Carbon Ads.png rename to src/drivers/webextension/images/icons/Carbon Ads.png diff --git a/src/icons/Cargo.png b/src/drivers/webextension/images/icons/Cargo.png similarity index 100% rename from src/icons/Cargo.png rename to src/drivers/webextension/images/icons/Cargo.png diff --git a/src/icons/Catberry.js.png b/src/drivers/webextension/images/icons/Catberry.js.png similarity index 100% rename from src/icons/Catberry.js.png rename to src/drivers/webextension/images/icons/Catberry.js.png diff --git a/src/icons/Cecil.png b/src/drivers/webextension/images/icons/Cecil.png similarity index 100% rename from src/icons/Cecil.png rename to src/drivers/webextension/images/icons/Cecil.png diff --git a/src/icons/CentOS.png b/src/drivers/webextension/images/icons/CentOS.png similarity index 100% rename from src/icons/CentOS.png rename to src/drivers/webextension/images/icons/CentOS.png diff --git a/src/icons/Chamilo.png b/src/drivers/webextension/images/icons/Chamilo.png similarity index 100% rename from src/icons/Chamilo.png rename to src/drivers/webextension/images/icons/Chamilo.png diff --git a/src/icons/Chart.js.svg b/src/drivers/webextension/images/icons/Chart.js.svg similarity index 100% rename from src/icons/Chart.js.svg rename to src/drivers/webextension/images/icons/Chart.js.svg diff --git a/src/icons/Chartbeat.png b/src/drivers/webextension/images/icons/Chartbeat.png similarity index 100% rename from src/icons/Chartbeat.png rename to src/drivers/webextension/images/icons/Chartbeat.png diff --git a/src/icons/Cherokee.png b/src/drivers/webextension/images/icons/Cherokee.png similarity index 100% rename from src/icons/Cherokee.png rename to src/drivers/webextension/images/icons/Cherokee.png diff --git a/src/icons/CherryPy.png b/src/drivers/webextension/images/icons/CherryPy.png similarity index 100% rename from src/icons/CherryPy.png rename to src/drivers/webextension/images/icons/CherryPy.png diff --git a/src/icons/Chitika.png b/src/drivers/webextension/images/icons/Chitika.png similarity index 100% rename from src/icons/Chitika.png rename to src/drivers/webextension/images/icons/Chitika.png diff --git a/src/icons/Chorus.png b/src/drivers/webextension/images/icons/Chorus.png similarity index 100% rename from src/icons/Chorus.png rename to src/drivers/webextension/images/icons/Chorus.png diff --git a/src/icons/Ckan.png b/src/drivers/webextension/images/icons/Ckan.png similarity index 100% rename from src/icons/Ckan.png rename to src/drivers/webextension/images/icons/Ckan.png diff --git a/src/icons/ClickFunnels.png b/src/drivers/webextension/images/icons/ClickFunnels.png similarity index 100% rename from src/icons/ClickFunnels.png rename to src/drivers/webextension/images/icons/ClickFunnels.png diff --git a/src/icons/ClickHeat.png b/src/drivers/webextension/images/icons/ClickHeat.png similarity index 100% rename from src/icons/ClickHeat.png rename to src/drivers/webextension/images/icons/ClickHeat.png diff --git a/src/icons/ClickTale.png b/src/drivers/webextension/images/icons/ClickTale.png similarity index 100% rename from src/icons/ClickTale.png rename to src/drivers/webextension/images/icons/ClickTale.png diff --git a/src/icons/Clicky.png b/src/drivers/webextension/images/icons/Clicky.png similarity index 100% rename from src/icons/Clicky.png rename to src/drivers/webextension/images/icons/Clicky.png diff --git a/src/icons/Clientexec.png b/src/drivers/webextension/images/icons/Clientexec.png similarity index 100% rename from src/icons/Clientexec.png rename to src/drivers/webextension/images/icons/Clientexec.png diff --git a/src/icons/Clipboard.js.svg b/src/drivers/webextension/images/icons/Clipboard.js.svg similarity index 100% rename from src/icons/Clipboard.js.svg rename to src/drivers/webextension/images/icons/Clipboard.js.svg diff --git a/src/icons/CloudFlare.svg b/src/drivers/webextension/images/icons/CloudFlare.svg similarity index 100% rename from src/icons/CloudFlare.svg rename to src/drivers/webextension/images/icons/CloudFlare.svg diff --git a/src/icons/CloudSuite.svg b/src/drivers/webextension/images/icons/CloudSuite.svg similarity index 100% rename from src/icons/CloudSuite.svg rename to src/drivers/webextension/images/icons/CloudSuite.svg diff --git a/src/icons/Cloudera.png b/src/drivers/webextension/images/icons/Cloudera.png similarity index 100% rename from src/icons/Cloudera.png rename to src/drivers/webextension/images/icons/Cloudera.png diff --git a/src/icons/CodeIgniter.png b/src/drivers/webextension/images/icons/CodeIgniter.png similarity index 100% rename from src/icons/CodeIgniter.png rename to src/drivers/webextension/images/icons/CodeIgniter.png diff --git a/src/icons/CodeMirror.png b/src/drivers/webextension/images/icons/CodeMirror.png similarity index 100% rename from src/icons/CodeMirror.png rename to src/drivers/webextension/images/icons/CodeMirror.png diff --git a/src/icons/CoinHive.svg b/src/drivers/webextension/images/icons/CoinHive.svg similarity index 100% rename from src/icons/CoinHive.svg rename to src/drivers/webextension/images/icons/CoinHive.svg diff --git a/src/icons/Comandia.svg b/src/drivers/webextension/images/icons/Comandia.svg similarity index 100% rename from src/icons/Comandia.svg rename to src/drivers/webextension/images/icons/Comandia.svg diff --git a/src/icons/Combeenation.png b/src/drivers/webextension/images/icons/Combeenation.png similarity index 100% rename from src/icons/Combeenation.png rename to src/drivers/webextension/images/icons/Combeenation.png diff --git a/src/icons/Commerce Server.png b/src/drivers/webextension/images/icons/Commerce Server.png similarity index 100% rename from src/icons/Commerce Server.png rename to src/drivers/webextension/images/icons/Commerce Server.png diff --git a/src/icons/Concrete5.png b/src/drivers/webextension/images/icons/Concrete5.png similarity index 100% rename from src/icons/Concrete5.png rename to src/drivers/webextension/images/icons/Concrete5.png diff --git a/src/icons/Contao.png b/src/drivers/webextension/images/icons/Contao.png similarity index 100% rename from src/icons/Contao.png rename to src/drivers/webextension/images/icons/Contao.png diff --git a/src/icons/Contenido.png b/src/drivers/webextension/images/icons/Contenido.png similarity index 100% rename from src/icons/Contenido.png rename to src/drivers/webextension/images/icons/Contenido.png diff --git a/src/icons/Contensis.png b/src/drivers/webextension/images/icons/Contensis.png similarity index 100% rename from src/icons/Contensis.png rename to src/drivers/webextension/images/icons/Contensis.png diff --git a/src/icons/ContentBox.png b/src/drivers/webextension/images/icons/ContentBox.png similarity index 100% rename from src/icons/ContentBox.png rename to src/drivers/webextension/images/icons/ContentBox.png diff --git a/src/icons/Contentful.svg b/src/drivers/webextension/images/icons/Contentful.svg similarity index 100% rename from src/icons/Contentful.svg rename to src/drivers/webextension/images/icons/Contentful.svg diff --git a/src/icons/ConversionLab.png b/src/drivers/webextension/images/icons/ConversionLab.png similarity index 100% rename from src/icons/ConversionLab.png rename to src/drivers/webextension/images/icons/ConversionLab.png diff --git a/src/icons/Coppermine.png b/src/drivers/webextension/images/icons/Coppermine.png similarity index 100% rename from src/icons/Coppermine.png rename to src/drivers/webextension/images/icons/Coppermine.png diff --git a/src/icons/Cosmoshop.png b/src/drivers/webextension/images/icons/Cosmoshop.png similarity index 100% rename from src/icons/Cosmoshop.png rename to src/drivers/webextension/images/icons/Cosmoshop.png diff --git a/src/icons/Cotonti.png b/src/drivers/webextension/images/icons/Cotonti.png similarity index 100% rename from src/icons/Cotonti.png rename to src/drivers/webextension/images/icons/Cotonti.png diff --git a/src/icons/CouchDB.png b/src/drivers/webextension/images/icons/CouchDB.png similarity index 100% rename from src/icons/CouchDB.png rename to src/drivers/webextension/images/icons/CouchDB.png diff --git a/src/icons/Countly.png b/src/drivers/webextension/images/icons/Countly.png similarity index 100% rename from src/icons/Countly.png rename to src/drivers/webextension/images/icons/Countly.png diff --git a/src/icons/Cowboy.png b/src/drivers/webextension/images/icons/Cowboy.png similarity index 100% rename from src/icons/Cowboy.png rename to src/drivers/webextension/images/icons/Cowboy.png diff --git a/src/icons/CppCMS.png b/src/drivers/webextension/images/icons/CppCMS.png similarity index 100% rename from src/icons/CppCMS.png rename to src/drivers/webextension/images/icons/CppCMS.png diff --git a/src/icons/Craft CMS.svg b/src/drivers/webextension/images/icons/Craft CMS.svg similarity index 100% rename from src/icons/Craft CMS.svg rename to src/drivers/webextension/images/icons/Craft CMS.svg diff --git a/src/icons/Crazy Egg.png b/src/drivers/webextension/images/icons/Crazy Egg.png similarity index 100% rename from src/icons/Crazy Egg.png rename to src/drivers/webextension/images/icons/Crazy Egg.png diff --git a/src/icons/Criteo.svg b/src/drivers/webextension/images/icons/Criteo.svg similarity index 100% rename from src/icons/Criteo.svg rename to src/drivers/webextension/images/icons/Criteo.svg diff --git a/src/icons/Cross Pixel.png b/src/drivers/webextension/images/icons/Cross Pixel.png similarity index 100% rename from src/icons/Cross Pixel.png rename to src/drivers/webextension/images/icons/Cross Pixel.png diff --git a/src/icons/CrossBox.png b/src/drivers/webextension/images/icons/CrossBox.png similarity index 100% rename from src/icons/CrossBox.png rename to src/drivers/webextension/images/icons/CrossBox.png diff --git a/src/icons/Crypto-Loot.png b/src/drivers/webextension/images/icons/Crypto-Loot.png similarity index 100% rename from src/icons/Crypto-Loot.png rename to src/drivers/webextension/images/icons/Crypto-Loot.png diff --git a/src/icons/CubeCart.png b/src/drivers/webextension/images/icons/CubeCart.png similarity index 100% rename from src/icons/CubeCart.png rename to src/drivers/webextension/images/icons/CubeCart.png diff --git a/src/icons/Cufon.png b/src/drivers/webextension/images/icons/Cufon.png similarity index 100% rename from src/icons/Cufon.png rename to src/drivers/webextension/images/icons/Cufon.png diff --git a/src/icons/D3.png b/src/drivers/webextension/images/icons/D3.png similarity index 100% rename from src/icons/D3.png rename to src/drivers/webextension/images/icons/D3.png diff --git a/src/icons/DHTMLX.png b/src/drivers/webextension/images/icons/DHTMLX.png similarity index 100% rename from src/icons/DHTMLX.png rename to src/drivers/webextension/images/icons/DHTMLX.png diff --git a/src/icons/DM Polopoly.png b/src/drivers/webextension/images/icons/DM Polopoly.png similarity index 100% rename from src/icons/DM Polopoly.png rename to src/drivers/webextension/images/icons/DM Polopoly.png diff --git a/src/icons/DNN.png b/src/drivers/webextension/images/icons/DNN.png similarity index 100% rename from src/icons/DNN.png rename to src/drivers/webextension/images/icons/DNN.png diff --git a/src/icons/DTG.png b/src/drivers/webextension/images/icons/DTG.png similarity index 100% rename from src/icons/DTG.png rename to src/drivers/webextension/images/icons/DTG.png diff --git a/src/icons/Dancer.png b/src/drivers/webextension/images/icons/Dancer.png similarity index 100% rename from src/icons/Dancer.png rename to src/drivers/webextension/images/icons/Dancer.png diff --git a/src/icons/Danneo CMS.png b/src/drivers/webextension/images/icons/Danneo CMS.png similarity index 100% rename from src/icons/Danneo CMS.png rename to src/drivers/webextension/images/icons/Danneo CMS.png diff --git a/src/icons/Dart.svg b/src/drivers/webextension/images/icons/Dart.svg similarity index 100% rename from src/icons/Dart.svg rename to src/drivers/webextension/images/icons/Dart.svg diff --git a/src/icons/DataLife Engine.png b/src/drivers/webextension/images/icons/DataLife Engine.png similarity index 100% rename from src/icons/DataLife Engine.png rename to src/drivers/webextension/images/icons/DataLife Engine.png diff --git a/src/icons/DataPower.png b/src/drivers/webextension/images/icons/DataPower.png similarity index 100% rename from src/icons/DataPower.png rename to src/drivers/webextension/images/icons/DataPower.png diff --git a/src/icons/DataTables.png b/src/drivers/webextension/images/icons/DataTables.png similarity index 100% rename from src/icons/DataTables.png rename to src/drivers/webextension/images/icons/DataTables.png diff --git a/src/icons/Day.js.svg b/src/drivers/webextension/images/icons/Day.js.svg similarity index 100% rename from src/icons/Day.js.svg rename to src/drivers/webextension/images/icons/Day.js.svg diff --git a/src/icons/Debian.png b/src/drivers/webextension/images/icons/Debian.png similarity index 100% rename from src/icons/Debian.png rename to src/drivers/webextension/images/icons/Debian.png diff --git a/src/icons/DedeCMS.png b/src/drivers/webextension/images/icons/DedeCMS.png similarity index 100% rename from src/icons/DedeCMS.png rename to src/drivers/webextension/images/icons/DedeCMS.png diff --git a/src/icons/DerakCloud.png b/src/drivers/webextension/images/icons/DerakCloud.png similarity index 100% rename from src/icons/DerakCloud.png rename to src/drivers/webextension/images/icons/DerakCloud.png diff --git a/src/icons/DirectAdmin.png b/src/drivers/webextension/images/icons/DirectAdmin.png similarity index 100% rename from src/icons/DirectAdmin.png rename to src/drivers/webextension/images/icons/DirectAdmin.png diff --git a/src/icons/Discourse.png b/src/drivers/webextension/images/icons/Discourse.png similarity index 100% rename from src/icons/Discourse.png rename to src/drivers/webextension/images/icons/Discourse.png diff --git a/src/icons/Discuz X.png b/src/drivers/webextension/images/icons/Discuz X.png similarity index 100% rename from src/icons/Discuz X.png rename to src/drivers/webextension/images/icons/Discuz X.png diff --git a/src/icons/Disqus.svg b/src/drivers/webextension/images/icons/Disqus.svg similarity index 100% rename from src/icons/Disqus.svg rename to src/drivers/webextension/images/icons/Disqus.svg diff --git a/src/icons/Django.png b/src/drivers/webextension/images/icons/Django.png similarity index 100% rename from src/icons/Django.png rename to src/drivers/webextension/images/icons/Django.png diff --git a/src/icons/Docker.svg b/src/drivers/webextension/images/icons/Docker.svg similarity index 100% rename from src/icons/Docker.svg rename to src/drivers/webextension/images/icons/Docker.svg diff --git a/src/icons/Dojo.png b/src/drivers/webextension/images/icons/Dojo.png similarity index 100% rename from src/icons/Dojo.png rename to src/drivers/webextension/images/icons/Dojo.png diff --git a/src/icons/Dokeos.png b/src/drivers/webextension/images/icons/Dokeos.png similarity index 100% rename from src/icons/Dokeos.png rename to src/drivers/webextension/images/icons/Dokeos.png diff --git a/src/icons/DokuWiki.png b/src/drivers/webextension/images/icons/DokuWiki.png similarity index 100% rename from src/icons/DokuWiki.png rename to src/drivers/webextension/images/icons/DokuWiki.png diff --git a/src/icons/Dotclear.png b/src/drivers/webextension/images/icons/Dotclear.png similarity index 100% rename from src/icons/Dotclear.png rename to src/drivers/webextension/images/icons/Dotclear.png diff --git a/src/icons/DoubleClick.svg b/src/drivers/webextension/images/icons/DoubleClick.svg similarity index 100% rename from src/icons/DoubleClick.svg rename to src/drivers/webextension/images/icons/DoubleClick.svg diff --git a/src/icons/DovetailWRP.png b/src/drivers/webextension/images/icons/DovetailWRP.png similarity index 100% rename from src/icons/DovetailWRP.png rename to src/drivers/webextension/images/icons/DovetailWRP.png diff --git a/src/icons/Doxygen.png b/src/drivers/webextension/images/icons/Doxygen.png similarity index 100% rename from src/icons/Doxygen.png rename to src/drivers/webextension/images/icons/Doxygen.png diff --git a/src/icons/DreamWeaver.png b/src/drivers/webextension/images/icons/DreamWeaver.png similarity index 100% rename from src/icons/DreamWeaver.png rename to src/drivers/webextension/images/icons/DreamWeaver.png diff --git a/src/icons/Drupal Commerce.png b/src/drivers/webextension/images/icons/Drupal Commerce.png similarity index 100% rename from src/icons/Drupal Commerce.png rename to src/drivers/webextension/images/icons/Drupal Commerce.png diff --git a/src/icons/Drupal.svg b/src/drivers/webextension/images/icons/Drupal.svg similarity index 100% rename from src/icons/Drupal.svg rename to src/drivers/webextension/images/icons/Drupal.svg diff --git a/src/icons/Dynamicweb.png b/src/drivers/webextension/images/icons/Dynamicweb.png similarity index 100% rename from src/icons/Dynamicweb.png rename to src/drivers/webextension/images/icons/Dynamicweb.png diff --git a/src/icons/Dynatrace.png b/src/drivers/webextension/images/icons/Dynatrace.png similarity index 100% rename from src/icons/Dynatrace.png rename to src/drivers/webextension/images/icons/Dynatrace.png diff --git a/src/icons/EKM.png b/src/drivers/webextension/images/icons/EKM.png similarity index 100% rename from src/icons/EKM.png rename to src/drivers/webextension/images/icons/EKM.png diff --git a/src/icons/ELOG.png b/src/drivers/webextension/images/icons/ELOG.png similarity index 100% rename from src/icons/ELOG.png rename to src/drivers/webextension/images/icons/ELOG.png diff --git a/src/icons/EPiServer.png b/src/drivers/webextension/images/icons/EPiServer.png similarity index 100% rename from src/icons/EPiServer.png rename to src/drivers/webextension/images/icons/EPiServer.png diff --git a/src/icons/EPrints.png b/src/drivers/webextension/images/icons/EPrints.png similarity index 100% rename from src/icons/EPrints.png rename to src/drivers/webextension/images/icons/EPrints.png diff --git a/src/icons/EasyEngine.png b/src/drivers/webextension/images/icons/EasyEngine.png similarity index 100% rename from src/icons/EasyEngine.png rename to src/drivers/webextension/images/icons/EasyEngine.png diff --git a/src/icons/EdgeCast.png b/src/drivers/webextension/images/icons/EdgeCast.png similarity index 100% rename from src/icons/EdgeCast.png rename to src/drivers/webextension/images/icons/EdgeCast.png diff --git a/src/icons/Elcodi.png b/src/drivers/webextension/images/icons/Elcodi.png similarity index 100% rename from src/icons/Elcodi.png rename to src/drivers/webextension/images/icons/Elcodi.png diff --git a/src/icons/Eleanor CMS.png b/src/drivers/webextension/images/icons/Eleanor CMS.png similarity index 100% rename from src/icons/Eleanor CMS.png rename to src/drivers/webextension/images/icons/Eleanor CMS.png diff --git a/src/icons/ElementUI.svg b/src/drivers/webextension/images/icons/ElementUI.svg similarity index 100% rename from src/icons/ElementUI.svg rename to src/drivers/webextension/images/icons/ElementUI.svg diff --git a/src/icons/Elementor.png b/src/drivers/webextension/images/icons/Elementor.png similarity index 100% rename from src/icons/Elementor.png rename to src/drivers/webextension/images/icons/Elementor.png diff --git a/src/icons/Embedthis.png b/src/drivers/webextension/images/icons/Embedthis.png similarity index 100% rename from src/icons/Embedthis.png rename to src/drivers/webextension/images/icons/Embedthis.png diff --git a/src/icons/Ember.js.png b/src/drivers/webextension/images/icons/Ember.js.png similarity index 100% rename from src/icons/Ember.js.png rename to src/drivers/webextension/images/icons/Ember.js.png diff --git a/src/icons/Envoy.png b/src/drivers/webextension/images/icons/Envoy.png similarity index 100% rename from src/icons/Envoy.png rename to src/drivers/webextension/images/icons/Envoy.png diff --git a/src/icons/Enyo.png b/src/drivers/webextension/images/icons/Enyo.png similarity index 100% rename from src/icons/Enyo.png rename to src/drivers/webextension/images/icons/Enyo.png diff --git a/src/icons/Epom.png b/src/drivers/webextension/images/icons/Epom.png similarity index 100% rename from src/icons/Epom.png rename to src/drivers/webextension/images/icons/Epom.png diff --git a/src/icons/Erlang.png b/src/drivers/webextension/images/icons/Erlang.png similarity index 100% rename from src/icons/Erlang.png rename to src/drivers/webextension/images/icons/Erlang.png diff --git a/src/icons/Exhibit.png b/src/drivers/webextension/images/icons/Exhibit.png similarity index 100% rename from src/icons/Exhibit.png rename to src/drivers/webextension/images/icons/Exhibit.png diff --git a/src/icons/ExpertRec.png b/src/drivers/webextension/images/icons/ExpertRec.png similarity index 100% rename from src/icons/ExpertRec.png rename to src/drivers/webextension/images/icons/ExpertRec.png diff --git a/src/icons/Express.png b/src/drivers/webextension/images/icons/Express.png similarity index 100% rename from src/icons/Express.png rename to src/drivers/webextension/images/icons/Express.png diff --git a/src/icons/ExpressionEngine.png b/src/drivers/webextension/images/icons/ExpressionEngine.png similarity index 100% rename from src/icons/ExpressionEngine.png rename to src/drivers/webextension/images/icons/ExpressionEngine.png diff --git a/src/icons/ExtJS.png b/src/drivers/webextension/images/icons/ExtJS.png similarity index 100% rename from src/icons/ExtJS.png rename to src/drivers/webextension/images/icons/ExtJS.png diff --git a/src/icons/F5.png b/src/drivers/webextension/images/icons/F5.png similarity index 100% rename from src/icons/F5.png rename to src/drivers/webextension/images/icons/F5.png diff --git a/src/icons/FAST ESP.png b/src/drivers/webextension/images/icons/FAST ESP.png similarity index 100% rename from src/icons/FAST ESP.png rename to src/drivers/webextension/images/icons/FAST ESP.png diff --git a/src/icons/FAST Search for SharePoint.png b/src/drivers/webextension/images/icons/FAST Search for SharePoint.png similarity index 100% rename from src/icons/FAST Search for SharePoint.png rename to src/drivers/webextension/images/icons/FAST Search for SharePoint.png diff --git a/src/icons/Facebook.svg b/src/drivers/webextension/images/icons/Facebook.svg similarity index 100% rename from src/icons/Facebook.svg rename to src/drivers/webextension/images/icons/Facebook.svg diff --git a/src/icons/Fact Finder.png b/src/drivers/webextension/images/icons/Fact Finder.png similarity index 100% rename from src/icons/Fact Finder.png rename to src/drivers/webextension/images/icons/Fact Finder.png diff --git a/src/icons/FancyBox.png b/src/drivers/webextension/images/icons/FancyBox.png similarity index 100% rename from src/icons/FancyBox.png rename to src/drivers/webextension/images/icons/FancyBox.png diff --git a/src/icons/Fastcommerce.png b/src/drivers/webextension/images/icons/Fastcommerce.png similarity index 100% rename from src/icons/Fastcommerce.png rename to src/drivers/webextension/images/icons/Fastcommerce.png diff --git a/src/icons/Fastly.svg b/src/drivers/webextension/images/icons/Fastly.svg similarity index 100% rename from src/icons/Fastly.svg rename to src/drivers/webextension/images/icons/Fastly.svg diff --git a/src/icons/Fat-Free Framework.png b/src/drivers/webextension/images/icons/Fat-Free Framework.png similarity index 100% rename from src/icons/Fat-Free Framework.png rename to src/drivers/webextension/images/icons/Fat-Free Framework.png diff --git a/src/icons/Fbits.png b/src/drivers/webextension/images/icons/Fbits.png similarity index 100% rename from src/icons/Fbits.png rename to src/drivers/webextension/images/icons/Fbits.png diff --git a/src/icons/Fedora.png b/src/drivers/webextension/images/icons/Fedora.png similarity index 100% rename from src/icons/Fedora.png rename to src/drivers/webextension/images/icons/Fedora.png diff --git a/src/icons/Firebase.png b/src/drivers/webextension/images/icons/Firebase.png similarity index 100% rename from src/icons/Firebase.png rename to src/drivers/webextension/images/icons/Firebase.png diff --git a/src/icons/Fireblade.png b/src/drivers/webextension/images/icons/Fireblade.png similarity index 100% rename from src/icons/Fireblade.png rename to src/drivers/webextension/images/icons/Fireblade.png diff --git a/src/icons/Flask.png b/src/drivers/webextension/images/icons/Flask.png similarity index 100% rename from src/icons/Flask.png rename to src/drivers/webextension/images/icons/Flask.png diff --git a/src/icons/Flat UI.png b/src/drivers/webextension/images/icons/Flat UI.png similarity index 100% rename from src/icons/Flat UI.png rename to src/drivers/webextension/images/icons/Flat UI.png diff --git a/src/icons/FlexCMP.png b/src/drivers/webextension/images/icons/FlexCMP.png similarity index 100% rename from src/icons/FlexCMP.png rename to src/drivers/webextension/images/icons/FlexCMP.png diff --git a/src/icons/FlexSlider.png b/src/drivers/webextension/images/icons/FlexSlider.png similarity index 100% rename from src/icons/FlexSlider.png rename to src/drivers/webextension/images/icons/FlexSlider.png diff --git a/src/icons/FluxBB.png b/src/drivers/webextension/images/icons/FluxBB.png similarity index 100% rename from src/icons/FluxBB.png rename to src/drivers/webextension/images/icons/FluxBB.png diff --git a/src/icons/Flyspray.png b/src/drivers/webextension/images/icons/Flyspray.png similarity index 100% rename from src/icons/Flyspray.png rename to src/drivers/webextension/images/icons/Flyspray.png diff --git a/src/icons/Font Awesome.png b/src/drivers/webextension/images/icons/Font Awesome.png similarity index 100% rename from src/icons/Font Awesome.png rename to src/drivers/webextension/images/icons/Font Awesome.png diff --git a/src/icons/ForkCMS.png b/src/drivers/webextension/images/icons/ForkCMS.png similarity index 100% rename from src/icons/ForkCMS.png rename to src/drivers/webextension/images/icons/ForkCMS.png diff --git a/src/icons/Fortune3.png b/src/drivers/webextension/images/icons/Fortune3.png similarity index 100% rename from src/icons/Fortune3.png rename to src/drivers/webextension/images/icons/Fortune3.png diff --git a/src/icons/FreeBSD.png b/src/drivers/webextension/images/icons/FreeBSD.png similarity index 100% rename from src/icons/FreeBSD.png rename to src/drivers/webextension/images/icons/FreeBSD.png diff --git a/src/icons/FreeTextBox.png b/src/drivers/webextension/images/icons/FreeTextBox.png similarity index 100% rename from src/icons/FreeTextBox.png rename to src/drivers/webextension/images/icons/FreeTextBox.png diff --git a/src/icons/Freespee.svg b/src/drivers/webextension/images/icons/Freespee.svg similarity index 100% rename from src/icons/Freespee.svg rename to src/drivers/webextension/images/icons/Freespee.svg diff --git a/src/icons/Froala.svg b/src/drivers/webextension/images/icons/Froala.svg similarity index 100% rename from src/icons/Froala.svg rename to src/drivers/webextension/images/icons/Froala.svg diff --git a/src/icons/FrontPage.png b/src/drivers/webextension/images/icons/FrontPage.png similarity index 100% rename from src/icons/FrontPage.png rename to src/drivers/webextension/images/icons/FrontPage.png diff --git a/src/icons/Fusion Ads.png b/src/drivers/webextension/images/icons/Fusion Ads.png similarity index 100% rename from src/icons/Fusion Ads.png rename to src/drivers/webextension/images/icons/Fusion Ads.png diff --git a/src/icons/G-WAN.png b/src/drivers/webextension/images/icons/G-WAN.png similarity index 100% rename from src/icons/G-WAN.png rename to src/drivers/webextension/images/icons/G-WAN.png diff --git a/src/icons/GX WebManager.png b/src/drivers/webextension/images/icons/GX WebManager.png similarity index 100% rename from src/icons/GX WebManager.png rename to src/drivers/webextension/images/icons/GX WebManager.png diff --git a/src/icons/Gallery.png b/src/drivers/webextension/images/icons/Gallery.png similarity index 100% rename from src/icons/Gallery.png rename to src/drivers/webextension/images/icons/Gallery.png diff --git a/src/icons/Gambio.png b/src/drivers/webextension/images/icons/Gambio.png similarity index 100% rename from src/icons/Gambio.png rename to src/drivers/webextension/images/icons/Gambio.png diff --git a/src/icons/Gatsby.svg b/src/drivers/webextension/images/icons/Gatsby.svg similarity index 100% rename from src/icons/Gatsby.svg rename to src/drivers/webextension/images/icons/Gatsby.svg diff --git a/src/icons/Gauges.png b/src/drivers/webextension/images/icons/Gauges.png similarity index 100% rename from src/icons/Gauges.png rename to src/drivers/webextension/images/icons/Gauges.png diff --git a/src/icons/Gemius.png b/src/drivers/webextension/images/icons/Gemius.png similarity index 100% rename from src/icons/Gemius.png rename to src/drivers/webextension/images/icons/Gemius.png diff --git a/src/icons/GeneXus.png b/src/drivers/webextension/images/icons/GeneXus.png similarity index 100% rename from src/icons/GeneXus.png rename to src/drivers/webextension/images/icons/GeneXus.png diff --git a/src/icons/Gentoo.png b/src/drivers/webextension/images/icons/Gentoo.png similarity index 100% rename from src/icons/Gentoo.png rename to src/drivers/webextension/images/icons/Gentoo.png diff --git a/src/icons/Get Satisfaction.png b/src/drivers/webextension/images/icons/Get Satisfaction.png similarity index 100% rename from src/icons/Get Satisfaction.png rename to src/drivers/webextension/images/icons/Get Satisfaction.png diff --git a/src/icons/GetSimple CMS.png b/src/drivers/webextension/images/icons/GetSimple CMS.png similarity index 100% rename from src/icons/GetSimple CMS.png rename to src/drivers/webextension/images/icons/GetSimple CMS.png diff --git a/src/icons/Ghost.png b/src/drivers/webextension/images/icons/Ghost.png similarity index 100% rename from src/icons/Ghost.png rename to src/drivers/webextension/images/icons/Ghost.png diff --git a/src/icons/GitBook.png b/src/drivers/webextension/images/icons/GitBook.png similarity index 100% rename from src/icons/GitBook.png rename to src/drivers/webextension/images/icons/GitBook.png diff --git a/src/icons/GitHub.svg b/src/drivers/webextension/images/icons/GitHub.svg similarity index 100% rename from src/icons/GitHub.svg rename to src/drivers/webextension/images/icons/GitHub.svg diff --git a/src/icons/GitLab CI.png b/src/drivers/webextension/images/icons/GitLab CI.png similarity index 100% rename from src/icons/GitLab CI.png rename to src/drivers/webextension/images/icons/GitLab CI.png diff --git a/src/icons/GitLab.svg b/src/drivers/webextension/images/icons/GitLab.svg similarity index 100% rename from src/icons/GitLab.svg rename to src/drivers/webextension/images/icons/GitLab.svg diff --git a/src/icons/GlassFish.png b/src/drivers/webextension/images/icons/GlassFish.png similarity index 100% rename from src/icons/GlassFish.png rename to src/drivers/webextension/images/icons/GlassFish.png diff --git a/src/icons/Glyphicons.png b/src/drivers/webextension/images/icons/Glyphicons.png similarity index 100% rename from src/icons/Glyphicons.png rename to src/drivers/webextension/images/icons/Glyphicons.png diff --git a/src/icons/Go.svg b/src/drivers/webextension/images/icons/Go.svg similarity index 100% rename from src/icons/Go.svg rename to src/drivers/webextension/images/icons/Go.svg diff --git a/src/icons/GoAhead.png b/src/drivers/webextension/images/icons/GoAhead.png similarity index 100% rename from src/icons/GoAhead.png rename to src/drivers/webextension/images/icons/GoAhead.png diff --git a/src/icons/GoCache.png b/src/drivers/webextension/images/icons/GoCache.png similarity index 100% rename from src/icons/GoCache.png rename to src/drivers/webextension/images/icons/GoCache.png diff --git a/src/icons/GoJS.png b/src/drivers/webextension/images/icons/GoJS.png similarity index 100% rename from src/icons/GoJS.png rename to src/drivers/webextension/images/icons/GoJS.png diff --git a/src/icons/GoStats.png b/src/drivers/webextension/images/icons/GoStats.png similarity index 100% rename from src/icons/GoStats.png rename to src/drivers/webextension/images/icons/GoStats.png diff --git a/src/icons/Google AdSense.svg b/src/drivers/webextension/images/icons/Google AdSense.svg similarity index 100% rename from src/icons/Google AdSense.svg rename to src/drivers/webextension/images/icons/Google AdSense.svg diff --git a/src/icons/Google Analytics.svg b/src/drivers/webextension/images/icons/Google Analytics.svg similarity index 100% rename from src/icons/Google Analytics.svg rename to src/drivers/webextension/images/icons/Google Analytics.svg diff --git a/src/icons/Google App Engine.png b/src/drivers/webextension/images/icons/Google App Engine.png similarity index 100% rename from src/icons/Google App Engine.png rename to src/drivers/webextension/images/icons/Google App Engine.png diff --git a/src/icons/Google Charts.png b/src/drivers/webextension/images/icons/Google Charts.png similarity index 100% rename from src/icons/Google Charts.png rename to src/drivers/webextension/images/icons/Google Charts.png diff --git a/src/icons/Google Font API.png b/src/drivers/webextension/images/icons/Google Font API.png similarity index 100% rename from src/icons/Google Font API.png rename to src/drivers/webextension/images/icons/Google Font API.png diff --git a/src/icons/Google Maps.png b/src/drivers/webextension/images/icons/Google Maps.png similarity index 100% rename from src/icons/Google Maps.png rename to src/drivers/webextension/images/icons/Google Maps.png diff --git a/src/icons/Google PageSpeed.png b/src/drivers/webextension/images/icons/Google PageSpeed.png similarity index 100% rename from src/icons/Google PageSpeed.png rename to src/drivers/webextension/images/icons/Google PageSpeed.png diff --git a/src/icons/Google Plus.svg b/src/drivers/webextension/images/icons/Google Plus.svg similarity index 100% rename from src/icons/Google Plus.svg rename to src/drivers/webextension/images/icons/Google Plus.svg diff --git a/src/icons/Google Sites.png b/src/drivers/webextension/images/icons/Google Sites.png similarity index 100% rename from src/icons/Google Sites.png rename to src/drivers/webextension/images/icons/Google Sites.png diff --git a/src/icons/Google Tag Manager.png b/src/drivers/webextension/images/icons/Google Tag Manager.png similarity index 100% rename from src/icons/Google Tag Manager.png rename to src/drivers/webextension/images/icons/Google Tag Manager.png diff --git a/src/icons/Google Wallet.png b/src/drivers/webextension/images/icons/Google Wallet.png similarity index 100% rename from src/icons/Google Wallet.png rename to src/drivers/webextension/images/icons/Google Wallet.png diff --git a/src/icons/Google Web Toolkit.png b/src/drivers/webextension/images/icons/Google Web Toolkit.png similarity index 100% rename from src/icons/Google Web Toolkit.png rename to src/drivers/webextension/images/icons/Google Web Toolkit.png diff --git a/src/icons/Google.svg b/src/drivers/webextension/images/icons/Google.svg similarity index 100% rename from src/icons/Google.svg rename to src/drivers/webextension/images/icons/Google.svg diff --git a/src/icons/Graffiti CMS.png b/src/drivers/webextension/images/icons/Graffiti CMS.png similarity index 100% rename from src/icons/Graffiti CMS.png rename to src/drivers/webextension/images/icons/Graffiti CMS.png diff --git a/src/icons/GrandNode.svg b/src/drivers/webextension/images/icons/GrandNode.svg similarity index 100% rename from src/icons/GrandNode.svg rename to src/drivers/webextension/images/icons/GrandNode.svg diff --git a/src/icons/Grav.png b/src/drivers/webextension/images/icons/Grav.png similarity index 100% rename from src/icons/Grav.png rename to src/drivers/webextension/images/icons/Grav.png diff --git a/src/icons/Gravatar.png b/src/drivers/webextension/images/icons/Gravatar.png similarity index 100% rename from src/icons/Gravatar.png rename to src/drivers/webextension/images/icons/Gravatar.png diff --git a/src/icons/Green Valley CMS.png b/src/drivers/webextension/images/icons/Green Valley CMS.png similarity index 100% rename from src/icons/Green Valley CMS.png rename to src/drivers/webextension/images/icons/Green Valley CMS.png diff --git a/src/icons/Gridsome.svg b/src/drivers/webextension/images/icons/Gridsome.svg similarity index 100% rename from src/icons/Gridsome.svg rename to src/drivers/webextension/images/icons/Gridsome.svg diff --git a/src/icons/GrowingIO.png b/src/drivers/webextension/images/icons/GrowingIO.png similarity index 100% rename from src/icons/GrowingIO.png rename to src/drivers/webextension/images/icons/GrowingIO.png diff --git a/src/icons/HERE.png b/src/drivers/webextension/images/icons/HERE.png similarity index 100% rename from src/icons/HERE.png rename to src/drivers/webextension/images/icons/HERE.png diff --git a/src/icons/HHVM.png b/src/drivers/webextension/images/icons/HHVM.png similarity index 100% rename from src/icons/HHVM.png rename to src/drivers/webextension/images/icons/HHVM.png diff --git a/src/icons/HP.svg b/src/drivers/webextension/images/icons/HP.svg similarity index 100% rename from src/icons/HP.svg rename to src/drivers/webextension/images/icons/HP.svg diff --git a/src/icons/Halo.svg b/src/drivers/webextension/images/icons/Halo.svg similarity index 100% rename from src/icons/Halo.svg rename to src/drivers/webextension/images/icons/Halo.svg diff --git a/src/icons/Hammer.js.png b/src/drivers/webextension/images/icons/Hammer.js.png similarity index 100% rename from src/icons/Hammer.js.png rename to src/drivers/webextension/images/icons/Hammer.js.png diff --git a/src/icons/Handlebars.png b/src/drivers/webextension/images/icons/Handlebars.png similarity index 100% rename from src/icons/Handlebars.png rename to src/drivers/webextension/images/icons/Handlebars.png diff --git a/src/icons/Haravan.png b/src/drivers/webextension/images/icons/Haravan.png similarity index 100% rename from src/icons/Haravan.png rename to src/drivers/webextension/images/icons/Haravan.png diff --git a/src/icons/Haskell.png b/src/drivers/webextension/images/icons/Haskell.png similarity index 100% rename from src/icons/Haskell.png rename to src/drivers/webextension/images/icons/Haskell.png diff --git a/src/icons/HeadJS.png b/src/drivers/webextension/images/icons/HeadJS.png similarity index 100% rename from src/icons/HeadJS.png rename to src/drivers/webextension/images/icons/HeadJS.png diff --git a/src/icons/Heap.png b/src/drivers/webextension/images/icons/Heap.png similarity index 100% rename from src/icons/Heap.png rename to src/drivers/webextension/images/icons/Heap.png diff --git a/src/icons/Hello Bar.png b/src/drivers/webextension/images/icons/Hello Bar.png similarity index 100% rename from src/icons/Hello Bar.png rename to src/drivers/webextension/images/icons/Hello Bar.png diff --git a/src/icons/Hexo.png b/src/drivers/webextension/images/icons/Hexo.png similarity index 100% rename from src/icons/Hexo.png rename to src/drivers/webextension/images/icons/Hexo.png diff --git a/src/icons/Hiawatha.png b/src/drivers/webextension/images/icons/Hiawatha.png similarity index 100% rename from src/icons/Hiawatha.png rename to src/drivers/webextension/images/icons/Hiawatha.png diff --git a/src/icons/Highcharts.png b/src/drivers/webextension/images/icons/Highcharts.png similarity index 100% rename from src/icons/Highcharts.png rename to src/drivers/webextension/images/icons/Highcharts.png diff --git a/src/icons/Highlight.js.png b/src/drivers/webextension/images/icons/Highlight.js.png similarity index 100% rename from src/icons/Highlight.js.png rename to src/drivers/webextension/images/icons/Highlight.js.png diff --git a/src/icons/Hogan.js.png b/src/drivers/webextension/images/icons/Hogan.js.png similarity index 100% rename from src/icons/Hogan.js.png rename to src/drivers/webextension/images/icons/Hogan.js.png diff --git a/src/icons/Hotaru CMS.png b/src/drivers/webextension/images/icons/Hotaru CMS.png similarity index 100% rename from src/icons/Hotaru CMS.png rename to src/drivers/webextension/images/icons/Hotaru CMS.png diff --git a/src/icons/Hotjar.png b/src/drivers/webextension/images/icons/Hotjar.png similarity index 100% rename from src/icons/Hotjar.png rename to src/drivers/webextension/images/icons/Hotjar.png diff --git a/src/icons/HubSpot.png b/src/drivers/webextension/images/icons/HubSpot.png similarity index 100% rename from src/icons/HubSpot.png rename to src/drivers/webextension/images/icons/HubSpot.png diff --git a/src/icons/Hugo.png b/src/drivers/webextension/images/icons/Hugo.png similarity index 100% rename from src/icons/Hugo.png rename to src/drivers/webextension/images/icons/Hugo.png diff --git a/src/icons/IBM.svg b/src/drivers/webextension/images/icons/IBM.svg similarity index 100% rename from src/icons/IBM.svg rename to src/drivers/webextension/images/icons/IBM.svg diff --git a/src/icons/IIS.png b/src/drivers/webextension/images/icons/IIS.png similarity index 100% rename from src/icons/IIS.png rename to src/drivers/webextension/images/icons/IIS.png diff --git a/src/icons/INFOnline.png b/src/drivers/webextension/images/icons/INFOnline.png similarity index 100% rename from src/icons/INFOnline.png rename to src/drivers/webextension/images/icons/INFOnline.png diff --git a/src/icons/IPB.png b/src/drivers/webextension/images/icons/IPB.png similarity index 100% rename from src/icons/IPB.png rename to src/drivers/webextension/images/icons/IPB.png diff --git a/src/icons/Ideasoft.png b/src/drivers/webextension/images/icons/Ideasoft.png similarity index 100% rename from src/icons/Ideasoft.png rename to src/drivers/webextension/images/icons/Ideasoft.png diff --git a/src/icons/Immutable.js.png b/src/drivers/webextension/images/icons/Immutable.js.png similarity index 100% rename from src/icons/Immutable.js.png rename to src/drivers/webextension/images/icons/Immutable.js.png diff --git a/src/icons/ImpressCMS.png b/src/drivers/webextension/images/icons/ImpressCMS.png similarity index 100% rename from src/icons/ImpressCMS.png rename to src/drivers/webextension/images/icons/ImpressCMS.png diff --git a/src/icons/ImpressPages.png b/src/drivers/webextension/images/icons/ImpressPages.png similarity index 100% rename from src/icons/ImpressPages.png rename to src/drivers/webextension/images/icons/ImpressPages.png diff --git a/src/icons/Incapsula.png b/src/drivers/webextension/images/icons/Incapsula.png similarity index 100% rename from src/icons/Incapsula.png rename to src/drivers/webextension/images/icons/Incapsula.png diff --git a/src/icons/Includable.svg b/src/drivers/webextension/images/icons/Includable.svg similarity index 100% rename from src/icons/Includable.svg rename to src/drivers/webextension/images/icons/Includable.svg diff --git a/src/icons/Indico.png b/src/drivers/webextension/images/icons/Indico.png similarity index 100% rename from src/icons/Indico.png rename to src/drivers/webextension/images/icons/Indico.png diff --git a/src/icons/InfernoJS.png b/src/drivers/webextension/images/icons/InfernoJS.png similarity index 100% rename from src/icons/InfernoJS.png rename to src/drivers/webextension/images/icons/InfernoJS.png diff --git a/src/icons/Instabot.png b/src/drivers/webextension/images/icons/Instabot.png similarity index 100% rename from src/icons/Instabot.png rename to src/drivers/webextension/images/icons/Instabot.png diff --git a/src/icons/InstantCMS.png b/src/drivers/webextension/images/icons/InstantCMS.png similarity index 100% rename from src/icons/InstantCMS.png rename to src/drivers/webextension/images/icons/InstantCMS.png diff --git a/src/icons/Intel Active Management Technology.png b/src/drivers/webextension/images/icons/Intel Active Management Technology.png similarity index 100% rename from src/icons/Intel Active Management Technology.png rename to src/drivers/webextension/images/icons/Intel Active Management Technology.png diff --git a/src/icons/IntenseDebate.png b/src/drivers/webextension/images/icons/IntenseDebate.png similarity index 100% rename from src/icons/IntenseDebate.png rename to src/drivers/webextension/images/icons/IntenseDebate.png diff --git a/src/icons/Intercom.svg b/src/drivers/webextension/images/icons/Intercom.svg similarity index 100% rename from src/icons/Intercom.svg rename to src/drivers/webextension/images/icons/Intercom.svg diff --git a/src/icons/Intershop.png b/src/drivers/webextension/images/icons/Intershop.png similarity index 100% rename from src/icons/Intershop.png rename to src/drivers/webextension/images/icons/Intershop.png diff --git a/src/icons/Invenio.png b/src/drivers/webextension/images/icons/Invenio.png similarity index 100% rename from src/icons/Invenio.png rename to src/drivers/webextension/images/icons/Invenio.png diff --git a/src/icons/Ionicons.png b/src/drivers/webextension/images/icons/Ionicons.png similarity index 100% rename from src/icons/Ionicons.png rename to src/drivers/webextension/images/icons/Ionicons.png diff --git a/src/icons/Ionos-by-1and1-logo.svg b/src/drivers/webextension/images/icons/Ionos-by-1and1-logo.svg similarity index 100% rename from src/icons/Ionos-by-1and1-logo.svg rename to src/drivers/webextension/images/icons/Ionos-by-1and1-logo.svg diff --git a/src/icons/JAlbum.png b/src/drivers/webextension/images/icons/JAlbum.png similarity index 100% rename from src/icons/JAlbum.png rename to src/drivers/webextension/images/icons/JAlbum.png diff --git a/src/icons/JBoss Application Server.png b/src/drivers/webextension/images/icons/JBoss Application Server.png similarity index 100% rename from src/icons/JBoss Application Server.png rename to src/drivers/webextension/images/icons/JBoss Application Server.png diff --git a/src/icons/JBoss Web.png b/src/drivers/webextension/images/icons/JBoss Web.png similarity index 100% rename from src/icons/JBoss Web.png rename to src/drivers/webextension/images/icons/JBoss Web.png diff --git a/src/icons/JET Enterprise.svg b/src/drivers/webextension/images/icons/JET Enterprise.svg similarity index 100% rename from src/icons/JET Enterprise.svg rename to src/drivers/webextension/images/icons/JET Enterprise.svg diff --git a/src/icons/JS Charts.png b/src/drivers/webextension/images/icons/JS Charts.png similarity index 100% rename from src/icons/JS Charts.png rename to src/drivers/webextension/images/icons/JS Charts.png diff --git a/src/icons/JSEcoin.png b/src/drivers/webextension/images/icons/JSEcoin.png similarity index 100% rename from src/icons/JSEcoin.png rename to src/drivers/webextension/images/icons/JSEcoin.png diff --git a/src/icons/JTL Shop.png b/src/drivers/webextension/images/icons/JTL Shop.png similarity index 100% rename from src/icons/JTL Shop.png rename to src/drivers/webextension/images/icons/JTL Shop.png diff --git a/src/icons/JahiaDX.svg b/src/drivers/webextension/images/icons/JahiaDX.svg similarity index 100% rename from src/icons/JahiaDX.svg rename to src/drivers/webextension/images/icons/JahiaDX.svg diff --git a/src/icons/Jalios.png b/src/drivers/webextension/images/icons/Jalios.png similarity index 100% rename from src/icons/Jalios.png rename to src/drivers/webextension/images/icons/Jalios.png diff --git a/src/icons/Java.png b/src/drivers/webextension/images/icons/Java.png similarity index 100% rename from src/icons/Java.png rename to src/drivers/webextension/images/icons/Java.png diff --git a/src/icons/JavaScript Infovis Toolkit.png b/src/drivers/webextension/images/icons/JavaScript Infovis Toolkit.png similarity index 100% rename from src/icons/JavaScript Infovis Toolkit.png rename to src/drivers/webextension/images/icons/JavaScript Infovis Toolkit.png diff --git a/src/icons/JavaServer Faces.png b/src/drivers/webextension/images/icons/JavaServer Faces.png similarity index 100% rename from src/icons/JavaServer Faces.png rename to src/drivers/webextension/images/icons/JavaServer Faces.png diff --git a/src/icons/Jekyll.png b/src/drivers/webextension/images/icons/Jekyll.png similarity index 100% rename from src/icons/Jekyll.png rename to src/drivers/webextension/images/icons/Jekyll.png diff --git a/src/icons/Jenkins.png b/src/drivers/webextension/images/icons/Jenkins.png similarity index 100% rename from src/icons/Jenkins.png rename to src/drivers/webextension/images/icons/Jenkins.png diff --git a/src/icons/Jetshop.png b/src/drivers/webextension/images/icons/Jetshop.png similarity index 100% rename from src/icons/Jetshop.png rename to src/drivers/webextension/images/icons/Jetshop.png diff --git a/src/icons/Jetty.png b/src/drivers/webextension/images/icons/Jetty.png similarity index 100% rename from src/icons/Jetty.png rename to src/drivers/webextension/images/icons/Jetty.png diff --git a/src/icons/Jirafe.png b/src/drivers/webextension/images/icons/Jirafe.png similarity index 100% rename from src/icons/Jirafe.png rename to src/drivers/webextension/images/icons/Jirafe.png diff --git a/src/drivers/webextension/images/icons/Jitsi.png b/src/drivers/webextension/images/icons/Jitsi.png new file mode 100644 index 000000000..cc5358aea Binary files /dev/null and b/src/drivers/webextension/images/icons/Jitsi.png differ diff --git a/src/icons/Jive.png b/src/drivers/webextension/images/icons/Jive.png similarity index 100% rename from src/icons/Jive.png rename to src/drivers/webextension/images/icons/Jive.png diff --git a/src/icons/JobberBase.png b/src/drivers/webextension/images/icons/JobberBase.png similarity index 100% rename from src/icons/JobberBase.png rename to src/drivers/webextension/images/icons/JobberBase.png diff --git a/src/icons/Joomla.svg b/src/drivers/webextension/images/icons/Joomla.svg similarity index 100% rename from src/icons/Joomla.svg rename to src/drivers/webextension/images/icons/Joomla.svg diff --git a/src/icons/K2.png b/src/drivers/webextension/images/icons/K2.png similarity index 100% rename from src/icons/K2.png rename to src/drivers/webextension/images/icons/K2.png diff --git a/src/icons/KISSmetrics.png b/src/drivers/webextension/images/icons/KISSmetrics.png similarity index 100% rename from src/icons/KISSmetrics.png rename to src/drivers/webextension/images/icons/KISSmetrics.png diff --git a/src/icons/Kajabi.svg b/src/drivers/webextension/images/icons/Kajabi.svg similarity index 100% rename from src/icons/Kajabi.svg rename to src/drivers/webextension/images/icons/Kajabi.svg diff --git a/src/icons/Kampyle.png b/src/drivers/webextension/images/icons/Kampyle.png similarity index 100% rename from src/icons/Kampyle.png rename to src/drivers/webextension/images/icons/Kampyle.png diff --git a/src/icons/Kamva.svg b/src/drivers/webextension/images/icons/Kamva.svg similarity index 100% rename from src/icons/Kamva.svg rename to src/drivers/webextension/images/icons/Kamva.svg diff --git a/src/icons/Kendo UI.png b/src/drivers/webextension/images/icons/Kendo UI.png similarity index 100% rename from src/icons/Kendo UI.png rename to src/drivers/webextension/images/icons/Kendo UI.png diff --git a/src/icons/Kentico CMS.png b/src/drivers/webextension/images/icons/Kentico CMS.png similarity index 100% rename from src/icons/Kentico CMS.png rename to src/drivers/webextension/images/icons/Kentico CMS.png diff --git a/src/icons/KeyCDN.png b/src/drivers/webextension/images/icons/KeyCDN.png similarity index 100% rename from src/icons/KeyCDN.png rename to src/drivers/webextension/images/icons/KeyCDN.png diff --git a/src/icons/KineticJS.png b/src/drivers/webextension/images/icons/KineticJS.png similarity index 100% rename from src/icons/KineticJS.png rename to src/drivers/webextension/images/icons/KineticJS.png diff --git a/src/icons/Klarna.svg b/src/drivers/webextension/images/icons/Klarna.svg similarity index 100% rename from src/icons/Klarna.svg rename to src/drivers/webextension/images/icons/Klarna.svg diff --git a/src/icons/Knockout.js.png b/src/drivers/webextension/images/icons/Knockout.js.png similarity index 100% rename from src/icons/Knockout.js.png rename to src/drivers/webextension/images/icons/Knockout.js.png diff --git a/src/icons/Koa.png b/src/drivers/webextension/images/icons/Koa.png similarity index 100% rename from src/icons/Koa.png rename to src/drivers/webextension/images/icons/Koa.png diff --git a/src/icons/Koala Framework.png b/src/drivers/webextension/images/icons/Koala Framework.png similarity index 100% rename from src/icons/Koala Framework.png rename to src/drivers/webextension/images/icons/Koala Framework.png diff --git a/src/icons/Kobimaster.png b/src/drivers/webextension/images/icons/Kobimaster.png similarity index 100% rename from src/icons/Kobimaster.png rename to src/drivers/webextension/images/icons/Kobimaster.png diff --git a/src/icons/Kohana.png b/src/drivers/webextension/images/icons/Kohana.png similarity index 100% rename from src/icons/Kohana.png rename to src/drivers/webextension/images/icons/Kohana.png diff --git a/src/icons/Koken.png b/src/drivers/webextension/images/icons/Koken.png similarity index 100% rename from src/icons/Koken.png rename to src/drivers/webextension/images/icons/Koken.png diff --git a/src/icons/Komodo CMS.png b/src/drivers/webextension/images/icons/Komodo CMS.png similarity index 100% rename from src/icons/Komodo CMS.png rename to src/drivers/webextension/images/icons/Komodo CMS.png diff --git a/src/icons/Koobi.png b/src/drivers/webextension/images/icons/Koobi.png similarity index 100% rename from src/icons/Koobi.png rename to src/drivers/webextension/images/icons/Koobi.png diff --git a/src/icons/Kooboo CMS.png b/src/drivers/webextension/images/icons/Kooboo CMS.png similarity index 100% rename from src/icons/Kooboo CMS.png rename to src/drivers/webextension/images/icons/Kooboo CMS.png diff --git a/src/icons/Kotisivukone.png b/src/drivers/webextension/images/icons/Kotisivukone.png similarity index 100% rename from src/icons/Kotisivukone.png rename to src/drivers/webextension/images/icons/Kotisivukone.png diff --git a/src/icons/Kubernetes.svg b/src/drivers/webextension/images/icons/Kubernetes.svg similarity index 100% rename from src/icons/Kubernetes.svg rename to src/drivers/webextension/images/icons/Kubernetes.svg diff --git a/src/icons/LEPTON.png b/src/drivers/webextension/images/icons/LEPTON.png similarity index 100% rename from src/icons/LEPTON.png rename to src/drivers/webextension/images/icons/LEPTON.png diff --git a/src/icons/LOU.png b/src/drivers/webextension/images/icons/LOU.png similarity index 100% rename from src/icons/LOU.png rename to src/drivers/webextension/images/icons/LOU.png diff --git a/src/drivers/webextension/images/icons/Lagoon.png b/src/drivers/webextension/images/icons/Lagoon.png new file mode 100644 index 000000000..6ae4319fe Binary files /dev/null and b/src/drivers/webextension/images/icons/Lagoon.png differ diff --git a/src/icons/Laravel.svg b/src/drivers/webextension/images/icons/Laravel.svg similarity index 100% rename from src/icons/Laravel.svg rename to src/drivers/webextension/images/icons/Laravel.svg diff --git a/src/icons/Leaflet.png b/src/drivers/webextension/images/icons/Leaflet.png similarity index 100% rename from src/icons/Leaflet.png rename to src/drivers/webextension/images/icons/Leaflet.png diff --git a/src/icons/Less.png b/src/drivers/webextension/images/icons/Less.png similarity index 100% rename from src/icons/Less.png rename to src/drivers/webextension/images/icons/Less.png diff --git a/src/icons/Liferay.svg b/src/drivers/webextension/images/icons/Liferay.svg similarity index 100% rename from src/icons/Liferay.svg rename to src/drivers/webextension/images/icons/Liferay.svg diff --git a/src/icons/Lift.png b/src/drivers/webextension/images/icons/Lift.png similarity index 100% rename from src/icons/Lift.png rename to src/drivers/webextension/images/icons/Lift.png diff --git a/src/icons/LightMon Engine.png b/src/drivers/webextension/images/icons/LightMon Engine.png similarity index 100% rename from src/icons/LightMon Engine.png rename to src/drivers/webextension/images/icons/LightMon Engine.png diff --git a/src/icons/Lightbox.png b/src/drivers/webextension/images/icons/Lightbox.png similarity index 100% rename from src/icons/Lightbox.png rename to src/drivers/webextension/images/icons/Lightbox.png diff --git a/src/icons/Lightspeed.svg b/src/drivers/webextension/images/icons/Lightspeed.svg similarity index 100% rename from src/icons/Lightspeed.svg rename to src/drivers/webextension/images/icons/Lightspeed.svg diff --git a/src/icons/LinkSmart.png b/src/drivers/webextension/images/icons/LinkSmart.png similarity index 100% rename from src/icons/LinkSmart.png rename to src/drivers/webextension/images/icons/LinkSmart.png diff --git a/src/icons/Linkedin.svg b/src/drivers/webextension/images/icons/Linkedin.svg similarity index 100% rename from src/icons/Linkedin.svg rename to src/drivers/webextension/images/icons/Linkedin.svg diff --git a/src/icons/List.js.png b/src/drivers/webextension/images/icons/List.js.png similarity index 100% rename from src/icons/List.js.png rename to src/drivers/webextension/images/icons/List.js.png diff --git a/src/icons/LiteSpeed.svg b/src/drivers/webextension/images/icons/LiteSpeed.svg similarity index 100% rename from src/icons/LiteSpeed.svg rename to src/drivers/webextension/images/icons/LiteSpeed.svg diff --git a/src/icons/Lithium.png b/src/drivers/webextension/images/icons/Lithium.png similarity index 100% rename from src/icons/Lithium.png rename to src/drivers/webextension/images/icons/Lithium.png diff --git a/src/icons/LiveAgent.png b/src/drivers/webextension/images/icons/LiveAgent.png similarity index 100% rename from src/icons/LiveAgent.png rename to src/drivers/webextension/images/icons/LiveAgent.png diff --git a/src/icons/LiveChat.png b/src/drivers/webextension/images/icons/LiveChat.png similarity index 100% rename from src/icons/LiveChat.png rename to src/drivers/webextension/images/icons/LiveChat.png diff --git a/src/icons/LiveHelp.png b/src/drivers/webextension/images/icons/LiveHelp.png similarity index 100% rename from src/icons/LiveHelp.png rename to src/drivers/webextension/images/icons/LiveHelp.png diff --git a/src/icons/LiveJournal.png b/src/drivers/webextension/images/icons/LiveJournal.png similarity index 100% rename from src/icons/LiveJournal.png rename to src/drivers/webextension/images/icons/LiveJournal.png diff --git a/src/icons/LivePerson.png b/src/drivers/webextension/images/icons/LivePerson.png similarity index 100% rename from src/icons/LivePerson.png rename to src/drivers/webextension/images/icons/LivePerson.png diff --git a/src/icons/LiveStory.png b/src/drivers/webextension/images/icons/LiveStory.png similarity index 100% rename from src/icons/LiveStory.png rename to src/drivers/webextension/images/icons/LiveStory.png diff --git a/src/icons/LiveStreet CMS.png b/src/drivers/webextension/images/icons/LiveStreet CMS.png similarity index 100% rename from src/icons/LiveStreet CMS.png rename to src/drivers/webextension/images/icons/LiveStreet CMS.png diff --git a/src/icons/Livefyre.png b/src/drivers/webextension/images/icons/Livefyre.png similarity index 100% rename from src/icons/Livefyre.png rename to src/drivers/webextension/images/icons/Livefyre.png diff --git a/src/icons/Liveinternet.png b/src/drivers/webextension/images/icons/Liveinternet.png similarity index 100% rename from src/icons/Liveinternet.png rename to src/drivers/webextension/images/icons/Liveinternet.png diff --git a/src/drivers/webextension/images/icons/Livewire.png b/src/drivers/webextension/images/icons/Livewire.png new file mode 100644 index 000000000..bd206ef05 Binary files /dev/null and b/src/drivers/webextension/images/icons/Livewire.png differ diff --git a/src/icons/Lo-dash.png b/src/drivers/webextension/images/icons/Lo-dash.png similarity index 100% rename from src/icons/Lo-dash.png rename to src/drivers/webextension/images/icons/Lo-dash.png diff --git a/src/icons/LocalFocus.png b/src/drivers/webextension/images/icons/LocalFocus.png similarity index 100% rename from src/icons/LocalFocus.png rename to src/drivers/webextension/images/icons/LocalFocus.png diff --git a/src/icons/Locomotive.png b/src/drivers/webextension/images/icons/Locomotive.png similarity index 100% rename from src/icons/Locomotive.png rename to src/drivers/webextension/images/icons/Locomotive.png diff --git a/src/icons/Logitech Media Server.png b/src/drivers/webextension/images/icons/Logitech Media Server.png similarity index 100% rename from src/icons/Logitech Media Server.png rename to src/drivers/webextension/images/icons/Logitech Media Server.png diff --git a/src/icons/Loja Integrada.png b/src/drivers/webextension/images/icons/Loja Integrada.png similarity index 100% rename from src/icons/Loja Integrada.png rename to src/drivers/webextension/images/icons/Loja Integrada.png diff --git a/src/icons/Lotus Domino.png b/src/drivers/webextension/images/icons/Lotus Domino.png similarity index 100% rename from src/icons/Lotus Domino.png rename to src/drivers/webextension/images/icons/Lotus Domino.png diff --git a/src/icons/Lua.png b/src/drivers/webextension/images/icons/Lua.png similarity index 100% rename from src/icons/Lua.png rename to src/drivers/webextension/images/icons/Lua.png diff --git a/src/icons/Lucene.png b/src/drivers/webextension/images/icons/Lucene.png similarity index 100% rename from src/icons/Lucene.png rename to src/drivers/webextension/images/icons/Lucene.png diff --git a/src/icons/Luigisbox.svg b/src/drivers/webextension/images/icons/Luigisbox.svg similarity index 100% rename from src/icons/Luigisbox.svg rename to src/drivers/webextension/images/icons/Luigisbox.svg diff --git a/src/icons/MODX.png b/src/drivers/webextension/images/icons/MODX.png similarity index 100% rename from src/icons/MODX.png rename to src/drivers/webextension/images/icons/MODX.png diff --git a/src/icons/MadAdsMedia.png b/src/drivers/webextension/images/icons/MadAdsMedia.png similarity index 100% rename from src/icons/MadAdsMedia.png rename to src/drivers/webextension/images/icons/MadAdsMedia.png diff --git a/src/icons/Magento.png b/src/drivers/webextension/images/icons/Magento.png similarity index 100% rename from src/icons/Magento.png rename to src/drivers/webextension/images/icons/Magento.png diff --git a/src/icons/MakeShopKorea.png b/src/drivers/webextension/images/icons/MakeShopKorea.png similarity index 100% rename from src/icons/MakeShopKorea.png rename to src/drivers/webextension/images/icons/MakeShopKorea.png diff --git a/src/icons/Mambo.png b/src/drivers/webextension/images/icons/Mambo.png similarity index 100% rename from src/icons/Mambo.png rename to src/drivers/webextension/images/icons/Mambo.png diff --git a/src/icons/MantisBT.png b/src/drivers/webextension/images/icons/MantisBT.png similarity index 100% rename from src/icons/MantisBT.png rename to src/drivers/webextension/images/icons/MantisBT.png diff --git a/src/icons/ManyContacts.png b/src/drivers/webextension/images/icons/ManyContacts.png similarity index 100% rename from src/icons/ManyContacts.png rename to src/drivers/webextension/images/icons/ManyContacts.png diff --git a/src/icons/Marionette.js.svg b/src/drivers/webextension/images/icons/Marionette.js.svg similarity index 100% rename from src/icons/Marionette.js.svg rename to src/drivers/webextension/images/icons/Marionette.js.svg diff --git a/src/icons/Marketo.png b/src/drivers/webextension/images/icons/Marketo.png similarity index 100% rename from src/icons/Marketo.png rename to src/drivers/webextension/images/icons/Marketo.png diff --git a/src/icons/Material Design Lite.png b/src/drivers/webextension/images/icons/Material Design Lite.png similarity index 100% rename from src/icons/Material Design Lite.png rename to src/drivers/webextension/images/icons/Material Design Lite.png diff --git a/src/icons/Materialize CSS.png b/src/drivers/webextension/images/icons/Materialize CSS.png similarity index 100% rename from src/icons/Materialize CSS.png rename to src/drivers/webextension/images/icons/Materialize CSS.png diff --git a/src/icons/MathJax.png b/src/drivers/webextension/images/icons/MathJax.png similarity index 100% rename from src/icons/MathJax.png rename to src/drivers/webextension/images/icons/MathJax.png diff --git a/src/icons/Matomo.png b/src/drivers/webextension/images/icons/Matomo.png similarity index 100% rename from src/icons/Matomo.png rename to src/drivers/webextension/images/icons/Matomo.png diff --git a/src/icons/MaxCDN.png b/src/drivers/webextension/images/icons/MaxCDN.png similarity index 100% rename from src/icons/MaxCDN.png rename to src/drivers/webextension/images/icons/MaxCDN.png diff --git a/src/icons/MaxSite CMS.png b/src/drivers/webextension/images/icons/MaxSite CMS.png similarity index 100% rename from src/icons/MaxSite CMS.png rename to src/drivers/webextension/images/icons/MaxSite CMS.png diff --git a/src/icons/MediaElement.js.png b/src/drivers/webextension/images/icons/MediaElement.js.png similarity index 100% rename from src/icons/MediaElement.js.png rename to src/drivers/webextension/images/icons/MediaElement.js.png diff --git a/src/icons/MediaWiki.png b/src/drivers/webextension/images/icons/MediaWiki.png similarity index 100% rename from src/icons/MediaWiki.png rename to src/drivers/webextension/images/icons/MediaWiki.png diff --git a/src/icons/Medium.svg b/src/drivers/webextension/images/icons/Medium.svg similarity index 100% rename from src/icons/Medium.svg rename to src/drivers/webextension/images/icons/Medium.svg diff --git a/src/icons/Meebo.png b/src/drivers/webextension/images/icons/Meebo.png similarity index 100% rename from src/icons/Meebo.png rename to src/drivers/webextension/images/icons/Meebo.png diff --git a/src/icons/MemberStack.png b/src/drivers/webextension/images/icons/MemberStack.png similarity index 100% rename from src/icons/MemberStack.png rename to src/drivers/webextension/images/icons/MemberStack.png diff --git a/src/icons/Meteor.png b/src/drivers/webextension/images/icons/Meteor.png similarity index 100% rename from src/icons/Meteor.png rename to src/drivers/webextension/images/icons/Meteor.png diff --git a/src/icons/Methode.png b/src/drivers/webextension/images/icons/Methode.png similarity index 100% rename from src/icons/Methode.png rename to src/drivers/webextension/images/icons/Methode.png diff --git a/src/icons/Microsoft ASP.NET.png b/src/drivers/webextension/images/icons/Microsoft ASP.NET.png similarity index 100% rename from src/icons/Microsoft ASP.NET.png rename to src/drivers/webextension/images/icons/Microsoft ASP.NET.png diff --git a/src/icons/Microsoft Excel.svg b/src/drivers/webextension/images/icons/Microsoft Excel.svg similarity index 100% rename from src/icons/Microsoft Excel.svg rename to src/drivers/webextension/images/icons/Microsoft Excel.svg diff --git a/src/icons/Microsoft PowerPoint.svg b/src/drivers/webextension/images/icons/Microsoft PowerPoint.svg similarity index 100% rename from src/icons/Microsoft PowerPoint.svg rename to src/drivers/webextension/images/icons/Microsoft PowerPoint.svg diff --git a/src/icons/Microsoft Publisher.svg b/src/drivers/webextension/images/icons/Microsoft Publisher.svg similarity index 100% rename from src/icons/Microsoft Publisher.svg rename to src/drivers/webextension/images/icons/Microsoft Publisher.svg diff --git a/src/icons/Microsoft SharePoint.png b/src/drivers/webextension/images/icons/Microsoft SharePoint.png similarity index 100% rename from src/icons/Microsoft SharePoint.png rename to src/drivers/webextension/images/icons/Microsoft SharePoint.png diff --git a/src/icons/Microsoft Word.svg b/src/drivers/webextension/images/icons/Microsoft Word.svg similarity index 100% rename from src/icons/Microsoft Word.svg rename to src/drivers/webextension/images/icons/Microsoft Word.svg diff --git a/src/icons/Microsoft.png b/src/drivers/webextension/images/icons/Microsoft.png similarity index 100% rename from src/icons/Microsoft.png rename to src/drivers/webextension/images/icons/Microsoft.png diff --git a/src/icons/Milligram.png b/src/drivers/webextension/images/icons/Milligram.png similarity index 100% rename from src/icons/Milligram.png rename to src/drivers/webextension/images/icons/Milligram.png diff --git a/src/icons/MiniBB.png b/src/drivers/webextension/images/icons/MiniBB.png similarity index 100% rename from src/icons/MiniBB.png rename to src/drivers/webextension/images/icons/MiniBB.png diff --git a/src/icons/Mint.png b/src/drivers/webextension/images/icons/Mint.png similarity index 100% rename from src/icons/Mint.png rename to src/drivers/webextension/images/icons/Mint.png diff --git a/src/icons/Mixpanel.png b/src/drivers/webextension/images/icons/Mixpanel.png similarity index 100% rename from src/icons/Mixpanel.png rename to src/drivers/webextension/images/icons/Mixpanel.png diff --git a/src/icons/MobX.svg b/src/drivers/webextension/images/icons/MobX.svg similarity index 100% rename from src/icons/MobX.svg rename to src/drivers/webextension/images/icons/MobX.svg diff --git a/src/icons/Mobify.png b/src/drivers/webextension/images/icons/Mobify.png similarity index 100% rename from src/icons/Mobify.png rename to src/drivers/webextension/images/icons/Mobify.png diff --git a/src/icons/MochiKit.png b/src/drivers/webextension/images/icons/MochiKit.png similarity index 100% rename from src/icons/MochiKit.png rename to src/drivers/webextension/images/icons/MochiKit.png diff --git a/src/icons/Modernizr.svg b/src/drivers/webextension/images/icons/Modernizr.svg similarity index 100% rename from src/icons/Modernizr.svg rename to src/drivers/webextension/images/icons/Modernizr.svg diff --git a/src/icons/Moguta.CMS.png b/src/drivers/webextension/images/icons/Moguta.CMS.png similarity index 100% rename from src/icons/Moguta.CMS.png rename to src/drivers/webextension/images/icons/Moguta.CMS.png diff --git a/src/icons/MoinMoin.png b/src/drivers/webextension/images/icons/MoinMoin.png similarity index 100% rename from src/icons/MoinMoin.png rename to src/drivers/webextension/images/icons/MoinMoin.png diff --git a/src/icons/Mojolicious.png b/src/drivers/webextension/images/icons/Mojolicious.png similarity index 100% rename from src/icons/Mojolicious.png rename to src/drivers/webextension/images/icons/Mojolicious.png diff --git a/src/icons/Mollom.png b/src/drivers/webextension/images/icons/Mollom.png similarity index 100% rename from src/icons/Mollom.png rename to src/drivers/webextension/images/icons/Mollom.png diff --git a/src/icons/Moment.js.svg b/src/drivers/webextension/images/icons/Moment.js.svg similarity index 100% rename from src/icons/Moment.js.svg rename to src/drivers/webextension/images/icons/Moment.js.svg diff --git a/src/icons/Mondo Media.png b/src/drivers/webextension/images/icons/Mondo Media.png similarity index 100% rename from src/icons/Mondo Media.png rename to src/drivers/webextension/images/icons/Mondo Media.png diff --git a/src/icons/MongoDB.png b/src/drivers/webextension/images/icons/MongoDB.png similarity index 100% rename from src/icons/MongoDB.png rename to src/drivers/webextension/images/icons/MongoDB.png diff --git a/src/icons/Mongrel.png b/src/drivers/webextension/images/icons/Mongrel.png similarity index 100% rename from src/icons/Mongrel.png rename to src/drivers/webextension/images/icons/Mongrel.png diff --git a/src/icons/Monkey HTTP Server.png b/src/drivers/webextension/images/icons/Monkey HTTP Server.png similarity index 100% rename from src/icons/Monkey HTTP Server.png rename to src/drivers/webextension/images/icons/Monkey HTTP Server.png diff --git a/src/icons/Mono.net.png b/src/drivers/webextension/images/icons/Mono.net.png similarity index 100% rename from src/icons/Mono.net.png rename to src/drivers/webextension/images/icons/Mono.net.png diff --git a/src/icons/Mono.png b/src/drivers/webextension/images/icons/Mono.png similarity index 100% rename from src/icons/Mono.png rename to src/drivers/webextension/images/icons/Mono.png diff --git a/src/icons/MooTools.png b/src/drivers/webextension/images/icons/MooTools.png similarity index 100% rename from src/icons/MooTools.png rename to src/drivers/webextension/images/icons/MooTools.png diff --git a/src/icons/Moodle.png b/src/drivers/webextension/images/icons/Moodle.png similarity index 100% rename from src/icons/Moodle.png rename to src/drivers/webextension/images/icons/Moodle.png diff --git a/src/icons/MotoCMS.svg b/src/drivers/webextension/images/icons/MotoCMS.svg similarity index 100% rename from src/icons/MotoCMS.svg rename to src/drivers/webextension/images/icons/MotoCMS.svg diff --git a/src/icons/Movable Type.png b/src/drivers/webextension/images/icons/Movable Type.png similarity index 100% rename from src/icons/Movable Type.png rename to src/drivers/webextension/images/icons/Movable Type.png diff --git a/src/icons/Mozard Suite.png b/src/drivers/webextension/images/icons/Mozard Suite.png similarity index 100% rename from src/icons/Mozard Suite.png rename to src/drivers/webextension/images/icons/Mozard Suite.png diff --git a/src/icons/Mura CMS.png b/src/drivers/webextension/images/icons/Mura CMS.png similarity index 100% rename from src/icons/Mura CMS.png rename to src/drivers/webextension/images/icons/Mura CMS.png diff --git a/src/icons/Mustache.png b/src/drivers/webextension/images/icons/Mustache.png similarity index 100% rename from src/icons/Mustache.png rename to src/drivers/webextension/images/icons/Mustache.png diff --git a/src/icons/MyBB.png b/src/drivers/webextension/images/icons/MyBB.png similarity index 100% rename from src/icons/MyBB.png rename to src/drivers/webextension/images/icons/MyBB.png diff --git a/src/icons/MyBlogLog.png b/src/drivers/webextension/images/icons/MyBlogLog.png similarity index 100% rename from src/icons/MyBlogLog.png rename to src/drivers/webextension/images/icons/MyBlogLog.png diff --git a/src/icons/MySQL.svg b/src/drivers/webextension/images/icons/MySQL.svg similarity index 100% rename from src/icons/MySQL.svg rename to src/drivers/webextension/images/icons/MySQL.svg diff --git a/src/icons/Mynetcap.png b/src/drivers/webextension/images/icons/Mynetcap.png similarity index 100% rename from src/icons/Mynetcap.png rename to src/drivers/webextension/images/icons/Mynetcap.png diff --git a/src/icons/NVD3.png b/src/drivers/webextension/images/icons/NVD3.png similarity index 100% rename from src/icons/NVD3.png rename to src/drivers/webextension/images/icons/NVD3.png diff --git a/src/icons/Navegg.png b/src/drivers/webextension/images/icons/Navegg.png similarity index 100% rename from src/icons/Navegg.png rename to src/drivers/webextension/images/icons/Navegg.png diff --git a/src/icons/Neos.svg b/src/drivers/webextension/images/icons/Neos.svg similarity index 100% rename from src/icons/Neos.svg rename to src/drivers/webextension/images/icons/Neos.svg diff --git a/src/icons/NetSuite.png b/src/drivers/webextension/images/icons/NetSuite.png similarity index 100% rename from src/icons/NetSuite.png rename to src/drivers/webextension/images/icons/NetSuite.png diff --git a/src/icons/Netlify.svg b/src/drivers/webextension/images/icons/Netlify.svg similarity index 100% rename from src/icons/Netlify.svg rename to src/drivers/webextension/images/icons/Netlify.svg diff --git a/src/icons/Neto.svg b/src/drivers/webextension/images/icons/Neto.svg similarity index 100% rename from src/icons/Neto.svg rename to src/drivers/webextension/images/icons/Neto.svg diff --git a/src/icons/Nette Framework.png b/src/drivers/webextension/images/icons/Nette Framework.png similarity index 100% rename from src/icons/Nette Framework.png rename to src/drivers/webextension/images/icons/Nette Framework.png diff --git a/src/icons/New Relic.png b/src/drivers/webextension/images/icons/New Relic.png similarity index 100% rename from src/icons/New Relic.png rename to src/drivers/webextension/images/icons/New Relic.png diff --git a/src/icons/NextGEN Gallery.png b/src/drivers/webextension/images/icons/NextGEN Gallery.png similarity index 100% rename from src/icons/NextGEN Gallery.png rename to src/drivers/webextension/images/icons/NextGEN Gallery.png diff --git a/src/icons/Nginx.svg b/src/drivers/webextension/images/icons/Nginx.svg similarity index 100% rename from src/icons/Nginx.svg rename to src/drivers/webextension/images/icons/Nginx.svg diff --git a/src/icons/NodeBB.png b/src/drivers/webextension/images/icons/NodeBB.png similarity index 100% rename from src/icons/NodeBB.png rename to src/drivers/webextension/images/icons/NodeBB.png diff --git a/src/icons/Nuxt.js.svg b/src/drivers/webextension/images/icons/Nuxt.js.svg similarity index 100% rename from src/icons/Nuxt.js.svg rename to src/drivers/webextension/images/icons/Nuxt.js.svg diff --git a/src/icons/OWL Carousel.png b/src/drivers/webextension/images/icons/OWL Carousel.png similarity index 100% rename from src/icons/OWL Carousel.png rename to src/drivers/webextension/images/icons/OWL Carousel.png diff --git a/src/icons/OXID eShop.png b/src/drivers/webextension/images/icons/OXID eShop.png similarity index 100% rename from src/icons/OXID eShop.png rename to src/drivers/webextension/images/icons/OXID eShop.png diff --git a/src/icons/October CMS.png b/src/drivers/webextension/images/icons/October CMS.png similarity index 100% rename from src/icons/October CMS.png rename to src/drivers/webextension/images/icons/October CMS.png diff --git a/src/icons/Odoo.png b/src/drivers/webextension/images/icons/Odoo.png similarity index 100% rename from src/icons/Odoo.png rename to src/drivers/webextension/images/icons/Odoo.png diff --git a/src/icons/Olark.png b/src/drivers/webextension/images/icons/Olark.png similarity index 100% rename from src/icons/Olark.png rename to src/drivers/webextension/images/icons/Olark.png diff --git a/src/icons/OneAPM.png b/src/drivers/webextension/images/icons/OneAPM.png similarity index 100% rename from src/icons/OneAPM.png rename to src/drivers/webextension/images/icons/OneAPM.png diff --git a/src/icons/OneStat.png b/src/drivers/webextension/images/icons/OneStat.png similarity index 100% rename from src/icons/OneStat.png rename to src/drivers/webextension/images/icons/OneStat.png diff --git a/src/icons/Onshop.svg b/src/drivers/webextension/images/icons/Onshop.svg similarity index 100% rename from src/icons/Onshop.svg rename to src/drivers/webextension/images/icons/Onshop.svg diff --git a/src/icons/Open AdStream.png b/src/drivers/webextension/images/icons/Open AdStream.png similarity index 100% rename from src/icons/Open AdStream.png rename to src/drivers/webextension/images/icons/Open AdStream.png diff --git a/src/icons/Open Classifieds.png b/src/drivers/webextension/images/icons/Open Classifieds.png similarity index 100% rename from src/icons/Open Classifieds.png rename to src/drivers/webextension/images/icons/Open Classifieds.png diff --git a/src/icons/Open Journal Systems.png b/src/drivers/webextension/images/icons/Open Journal Systems.png similarity index 100% rename from src/icons/Open Journal Systems.png rename to src/drivers/webextension/images/icons/Open Journal Systems.png diff --git a/src/icons/Open Web Analytics.png b/src/drivers/webextension/images/icons/Open Web Analytics.png similarity index 100% rename from src/icons/Open Web Analytics.png rename to src/drivers/webextension/images/icons/Open Web Analytics.png diff --git a/src/icons/Open eShop.png b/src/drivers/webextension/images/icons/Open eShop.png similarity index 100% rename from src/icons/Open eShop.png rename to src/drivers/webextension/images/icons/Open eShop.png diff --git a/src/icons/OpenCart.png b/src/drivers/webextension/images/icons/OpenCart.png similarity index 100% rename from src/icons/OpenCart.png rename to src/drivers/webextension/images/icons/OpenCart.png diff --git a/src/icons/OpenCms.png b/src/drivers/webextension/images/icons/OpenCms.png similarity index 100% rename from src/icons/OpenCms.png rename to src/drivers/webextension/images/icons/OpenCms.png diff --git a/src/icons/OpenGrok.png b/src/drivers/webextension/images/icons/OpenGrok.png similarity index 100% rename from src/icons/OpenGrok.png rename to src/drivers/webextension/images/icons/OpenGrok.png diff --git a/src/icons/OpenLayers.png b/src/drivers/webextension/images/icons/OpenLayers.png similarity index 100% rename from src/icons/OpenLayers.png rename to src/drivers/webextension/images/icons/OpenLayers.png diff --git a/src/icons/OpenNemas.png b/src/drivers/webextension/images/icons/OpenNemas.png similarity index 100% rename from src/icons/OpenNemas.png rename to src/drivers/webextension/images/icons/OpenNemas.png diff --git a/src/icons/OpenResty.png b/src/drivers/webextension/images/icons/OpenResty.png similarity index 100% rename from src/icons/OpenResty.png rename to src/drivers/webextension/images/icons/OpenResty.png diff --git a/src/icons/OpenSSL.png b/src/drivers/webextension/images/icons/OpenSSL.png similarity index 100% rename from src/icons/OpenSSL.png rename to src/drivers/webextension/images/icons/OpenSSL.png diff --git a/src/icons/OpenText Web Solutions.png b/src/drivers/webextension/images/icons/OpenText Web Solutions.png similarity index 100% rename from src/icons/OpenText Web Solutions.png rename to src/drivers/webextension/images/icons/OpenText Web Solutions.png diff --git a/src/icons/OpenUI5.png b/src/drivers/webextension/images/icons/OpenUI5.png similarity index 100% rename from src/icons/OpenUI5.png rename to src/drivers/webextension/images/icons/OpenUI5.png diff --git a/src/icons/OpenX.png b/src/drivers/webextension/images/icons/OpenX.png similarity index 100% rename from src/icons/OpenX.png rename to src/drivers/webextension/images/icons/OpenX.png diff --git a/src/icons/Optimizely.png b/src/drivers/webextension/images/icons/Optimizely.png similarity index 100% rename from src/icons/Optimizely.png rename to src/drivers/webextension/images/icons/Optimizely.png diff --git a/src/icons/Oracle.png b/src/drivers/webextension/images/icons/Oracle.png similarity index 100% rename from src/icons/Oracle.png rename to src/drivers/webextension/images/icons/Oracle.png diff --git a/src/icons/Orchard CMS.png b/src/drivers/webextension/images/icons/Orchard CMS.png similarity index 100% rename from src/icons/Orchard CMS.png rename to src/drivers/webextension/images/icons/Orchard CMS.png diff --git a/src/icons/Outbrain.png b/src/drivers/webextension/images/icons/Outbrain.png similarity index 100% rename from src/icons/Outbrain.png rename to src/drivers/webextension/images/icons/Outbrain.png diff --git a/src/icons/Outlook.svg b/src/drivers/webextension/images/icons/Outlook.svg similarity index 100% rename from src/icons/Outlook.svg rename to src/drivers/webextension/images/icons/Outlook.svg diff --git a/src/icons/PDF.js.svg b/src/drivers/webextension/images/icons/PDF.js.svg similarity index 100% rename from src/icons/PDF.js.svg rename to src/drivers/webextension/images/icons/PDF.js.svg diff --git a/src/icons/PHP-Fusion.png b/src/drivers/webextension/images/icons/PHP-Fusion.png similarity index 100% rename from src/icons/PHP-Fusion.png rename to src/drivers/webextension/images/icons/PHP-Fusion.png diff --git a/src/icons/PHP-Nuke.png b/src/drivers/webextension/images/icons/PHP-Nuke.png similarity index 100% rename from src/icons/PHP-Nuke.png rename to src/drivers/webextension/images/icons/PHP-Nuke.png diff --git a/src/icons/PHP.svg b/src/drivers/webextension/images/icons/PHP.svg similarity index 100% rename from src/icons/PHP.svg rename to src/drivers/webextension/images/icons/PHP.svg diff --git a/src/icons/Pagekit.png b/src/drivers/webextension/images/icons/Pagekit.png similarity index 100% rename from src/icons/Pagekit.png rename to src/drivers/webextension/images/icons/Pagekit.png diff --git a/src/icons/Pagevamp.png b/src/drivers/webextension/images/icons/Pagevamp.png similarity index 100% rename from src/icons/Pagevamp.png rename to src/drivers/webextension/images/icons/Pagevamp.png diff --git a/src/icons/Parcel.png b/src/drivers/webextension/images/icons/Parcel.png similarity index 100% rename from src/icons/Parcel.png rename to src/drivers/webextension/images/icons/Parcel.png diff --git a/src/icons/Pardot.png b/src/drivers/webextension/images/icons/Pardot.png similarity index 100% rename from src/icons/Pardot.png rename to src/drivers/webextension/images/icons/Pardot.png diff --git a/src/icons/Parse.ly.png b/src/drivers/webextension/images/icons/Parse.ly.png similarity index 100% rename from src/icons/Parse.ly.png rename to src/drivers/webextension/images/icons/Parse.ly.png diff --git a/src/icons/PayPal.svg b/src/drivers/webextension/images/icons/PayPal.svg similarity index 100% rename from src/icons/PayPal.svg rename to src/drivers/webextension/images/icons/PayPal.svg diff --git a/src/icons/PencilBlue.png b/src/drivers/webextension/images/icons/PencilBlue.png similarity index 100% rename from src/icons/PencilBlue.png rename to src/drivers/webextension/images/icons/PencilBlue.png diff --git a/src/icons/Percussion.png b/src/drivers/webextension/images/icons/Percussion.png similarity index 100% rename from src/icons/Percussion.png rename to src/drivers/webextension/images/icons/Percussion.png diff --git a/src/icons/Perl.png b/src/drivers/webextension/images/icons/Perl.png similarity index 100% rename from src/icons/Perl.png rename to src/drivers/webextension/images/icons/Perl.png diff --git a/src/icons/Phabricator.png b/src/drivers/webextension/images/icons/Phabricator.png similarity index 100% rename from src/icons/Phabricator.png rename to src/drivers/webextension/images/icons/Phabricator.png diff --git a/src/icons/Phaser.png b/src/drivers/webextension/images/icons/Phaser.png similarity index 100% rename from src/icons/Phaser.png rename to src/drivers/webextension/images/icons/Phaser.png diff --git a/src/icons/Phenomic.svg b/src/drivers/webextension/images/icons/Phenomic.svg similarity index 100% rename from src/icons/Phenomic.svg rename to src/drivers/webextension/images/icons/Phenomic.svg diff --git a/src/icons/PhotoShelter.png b/src/drivers/webextension/images/icons/PhotoShelter.png similarity index 100% rename from src/icons/PhotoShelter.png rename to src/drivers/webextension/images/icons/PhotoShelter.png diff --git a/src/icons/Phusion Passenger.png b/src/drivers/webextension/images/icons/Phusion Passenger.png similarity index 100% rename from src/icons/Phusion Passenger.png rename to src/drivers/webextension/images/icons/Phusion Passenger.png diff --git a/src/icons/Pingoteam.svg b/src/drivers/webextension/images/icons/Pingoteam.svg similarity index 100% rename from src/icons/Pingoteam.svg rename to src/drivers/webextension/images/icons/Pingoteam.svg diff --git a/src/icons/Pinterest.svg b/src/drivers/webextension/images/icons/Pinterest.svg similarity index 100% rename from src/icons/Pinterest.svg rename to src/drivers/webextension/images/icons/Pinterest.svg diff --git a/src/icons/Planet.png b/src/drivers/webextension/images/icons/Planet.png similarity index 100% rename from src/icons/Planet.png rename to src/drivers/webextension/images/icons/Planet.png diff --git a/src/icons/Plataforma NEO.svg b/src/drivers/webextension/images/icons/Plataforma NEO.svg similarity index 100% rename from src/icons/Plataforma NEO.svg rename to src/drivers/webextension/images/icons/Plataforma NEO.svg diff --git a/src/icons/PlatformOS.svg b/src/drivers/webextension/images/icons/PlatformOS.svg similarity index 100% rename from src/icons/PlatformOS.svg rename to src/drivers/webextension/images/icons/PlatformOS.svg diff --git a/src/icons/Play.svg b/src/drivers/webextension/images/icons/Play.svg similarity index 100% rename from src/icons/Play.svg rename to src/drivers/webextension/images/icons/Play.svg diff --git a/src/icons/Plentymarkets.png b/src/drivers/webextension/images/icons/Plentymarkets.png similarity index 100% rename from src/icons/Plentymarkets.png rename to src/drivers/webextension/images/icons/Plentymarkets.png diff --git a/src/icons/Plesk.png b/src/drivers/webextension/images/icons/Plesk.png similarity index 100% rename from src/icons/Plesk.png rename to src/drivers/webextension/images/icons/Plesk.png diff --git a/src/icons/Pligg.png b/src/drivers/webextension/images/icons/Pligg.png similarity index 100% rename from src/icons/Pligg.png rename to src/drivers/webextension/images/icons/Pligg.png diff --git a/src/icons/Plone.png b/src/drivers/webextension/images/icons/Plone.png similarity index 100% rename from src/icons/Plone.png rename to src/drivers/webextension/images/icons/Plone.png diff --git a/src/icons/Plotly.png b/src/drivers/webextension/images/icons/Plotly.png similarity index 100% rename from src/icons/Plotly.png rename to src/drivers/webextension/images/icons/Plotly.png diff --git a/src/drivers/webextension/images/icons/Plyr.png b/src/drivers/webextension/images/icons/Plyr.png new file mode 100644 index 000000000..0bb620cdb Binary files /dev/null and b/src/drivers/webextension/images/icons/Plyr.png differ diff --git a/src/icons/Po.st.png b/src/drivers/webextension/images/icons/Po.st.png similarity index 100% rename from src/icons/Po.st.png rename to src/drivers/webextension/images/icons/Po.st.png diff --git a/src/icons/Polymer.png b/src/drivers/webextension/images/icons/Polymer.png similarity index 100% rename from src/icons/Polymer.png rename to src/drivers/webextension/images/icons/Polymer.png diff --git a/src/icons/Posterous.png b/src/drivers/webextension/images/icons/Posterous.png similarity index 100% rename from src/icons/Posterous.png rename to src/drivers/webextension/images/icons/Posterous.png diff --git a/src/icons/PostgreSQL.png b/src/drivers/webextension/images/icons/PostgreSQL.png similarity index 100% rename from src/icons/PostgreSQL.png rename to src/drivers/webextension/images/icons/PostgreSQL.png diff --git a/src/icons/Powergap.png b/src/drivers/webextension/images/icons/Powergap.png similarity index 100% rename from src/icons/Powergap.png rename to src/drivers/webextension/images/icons/Powergap.png diff --git a/src/icons/Prebid.png b/src/drivers/webextension/images/icons/Prebid.png similarity index 100% rename from src/icons/Prebid.png rename to src/drivers/webextension/images/icons/Prebid.png diff --git a/src/icons/Prefix-Free.png b/src/drivers/webextension/images/icons/Prefix-Free.png similarity index 100% rename from src/icons/Prefix-Free.png rename to src/drivers/webextension/images/icons/Prefix-Free.png diff --git a/src/icons/PrestaShop.svg b/src/drivers/webextension/images/icons/PrestaShop.svg similarity index 100% rename from src/icons/PrestaShop.svg rename to src/drivers/webextension/images/icons/PrestaShop.svg diff --git a/src/drivers/webextension/images/icons/Prism.svg b/src/drivers/webextension/images/icons/Prism.svg new file mode 100644 index 000000000..9cbbc0814 --- /dev/null +++ b/src/drivers/webextension/images/icons/Prism.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/icons/Project Wonderful.png b/src/drivers/webextension/images/icons/Project Wonderful.png similarity index 100% rename from src/icons/Project Wonderful.png rename to src/drivers/webextension/images/icons/Project Wonderful.png diff --git a/src/icons/Prototype.png b/src/drivers/webextension/images/icons/Prototype.png similarity index 100% rename from src/icons/Prototype.png rename to src/drivers/webextension/images/icons/Prototype.png diff --git a/src/icons/Proximis Omnichannel.png b/src/drivers/webextension/images/icons/Proximis Omnichannel.png similarity index 100% rename from src/icons/Proximis Omnichannel.png rename to src/drivers/webextension/images/icons/Proximis Omnichannel.png diff --git a/src/icons/PubMatic.png b/src/drivers/webextension/images/icons/PubMatic.png similarity index 100% rename from src/icons/PubMatic.png rename to src/drivers/webextension/images/icons/PubMatic.png diff --git a/src/icons/Public CMS.png b/src/drivers/webextension/images/icons/Public CMS.png similarity index 100% rename from src/icons/Public CMS.png rename to src/drivers/webextension/images/icons/Public CMS.png diff --git a/src/icons/Pure CSS.png b/src/drivers/webextension/images/icons/Pure CSS.png similarity index 100% rename from src/icons/Pure CSS.png rename to src/drivers/webextension/images/icons/Pure CSS.png diff --git a/src/icons/PyroCMS.png b/src/drivers/webextension/images/icons/PyroCMS.png similarity index 100% rename from src/icons/PyroCMS.png rename to src/drivers/webextension/images/icons/PyroCMS.png diff --git a/src/icons/Python.png b/src/drivers/webextension/images/icons/Python.png similarity index 100% rename from src/icons/Python.png rename to src/drivers/webextension/images/icons/Python.png diff --git a/src/icons/Quantcast.png b/src/drivers/webextension/images/icons/Quantcast.png similarity index 100% rename from src/icons/Quantcast.png rename to src/drivers/webextension/images/icons/Quantcast.png diff --git a/src/icons/Quick.CMS.png b/src/drivers/webextension/images/icons/Quick.CMS.png similarity index 100% rename from src/icons/Quick.CMS.png rename to src/drivers/webextension/images/icons/Quick.CMS.png diff --git a/src/icons/Quick.Cart.png b/src/drivers/webextension/images/icons/Quick.Cart.png similarity index 100% rename from src/icons/Quick.Cart.png rename to src/drivers/webextension/images/icons/Quick.Cart.png diff --git a/src/icons/Quill.png b/src/drivers/webextension/images/icons/Quill.png similarity index 100% rename from src/icons/Quill.png rename to src/drivers/webextension/images/icons/Quill.png diff --git a/src/icons/RBS Change.png b/src/drivers/webextension/images/icons/RBS Change.png similarity index 100% rename from src/icons/RBS Change.png rename to src/drivers/webextension/images/icons/RBS Change.png diff --git a/src/icons/RCMS.png b/src/drivers/webextension/images/icons/RCMS.png similarity index 100% rename from src/icons/RCMS.png rename to src/drivers/webextension/images/icons/RCMS.png diff --git a/src/icons/RD Station.png b/src/drivers/webextension/images/icons/RD Station.png similarity index 100% rename from src/icons/RD Station.png rename to src/drivers/webextension/images/icons/RD Station.png diff --git a/src/icons/RDoc.png b/src/drivers/webextension/images/icons/RDoc.png similarity index 100% rename from src/icons/RDoc.png rename to src/drivers/webextension/images/icons/RDoc.png diff --git a/src/icons/RXWeb.svg b/src/drivers/webextension/images/icons/RXWeb.svg similarity index 100% rename from src/icons/RXWeb.svg rename to src/drivers/webextension/images/icons/RXWeb.svg diff --git a/src/icons/RackCache.png b/src/drivers/webextension/images/icons/RackCache.png similarity index 100% rename from src/icons/RackCache.png rename to src/drivers/webextension/images/icons/RackCache.png diff --git a/src/icons/RainLoop.png b/src/drivers/webextension/images/icons/RainLoop.png similarity index 100% rename from src/icons/RainLoop.png rename to src/drivers/webextension/images/icons/RainLoop.png diff --git a/src/icons/RakutenDigitalCommerce.png b/src/drivers/webextension/images/icons/RakutenDigitalCommerce.png similarity index 100% rename from src/icons/RakutenDigitalCommerce.png rename to src/drivers/webextension/images/icons/RakutenDigitalCommerce.png diff --git a/src/icons/Ramda.png b/src/drivers/webextension/images/icons/Ramda.png similarity index 100% rename from src/icons/Ramda.png rename to src/drivers/webextension/images/icons/Ramda.png diff --git a/src/icons/Raphael.png b/src/drivers/webextension/images/icons/Raphael.png similarity index 100% rename from src/icons/Raphael.png rename to src/drivers/webextension/images/icons/Raphael.png diff --git a/src/icons/Raspbian.svg b/src/drivers/webextension/images/icons/Raspbian.svg similarity index 100% rename from src/icons/Raspbian.svg rename to src/drivers/webextension/images/icons/Raspbian.svg diff --git a/src/icons/Rayo.png b/src/drivers/webextension/images/icons/Rayo.png similarity index 100% rename from src/icons/Rayo.png rename to src/drivers/webextension/images/icons/Rayo.png diff --git a/src/icons/React.png b/src/drivers/webextension/images/icons/React.png similarity index 100% rename from src/icons/React.png rename to src/drivers/webextension/images/icons/React.png diff --git a/src/icons/RebelMouse.svg b/src/drivers/webextension/images/icons/RebelMouse.svg similarity index 100% rename from src/icons/RebelMouse.svg rename to src/drivers/webextension/images/icons/RebelMouse.svg diff --git a/src/icons/Red Hat.svg b/src/drivers/webextension/images/icons/Red Hat.svg similarity index 100% rename from src/icons/Red Hat.svg rename to src/drivers/webextension/images/icons/Red Hat.svg diff --git a/src/icons/Redaxscript.svg b/src/drivers/webextension/images/icons/Redaxscript.svg similarity index 100% rename from src/icons/Redaxscript.svg rename to src/drivers/webextension/images/icons/Redaxscript.svg diff --git a/src/icons/Reddit.png b/src/drivers/webextension/images/icons/Reddit.png similarity index 100% rename from src/icons/Reddit.png rename to src/drivers/webextension/images/icons/Reddit.png diff --git a/src/icons/Redmine.png b/src/drivers/webextension/images/icons/Redmine.png similarity index 100% rename from src/icons/Redmine.png rename to src/drivers/webextension/images/icons/Redmine.png diff --git a/src/icons/Reinvigorate.png b/src/drivers/webextension/images/icons/Reinvigorate.png similarity index 100% rename from src/icons/Reinvigorate.png rename to src/drivers/webextension/images/icons/Reinvigorate.png diff --git a/src/icons/RequireJS.png b/src/drivers/webextension/images/icons/RequireJS.png similarity index 100% rename from src/icons/RequireJS.png rename to src/drivers/webextension/images/icons/RequireJS.png diff --git a/src/icons/Resin.png b/src/drivers/webextension/images/icons/Resin.png similarity index 100% rename from src/icons/Resin.png rename to src/drivers/webextension/images/icons/Resin.png diff --git a/src/icons/Reveal.js.png b/src/drivers/webextension/images/icons/Reveal.js.png similarity index 100% rename from src/icons/Reveal.js.png rename to src/drivers/webextension/images/icons/Reveal.js.png diff --git a/src/icons/Revel.png b/src/drivers/webextension/images/icons/Revel.png similarity index 100% rename from src/icons/Revel.png rename to src/drivers/webextension/images/icons/Revel.png diff --git a/src/icons/RightJS.png b/src/drivers/webextension/images/icons/RightJS.png similarity index 100% rename from src/icons/RightJS.png rename to src/drivers/webextension/images/icons/RightJS.png diff --git a/src/icons/Riot.png b/src/drivers/webextension/images/icons/Riot.png similarity index 100% rename from src/icons/Riot.png rename to src/drivers/webextension/images/icons/Riot.png diff --git a/src/icons/RiteCMS.png b/src/drivers/webextension/images/icons/RiteCMS.png similarity index 100% rename from src/icons/RiteCMS.png rename to src/drivers/webextension/images/icons/RiteCMS.png diff --git a/src/icons/Roadiz CMS.png b/src/drivers/webextension/images/icons/Roadiz CMS.png similarity index 100% rename from src/icons/Roadiz CMS.png rename to src/drivers/webextension/images/icons/Roadiz CMS.png diff --git a/src/icons/Robin.png b/src/drivers/webextension/images/icons/Robin.png similarity index 100% rename from src/icons/Robin.png rename to src/drivers/webextension/images/icons/Robin.png diff --git a/src/icons/RockRMS.svg b/src/drivers/webextension/images/icons/RockRMS.svg similarity index 100% rename from src/icons/RockRMS.svg rename to src/drivers/webextension/images/icons/RockRMS.svg diff --git a/src/icons/RoundCube.png b/src/drivers/webextension/images/icons/RoundCube.png similarity index 100% rename from src/icons/RoundCube.png rename to src/drivers/webextension/images/icons/RoundCube.png diff --git a/src/icons/Rubicon Project.png b/src/drivers/webextension/images/icons/Rubicon Project.png similarity index 100% rename from src/icons/Rubicon Project.png rename to src/drivers/webextension/images/icons/Rubicon Project.png diff --git a/src/icons/Ruby on Rails.png b/src/drivers/webextension/images/icons/Ruby on Rails.png similarity index 100% rename from src/icons/Ruby on Rails.png rename to src/drivers/webextension/images/icons/Ruby on Rails.png diff --git a/src/icons/Ruby.png b/src/drivers/webextension/images/icons/Ruby.png similarity index 100% rename from src/icons/Ruby.png rename to src/drivers/webextension/images/icons/Ruby.png diff --git a/src/icons/Ruxit.png b/src/drivers/webextension/images/icons/Ruxit.png similarity index 100% rename from src/icons/Ruxit.png rename to src/drivers/webextension/images/icons/Ruxit.png diff --git a/src/icons/RxJS.png b/src/drivers/webextension/images/icons/RxJS.png similarity index 100% rename from src/icons/RxJS.png rename to src/drivers/webextension/images/icons/RxJS.png diff --git a/src/icons/S.Builder.png b/src/drivers/webextension/images/icons/S.Builder.png similarity index 100% rename from src/icons/S.Builder.png rename to src/drivers/webextension/images/icons/S.Builder.png diff --git a/src/icons/SAP.png b/src/drivers/webextension/images/icons/SAP.png similarity index 100% rename from src/icons/SAP.png rename to src/drivers/webextension/images/icons/SAP.png diff --git a/src/icons/SDL Tridion.png b/src/drivers/webextension/images/icons/SDL Tridion.png similarity index 100% rename from src/icons/SDL Tridion.png rename to src/drivers/webextension/images/icons/SDL Tridion.png diff --git a/src/icons/SIMsite.png b/src/drivers/webextension/images/icons/SIMsite.png similarity index 100% rename from src/icons/SIMsite.png rename to src/drivers/webextension/images/icons/SIMsite.png diff --git a/src/icons/SMF.png b/src/drivers/webextension/images/icons/SMF.png similarity index 100% rename from src/icons/SMF.png rename to src/drivers/webextension/images/icons/SMF.png diff --git a/src/icons/SOBI 2.png b/src/drivers/webextension/images/icons/SOBI 2.png similarity index 100% rename from src/icons/SOBI 2.png rename to src/drivers/webextension/images/icons/SOBI 2.png diff --git a/src/icons/SPDY.png b/src/drivers/webextension/images/icons/SPDY.png similarity index 100% rename from src/icons/SPDY.png rename to src/drivers/webextension/images/icons/SPDY.png diff --git a/src/icons/SQL Buddy.png b/src/drivers/webextension/images/icons/SQL Buddy.png similarity index 100% rename from src/icons/SQL Buddy.png rename to src/drivers/webextension/images/icons/SQL Buddy.png diff --git a/src/icons/SQLite.png b/src/drivers/webextension/images/icons/SQLite.png similarity index 100% rename from src/icons/SQLite.png rename to src/drivers/webextension/images/icons/SQLite.png diff --git a/src/icons/SUSE.png b/src/drivers/webextension/images/icons/SUSE.png similarity index 100% rename from src/icons/SUSE.png rename to src/drivers/webextension/images/icons/SUSE.png diff --git a/src/icons/SWFObject.png b/src/drivers/webextension/images/icons/SWFObject.png similarity index 100% rename from src/icons/SWFObject.png rename to src/drivers/webextension/images/icons/SWFObject.png diff --git a/src/icons/Saber.svg b/src/drivers/webextension/images/icons/Saber.svg similarity index 100% rename from src/icons/Saber.svg rename to src/drivers/webextension/images/icons/Saber.svg diff --git a/src/icons/Sails.js.svg b/src/drivers/webextension/images/icons/Sails.js.svg similarity index 100% rename from src/icons/Sails.js.svg rename to src/drivers/webextension/images/icons/Sails.js.svg diff --git a/src/icons/Salesforce.svg b/src/drivers/webextension/images/icons/Salesforce.svg similarity index 100% rename from src/icons/Salesforce.svg rename to src/drivers/webextension/images/icons/Salesforce.svg diff --git a/src/icons/Sapper.svg b/src/drivers/webextension/images/icons/Sapper.svg similarity index 100% rename from src/icons/Sapper.svg rename to src/drivers/webextension/images/icons/Sapper.svg diff --git a/src/icons/Sarka-SPIP.png b/src/drivers/webextension/images/icons/Sarka-SPIP.png similarity index 100% rename from src/icons/Sarka-SPIP.png rename to src/drivers/webextension/images/icons/Sarka-SPIP.png diff --git a/src/icons/Sazito.svg b/src/drivers/webextension/images/icons/Sazito.svg similarity index 100% rename from src/icons/Sazito.svg rename to src/drivers/webextension/images/icons/Sazito.svg diff --git a/src/icons/Scala.png b/src/drivers/webextension/images/icons/Scala.png similarity index 100% rename from src/icons/Scala.png rename to src/drivers/webextension/images/icons/Scala.png diff --git a/src/icons/Scenari.png b/src/drivers/webextension/images/icons/Scenari.png similarity index 100% rename from src/icons/Scenari.png rename to src/drivers/webextension/images/icons/Scenari.png diff --git a/src/icons/Scholica.svg b/src/drivers/webextension/images/icons/Scholica.svg similarity index 100% rename from src/icons/Scholica.svg rename to src/drivers/webextension/images/icons/Scholica.svg diff --git a/src/icons/Scientific Linux.png b/src/drivers/webextension/images/icons/Scientific Linux.png similarity index 100% rename from src/icons/Scientific Linux.png rename to src/drivers/webextension/images/icons/Scientific Linux.png diff --git a/src/icons/SeamlessCMS.png b/src/drivers/webextension/images/icons/SeamlessCMS.png similarity index 100% rename from src/icons/SeamlessCMS.png rename to src/drivers/webextension/images/icons/SeamlessCMS.png diff --git a/src/icons/Segment.png b/src/drivers/webextension/images/icons/Segment.png similarity index 100% rename from src/icons/Segment.png rename to src/drivers/webextension/images/icons/Segment.png diff --git a/src/icons/Select2.png b/src/drivers/webextension/images/icons/Select2.png similarity index 100% rename from src/icons/Select2.png rename to src/drivers/webextension/images/icons/Select2.png diff --git a/src/icons/Semantic-ui.png b/src/drivers/webextension/images/icons/Semantic-ui.png similarity index 100% rename from src/icons/Semantic-ui.png rename to src/drivers/webextension/images/icons/Semantic-ui.png diff --git a/src/icons/Sencha Touch.png b/src/drivers/webextension/images/icons/Sencha Touch.png similarity index 100% rename from src/icons/Sencha Touch.png rename to src/drivers/webextension/images/icons/Sencha Touch.png diff --git a/src/icons/Sensors Data.svg b/src/drivers/webextension/images/icons/Sensors Data.svg similarity index 100% rename from src/icons/Sensors Data.svg rename to src/drivers/webextension/images/icons/Sensors Data.svg diff --git a/src/icons/Sentry.svg b/src/drivers/webextension/images/icons/Sentry.svg similarity index 100% rename from src/icons/Sentry.svg rename to src/drivers/webextension/images/icons/Sentry.svg diff --git a/src/icons/Serendipity.png b/src/drivers/webextension/images/icons/Serendipity.png similarity index 100% rename from src/icons/Serendipity.png rename to src/drivers/webextension/images/icons/Serendipity.png diff --git a/src/icons/Shapecss.svg b/src/drivers/webextension/images/icons/Shapecss.svg similarity index 100% rename from src/icons/Shapecss.svg rename to src/drivers/webextension/images/icons/Shapecss.svg diff --git a/src/icons/ShareThis.png b/src/drivers/webextension/images/icons/ShareThis.png similarity index 100% rename from src/icons/ShareThis.png rename to src/drivers/webextension/images/icons/ShareThis.png diff --git a/src/icons/ShellInABox.png b/src/drivers/webextension/images/icons/ShellInABox.png similarity index 100% rename from src/icons/ShellInABox.png rename to src/drivers/webextension/images/icons/ShellInABox.png diff --git a/src/icons/Shiny.png b/src/drivers/webextension/images/icons/Shiny.png similarity index 100% rename from src/icons/Shiny.png rename to src/drivers/webextension/images/icons/Shiny.png diff --git a/src/icons/ShinyStat.png b/src/drivers/webextension/images/icons/ShinyStat.png similarity index 100% rename from src/icons/ShinyStat.png rename to src/drivers/webextension/images/icons/ShinyStat.png diff --git a/src/icons/Shopatron.png b/src/drivers/webextension/images/icons/Shopatron.png similarity index 100% rename from src/icons/Shopatron.png rename to src/drivers/webextension/images/icons/Shopatron.png diff --git a/src/icons/Shopcada.png b/src/drivers/webextension/images/icons/Shopcada.png similarity index 100% rename from src/icons/Shopcada.png rename to src/drivers/webextension/images/icons/Shopcada.png diff --git a/src/icons/Shoper.svg b/src/drivers/webextension/images/icons/Shoper.svg similarity index 100% rename from src/icons/Shoper.svg rename to src/drivers/webextension/images/icons/Shoper.svg diff --git a/src/icons/Shoperfa.png b/src/drivers/webextension/images/icons/Shoperfa.png similarity index 100% rename from src/icons/Shoperfa.png rename to src/drivers/webextension/images/icons/Shoperfa.png diff --git a/src/icons/Shopery.svg b/src/drivers/webextension/images/icons/Shopery.svg similarity index 100% rename from src/icons/Shopery.svg rename to src/drivers/webextension/images/icons/Shopery.svg diff --git a/src/icons/Shopfa.svg b/src/drivers/webextension/images/icons/Shopfa.svg similarity index 100% rename from src/icons/Shopfa.svg rename to src/drivers/webextension/images/icons/Shopfa.svg diff --git a/src/icons/Shopify.svg b/src/drivers/webextension/images/icons/Shopify.svg similarity index 100% rename from src/icons/Shopify.svg rename to src/drivers/webextension/images/icons/Shopify.svg diff --git a/src/icons/Shoptet.svg b/src/drivers/webextension/images/icons/Shoptet.svg similarity index 100% rename from src/icons/Shoptet.svg rename to src/drivers/webextension/images/icons/Shoptet.svg diff --git a/src/icons/Shopware.svg b/src/drivers/webextension/images/icons/Shopware.svg similarity index 100% rename from src/icons/Shopware.svg rename to src/drivers/webextension/images/icons/Shopware.svg diff --git a/src/icons/Silva.png b/src/drivers/webextension/images/icons/Silva.png similarity index 100% rename from src/icons/Silva.png rename to src/drivers/webextension/images/icons/Silva.png diff --git a/src/icons/SilverStripe.svg b/src/drivers/webextension/images/icons/SilverStripe.svg similarity index 100% rename from src/icons/SilverStripe.svg rename to src/drivers/webextension/images/icons/SilverStripe.svg diff --git a/src/icons/SimpleAnalytics.svg b/src/drivers/webextension/images/icons/SimpleAnalytics.svg similarity index 100% rename from src/icons/SimpleAnalytics.svg rename to src/drivers/webextension/images/icons/SimpleAnalytics.svg diff --git a/src/icons/Simplebo.png b/src/drivers/webextension/images/icons/Simplebo.png similarity index 100% rename from src/icons/Simplebo.png rename to src/drivers/webextension/images/icons/Simplebo.png diff --git a/src/icons/Site Meter.png b/src/drivers/webextension/images/icons/Site Meter.png similarity index 100% rename from src/icons/Site Meter.png rename to src/drivers/webextension/images/icons/Site Meter.png diff --git a/src/icons/SiteCatalyst.png b/src/drivers/webextension/images/icons/SiteCatalyst.png similarity index 100% rename from src/icons/SiteCatalyst.png rename to src/drivers/webextension/images/icons/SiteCatalyst.png diff --git a/src/icons/SiteEdit.png b/src/drivers/webextension/images/icons/SiteEdit.png similarity index 100% rename from src/icons/SiteEdit.png rename to src/drivers/webextension/images/icons/SiteEdit.png diff --git a/src/icons/Sitecore.png b/src/drivers/webextension/images/icons/Sitecore.png similarity index 100% rename from src/icons/Sitecore.png rename to src/drivers/webextension/images/icons/Sitecore.png diff --git a/src/icons/Sitefinity.svg b/src/drivers/webextension/images/icons/Sitefinity.svg similarity index 100% rename from src/icons/Sitefinity.svg rename to src/drivers/webextension/images/icons/Sitefinity.svg diff --git a/src/icons/Siteglide.svg b/src/drivers/webextension/images/icons/Siteglide.svg similarity index 100% rename from src/icons/Siteglide.svg rename to src/drivers/webextension/images/icons/Siteglide.svg diff --git a/src/icons/Sivuviidakko.png b/src/drivers/webextension/images/icons/Sivuviidakko.png similarity index 100% rename from src/icons/Sivuviidakko.png rename to src/drivers/webextension/images/icons/Sivuviidakko.png diff --git a/src/icons/Sizmek.png b/src/drivers/webextension/images/icons/Sizmek.png similarity index 100% rename from src/icons/Sizmek.png rename to src/drivers/webextension/images/icons/Sizmek.png diff --git a/src/icons/SlickStack.png b/src/drivers/webextension/images/icons/SlickStack.png similarity index 100% rename from src/icons/SlickStack.png rename to src/drivers/webextension/images/icons/SlickStack.png diff --git a/src/icons/Slimbox 2.png b/src/drivers/webextension/images/icons/Slimbox 2.png similarity index 100% rename from src/icons/Slimbox 2.png rename to src/drivers/webextension/images/icons/Slimbox 2.png diff --git a/src/icons/Slimbox.png b/src/drivers/webextension/images/icons/Slimbox.png similarity index 100% rename from src/icons/Slimbox.png rename to src/drivers/webextension/images/icons/Slimbox.png diff --git a/src/icons/Smart Ad Server.png b/src/drivers/webextension/images/icons/Smart Ad Server.png similarity index 100% rename from src/icons/Smart Ad Server.png rename to src/drivers/webextension/images/icons/Smart Ad Server.png diff --git a/src/icons/SmartSite.png b/src/drivers/webextension/images/icons/SmartSite.png similarity index 100% rename from src/icons/SmartSite.png rename to src/drivers/webextension/images/icons/SmartSite.png diff --git a/src/icons/Smartstore.png b/src/drivers/webextension/images/icons/Smartstore.png similarity index 100% rename from src/icons/Smartstore.png rename to src/drivers/webextension/images/icons/Smartstore.png diff --git a/src/icons/Snap.png b/src/drivers/webextension/images/icons/Snap.png similarity index 100% rename from src/icons/Snap.png rename to src/drivers/webextension/images/icons/Snap.png diff --git a/src/icons/Snap.svg.png b/src/drivers/webextension/images/icons/Snap.svg.png similarity index 100% rename from src/icons/Snap.svg.png rename to src/drivers/webextension/images/icons/Snap.svg.png diff --git a/src/icons/Snoobi.png b/src/drivers/webextension/images/icons/Snoobi.png similarity index 100% rename from src/icons/Snoobi.png rename to src/drivers/webextension/images/icons/Snoobi.png diff --git a/src/icons/SobiPro.png b/src/drivers/webextension/images/icons/SobiPro.png similarity index 100% rename from src/icons/SobiPro.png rename to src/drivers/webextension/images/icons/SobiPro.png diff --git a/src/icons/Socket.io.png b/src/drivers/webextension/images/icons/Socket.io.png similarity index 100% rename from src/icons/Socket.io.png rename to src/drivers/webextension/images/icons/Socket.io.png diff --git a/src/icons/Solodev.png b/src/drivers/webextension/images/icons/Solodev.png similarity index 100% rename from src/icons/Solodev.png rename to src/drivers/webextension/images/icons/Solodev.png diff --git a/src/icons/Solr.png b/src/drivers/webextension/images/icons/Solr.png similarity index 100% rename from src/icons/Solr.png rename to src/drivers/webextension/images/icons/Solr.png diff --git a/src/icons/Solusquare.png b/src/drivers/webextension/images/icons/Solusquare.png similarity index 100% rename from src/icons/Solusquare.png rename to src/drivers/webextension/images/icons/Solusquare.png diff --git a/src/icons/Solve Media.png b/src/drivers/webextension/images/icons/Solve Media.png similarity index 100% rename from src/icons/Solve Media.png rename to src/drivers/webextension/images/icons/Solve Media.png diff --git a/src/icons/SoundManager.png b/src/drivers/webextension/images/icons/SoundManager.png similarity index 100% rename from src/icons/SoundManager.png rename to src/drivers/webextension/images/icons/SoundManager.png diff --git a/src/icons/Sphinx.png b/src/drivers/webextension/images/icons/Sphinx.png similarity index 100% rename from src/icons/Sphinx.png rename to src/drivers/webextension/images/icons/Sphinx.png diff --git a/src/icons/SpinCMS.png b/src/drivers/webextension/images/icons/SpinCMS.png similarity index 100% rename from src/icons/SpinCMS.png rename to src/drivers/webextension/images/icons/SpinCMS.png diff --git a/src/icons/Splunk.png b/src/drivers/webextension/images/icons/Splunk.png similarity index 100% rename from src/icons/Splunk.png rename to src/drivers/webextension/images/icons/Splunk.png diff --git a/src/icons/Spree.png b/src/drivers/webextension/images/icons/Spree.png similarity index 100% rename from src/icons/Spree.png rename to src/drivers/webextension/images/icons/Spree.png diff --git a/src/icons/Sqreen.png b/src/drivers/webextension/images/icons/Sqreen.png similarity index 100% rename from src/icons/Sqreen.png rename to src/drivers/webextension/images/icons/Sqreen.png diff --git a/src/icons/Squarespace.png b/src/drivers/webextension/images/icons/Squarespace.png similarity index 100% rename from src/icons/Squarespace.png rename to src/drivers/webextension/images/icons/Squarespace.png diff --git a/src/icons/SquirrelMail.png b/src/drivers/webextension/images/icons/SquirrelMail.png similarity index 100% rename from src/icons/SquirrelMail.png rename to src/drivers/webextension/images/icons/SquirrelMail.png diff --git a/src/icons/Squiz Matrix.png b/src/drivers/webextension/images/icons/Squiz Matrix.png similarity index 100% rename from src/icons/Squiz Matrix.png rename to src/drivers/webextension/images/icons/Squiz Matrix.png diff --git a/src/icons/Stackla.png b/src/drivers/webextension/images/icons/Stackla.png similarity index 100% rename from src/icons/Stackla.png rename to src/drivers/webextension/images/icons/Stackla.png diff --git a/src/icons/Starlet.png b/src/drivers/webextension/images/icons/Starlet.png similarity index 100% rename from src/icons/Starlet.png rename to src/drivers/webextension/images/icons/Starlet.png diff --git a/src/icons/Statcounter.svg b/src/drivers/webextension/images/icons/Statcounter.svg similarity index 100% rename from src/icons/Statcounter.svg rename to src/drivers/webextension/images/icons/Statcounter.svg diff --git a/src/icons/Store Systems.png b/src/drivers/webextension/images/icons/Store Systems.png similarity index 100% rename from src/icons/Store Systems.png rename to src/drivers/webextension/images/icons/Store Systems.png diff --git a/src/icons/Strapi.png b/src/drivers/webextension/images/icons/Strapi.png similarity index 100% rename from src/icons/Strapi.png rename to src/drivers/webextension/images/icons/Strapi.png diff --git a/src/icons/Strikingly.png b/src/drivers/webextension/images/icons/Strikingly.png similarity index 100% rename from src/icons/Strikingly.png rename to src/drivers/webextension/images/icons/Strikingly.png diff --git a/src/icons/Stripe.png b/src/drivers/webextension/images/icons/Stripe.png similarity index 100% rename from src/icons/Stripe.png rename to src/drivers/webextension/images/icons/Stripe.png diff --git a/src/icons/SublimeVideo.png b/src/drivers/webextension/images/icons/SublimeVideo.png similarity index 100% rename from src/icons/SublimeVideo.png rename to src/drivers/webextension/images/icons/SublimeVideo.png diff --git a/src/icons/Subrion.png b/src/drivers/webextension/images/icons/Subrion.png similarity index 100% rename from src/icons/Subrion.png rename to src/drivers/webextension/images/icons/Subrion.png diff --git a/src/icons/Sulu.svg b/src/drivers/webextension/images/icons/Sulu.svg similarity index 100% rename from src/icons/Sulu.svg rename to src/drivers/webextension/images/icons/Sulu.svg diff --git a/src/icons/SumoMe.png b/src/drivers/webextension/images/icons/SumoMe.png similarity index 100% rename from src/icons/SumoMe.png rename to src/drivers/webextension/images/icons/SumoMe.png diff --git a/src/icons/Supersized.png b/src/drivers/webextension/images/icons/Supersized.png similarity index 100% rename from src/icons/Supersized.png rename to src/drivers/webextension/images/icons/Supersized.png diff --git a/src/icons/Svelte.svg b/src/drivers/webextension/images/icons/Svelte.svg similarity index 100% rename from src/icons/Svelte.svg rename to src/drivers/webextension/images/icons/Svelte.svg diff --git a/src/icons/SweetAlert.png b/src/drivers/webextension/images/icons/SweetAlert.png similarity index 100% rename from src/icons/SweetAlert.png rename to src/drivers/webextension/images/icons/SweetAlert.png diff --git a/src/icons/SweetAlert2.png b/src/drivers/webextension/images/icons/SweetAlert2.png similarity index 100% rename from src/icons/SweetAlert2.png rename to src/drivers/webextension/images/icons/SweetAlert2.png diff --git a/src/icons/Swell.svg b/src/drivers/webextension/images/icons/Swell.svg similarity index 100% rename from src/icons/Swell.svg rename to src/drivers/webextension/images/icons/Swell.svg diff --git a/src/icons/Swiftlet.png b/src/drivers/webextension/images/icons/Swiftlet.png similarity index 100% rename from src/icons/Swiftlet.png rename to src/drivers/webextension/images/icons/Swiftlet.png diff --git a/src/icons/Symfony.svg b/src/drivers/webextension/images/icons/Symfony.svg similarity index 100% rename from src/icons/Symfony.svg rename to src/drivers/webextension/images/icons/Symfony.svg diff --git a/src/icons/Synology DiskStation.png b/src/drivers/webextension/images/icons/Synology DiskStation.png similarity index 100% rename from src/icons/Synology DiskStation.png rename to src/drivers/webextension/images/icons/Synology DiskStation.png diff --git a/src/icons/SyntaxHighlighter.png b/src/drivers/webextension/images/icons/SyntaxHighlighter.png similarity index 100% rename from src/icons/SyntaxHighlighter.png rename to src/drivers/webextension/images/icons/SyntaxHighlighter.png diff --git a/src/icons/TWiki.png b/src/drivers/webextension/images/icons/TWiki.png similarity index 100% rename from src/icons/TWiki.png rename to src/drivers/webextension/images/icons/TWiki.png diff --git a/src/icons/TYPO3.svg b/src/drivers/webextension/images/icons/TYPO3.svg similarity index 100% rename from src/icons/TYPO3.svg rename to src/drivers/webextension/images/icons/TYPO3.svg diff --git a/src/icons/Taiga.png b/src/drivers/webextension/images/icons/Taiga.png similarity index 100% rename from src/icons/Taiga.png rename to src/drivers/webextension/images/icons/Taiga.png diff --git a/src/icons/Tamago.png b/src/drivers/webextension/images/icons/Tamago.png similarity index 100% rename from src/icons/Tamago.png rename to src/drivers/webextension/images/icons/Tamago.png diff --git a/src/icons/TawkTo.png b/src/drivers/webextension/images/icons/TawkTo.png similarity index 100% rename from src/icons/TawkTo.png rename to src/drivers/webextension/images/icons/TawkTo.png diff --git a/src/icons/Tealeaf.png b/src/drivers/webextension/images/icons/Tealeaf.png similarity index 100% rename from src/icons/Tealeaf.png rename to src/drivers/webextension/images/icons/Tealeaf.png diff --git a/src/icons/Tealium.png b/src/drivers/webextension/images/icons/Tealium.png similarity index 100% rename from src/icons/Tealium.png rename to src/drivers/webextension/images/icons/Tealium.png diff --git a/src/icons/TeamCity.svg b/src/drivers/webextension/images/icons/TeamCity.svg similarity index 100% rename from src/icons/TeamCity.svg rename to src/drivers/webextension/images/icons/TeamCity.svg diff --git a/src/icons/Tebex.png b/src/drivers/webextension/images/icons/Tebex.png similarity index 100% rename from src/icons/Tebex.png rename to src/drivers/webextension/images/icons/Tebex.png diff --git a/src/icons/Telescope.png b/src/drivers/webextension/images/icons/Telescope.png similarity index 100% rename from src/icons/Telescope.png rename to src/drivers/webextension/images/icons/Telescope.png diff --git a/src/icons/TencentWaterproofWall.png b/src/drivers/webextension/images/icons/TencentWaterproofWall.png similarity index 100% rename from src/icons/TencentWaterproofWall.png rename to src/drivers/webextension/images/icons/TencentWaterproofWall.png diff --git a/src/icons/Tengine.png b/src/drivers/webextension/images/icons/Tengine.png similarity index 100% rename from src/icons/Tengine.png rename to src/drivers/webextension/images/icons/Tengine.png diff --git a/src/icons/Textpattern CMS.png b/src/drivers/webextension/images/icons/Textpattern CMS.png similarity index 100% rename from src/icons/Textpattern CMS.png rename to src/drivers/webextension/images/icons/Textpattern CMS.png diff --git a/src/icons/Thelia.png b/src/drivers/webextension/images/icons/Thelia.png similarity index 100% rename from src/icons/Thelia.png rename to src/drivers/webextension/images/icons/Thelia.png diff --git a/src/icons/ThinkPHP.png b/src/drivers/webextension/images/icons/ThinkPHP.png similarity index 100% rename from src/icons/ThinkPHP.png rename to src/drivers/webextension/images/icons/ThinkPHP.png diff --git a/src/icons/Ticimax.png b/src/drivers/webextension/images/icons/Ticimax.png similarity index 100% rename from src/icons/Ticimax.png rename to src/drivers/webextension/images/icons/Ticimax.png diff --git a/src/icons/TiddlyWiki.png b/src/drivers/webextension/images/icons/TiddlyWiki.png similarity index 100% rename from src/icons/TiddlyWiki.png rename to src/drivers/webextension/images/icons/TiddlyWiki.png diff --git a/src/icons/Tiki Wiki CMS Groupware.png b/src/drivers/webextension/images/icons/Tiki Wiki CMS Groupware.png similarity index 100% rename from src/icons/Tiki Wiki CMS Groupware.png rename to src/drivers/webextension/images/icons/Tiki Wiki CMS Groupware.png diff --git a/src/icons/Tilda.svg b/src/drivers/webextension/images/icons/Tilda.svg similarity index 100% rename from src/icons/Tilda.svg rename to src/drivers/webextension/images/icons/Tilda.svg diff --git a/src/icons/Timeplot.png b/src/drivers/webextension/images/icons/Timeplot.png similarity index 100% rename from src/icons/Timeplot.png rename to src/drivers/webextension/images/icons/Timeplot.png diff --git a/src/icons/TinyMCE.png b/src/drivers/webextension/images/icons/TinyMCE.png similarity index 100% rename from src/icons/TinyMCE.png rename to src/drivers/webextension/images/icons/TinyMCE.png diff --git a/src/icons/Titan.png b/src/drivers/webextension/images/icons/Titan.png similarity index 100% rename from src/icons/Titan.png rename to src/drivers/webextension/images/icons/Titan.png diff --git a/src/icons/TomatoCart.png b/src/drivers/webextension/images/icons/TomatoCart.png similarity index 100% rename from src/icons/TomatoCart.png rename to src/drivers/webextension/images/icons/TomatoCart.png diff --git a/src/icons/TornadoServer.png b/src/drivers/webextension/images/icons/TornadoServer.png similarity index 100% rename from src/icons/TornadoServer.png rename to src/drivers/webextension/images/icons/TornadoServer.png diff --git a/src/icons/TotalCode.png b/src/drivers/webextension/images/icons/TotalCode.png similarity index 100% rename from src/icons/TotalCode.png rename to src/drivers/webextension/images/icons/TotalCode.png diff --git a/src/icons/Trac.png b/src/drivers/webextension/images/icons/Trac.png similarity index 100% rename from src/icons/Trac.png rename to src/drivers/webextension/images/icons/Trac.png diff --git a/src/icons/TrackJs.png b/src/drivers/webextension/images/icons/TrackJs.png similarity index 100% rename from src/icons/TrackJs.png rename to src/drivers/webextension/images/icons/TrackJs.png diff --git a/src/icons/Tsoft.png b/src/drivers/webextension/images/icons/Tsoft.png similarity index 100% rename from src/icons/Tsoft.png rename to src/drivers/webextension/images/icons/Tsoft.png diff --git a/src/icons/Tumblr.png b/src/drivers/webextension/images/icons/Tumblr.png similarity index 100% rename from src/icons/Tumblr.png rename to src/drivers/webextension/images/icons/Tumblr.png diff --git a/src/icons/TweenMax.png b/src/drivers/webextension/images/icons/TweenMax.png similarity index 100% rename from src/icons/TweenMax.png rename to src/drivers/webextension/images/icons/TweenMax.png diff --git a/src/icons/Twilight CMS.png b/src/drivers/webextension/images/icons/Twilight CMS.png similarity index 100% rename from src/icons/Twilight CMS.png rename to src/drivers/webextension/images/icons/Twilight CMS.png diff --git a/src/icons/TwistPHP.png b/src/drivers/webextension/images/icons/TwistPHP.png similarity index 100% rename from src/icons/TwistPHP.png rename to src/drivers/webextension/images/icons/TwistPHP.png diff --git a/src/icons/TwistedWeb.png b/src/drivers/webextension/images/icons/TwistedWeb.png similarity index 100% rename from src/icons/TwistedWeb.png rename to src/drivers/webextension/images/icons/TwistedWeb.png diff --git a/src/icons/Twitter Flight.png b/src/drivers/webextension/images/icons/Twitter Flight.png similarity index 100% rename from src/icons/Twitter Flight.png rename to src/drivers/webextension/images/icons/Twitter Flight.png diff --git a/src/icons/Twitter typeahead.js.png b/src/drivers/webextension/images/icons/Twitter typeahead.js.png similarity index 100% rename from src/icons/Twitter typeahead.js.png rename to src/drivers/webextension/images/icons/Twitter typeahead.js.png diff --git a/src/icons/Twitter.svg b/src/drivers/webextension/images/icons/Twitter.svg similarity index 100% rename from src/icons/Twitter.svg rename to src/drivers/webextension/images/icons/Twitter.svg diff --git a/src/icons/TypePad.png b/src/drivers/webextension/images/icons/TypePad.png similarity index 100% rename from src/icons/TypePad.png rename to src/drivers/webextension/images/icons/TypePad.png diff --git a/src/icons/Typekit.png b/src/drivers/webextension/images/icons/Typekit.png similarity index 100% rename from src/icons/Typekit.png rename to src/drivers/webextension/images/icons/Typekit.png diff --git a/src/icons/UIKit.png b/src/drivers/webextension/images/icons/UIKit.png similarity index 100% rename from src/icons/UIKit.png rename to src/drivers/webextension/images/icons/UIKit.png diff --git a/src/icons/UMI.CMS.png b/src/drivers/webextension/images/icons/UMI.CMS.png similarity index 100% rename from src/icons/UMI.CMS.png rename to src/drivers/webextension/images/icons/UMI.CMS.png diff --git a/src/icons/UNIX.png b/src/drivers/webextension/images/icons/UNIX.png similarity index 100% rename from src/icons/UNIX.png rename to src/drivers/webextension/images/icons/UNIX.png diff --git a/src/icons/Ubercart.png b/src/drivers/webextension/images/icons/Ubercart.png similarity index 100% rename from src/icons/Ubercart.png rename to src/drivers/webextension/images/icons/Ubercart.png diff --git a/src/icons/Ubuntu.png b/src/drivers/webextension/images/icons/Ubuntu.png similarity index 100% rename from src/icons/Ubuntu.png rename to src/drivers/webextension/images/icons/Ubuntu.png diff --git a/src/icons/UltraCart.png b/src/drivers/webextension/images/icons/UltraCart.png similarity index 100% rename from src/icons/UltraCart.png rename to src/drivers/webextension/images/icons/UltraCart.png diff --git a/src/icons/Umbraco.png b/src/drivers/webextension/images/icons/Umbraco.png similarity index 100% rename from src/icons/Umbraco.png rename to src/drivers/webextension/images/icons/Umbraco.png diff --git a/src/icons/Unbounce.png b/src/drivers/webextension/images/icons/Unbounce.png similarity index 100% rename from src/icons/Unbounce.png rename to src/drivers/webextension/images/icons/Unbounce.png diff --git a/src/icons/Underscore.js.png b/src/drivers/webextension/images/icons/Underscore.js.png similarity index 100% rename from src/icons/Underscore.js.png rename to src/drivers/webextension/images/icons/Underscore.js.png diff --git a/src/icons/Usabilla.svg b/src/drivers/webextension/images/icons/Usabilla.svg similarity index 100% rename from src/icons/Usabilla.svg rename to src/drivers/webextension/images/icons/Usabilla.svg diff --git a/src/icons/UserLike.svg b/src/drivers/webextension/images/icons/UserLike.svg similarity index 100% rename from src/icons/UserLike.svg rename to src/drivers/webextension/images/icons/UserLike.svg diff --git a/src/icons/UserRules.png b/src/drivers/webextension/images/icons/UserRules.png similarity index 100% rename from src/icons/UserRules.png rename to src/drivers/webextension/images/icons/UserRules.png diff --git a/src/icons/UserVoice.png b/src/drivers/webextension/images/icons/UserVoice.png similarity index 100% rename from src/icons/UserVoice.png rename to src/drivers/webextension/images/icons/UserVoice.png diff --git a/src/icons/Ushahidi.png b/src/drivers/webextension/images/icons/Ushahidi.png similarity index 100% rename from src/icons/Ushahidi.png rename to src/drivers/webextension/images/icons/Ushahidi.png diff --git a/src/icons/VIVVO.png b/src/drivers/webextension/images/icons/VIVVO.png similarity index 100% rename from src/icons/VIVVO.png rename to src/drivers/webextension/images/icons/VIVVO.png diff --git a/src/icons/VP-ASP.png b/src/drivers/webextension/images/icons/VP-ASP.png similarity index 100% rename from src/icons/VP-ASP.png rename to src/drivers/webextension/images/icons/VP-ASP.png diff --git a/src/icons/VTEX.svg b/src/drivers/webextension/images/icons/VTEX.svg similarity index 100% rename from src/icons/VTEX.svg rename to src/drivers/webextension/images/icons/VTEX.svg diff --git a/src/icons/Vaadin.svg b/src/drivers/webextension/images/icons/Vaadin.svg similarity index 100% rename from src/icons/Vaadin.svg rename to src/drivers/webextension/images/icons/Vaadin.svg diff --git a/src/icons/Vanilla.png b/src/drivers/webextension/images/icons/Vanilla.png similarity index 100% rename from src/icons/Vanilla.png rename to src/drivers/webextension/images/icons/Vanilla.png diff --git a/src/icons/Varnish.svg b/src/drivers/webextension/images/icons/Varnish.svg similarity index 100% rename from src/icons/Varnish.svg rename to src/drivers/webextension/images/icons/Varnish.svg diff --git a/src/icons/Veoxa.png b/src/drivers/webextension/images/icons/Veoxa.png similarity index 100% rename from src/icons/Veoxa.png rename to src/drivers/webextension/images/icons/Veoxa.png diff --git a/src/icons/VideoJS.svg b/src/drivers/webextension/images/icons/VideoJS.svg similarity index 100% rename from src/icons/VideoJS.svg rename to src/drivers/webextension/images/icons/VideoJS.svg diff --git a/src/icons/VigLink.png b/src/drivers/webextension/images/icons/VigLink.png similarity index 100% rename from src/icons/VigLink.png rename to src/drivers/webextension/images/icons/VigLink.png diff --git a/src/icons/Vignette.png b/src/drivers/webextension/images/icons/Vignette.png similarity index 100% rename from src/icons/Vignette.png rename to src/drivers/webextension/images/icons/Vignette.png diff --git a/src/icons/Vimeo.png b/src/drivers/webextension/images/icons/Vimeo.png similarity index 100% rename from src/icons/Vimeo.png rename to src/drivers/webextension/images/icons/Vimeo.png diff --git a/src/icons/Virgool.svg b/src/drivers/webextension/images/icons/Virgool.svg similarity index 100% rename from src/icons/Virgool.svg rename to src/drivers/webextension/images/icons/Virgool.svg diff --git a/src/icons/VirtueMart.png b/src/drivers/webextension/images/icons/VirtueMart.png similarity index 100% rename from src/icons/VirtueMart.png rename to src/drivers/webextension/images/icons/VirtueMart.png diff --git a/src/icons/VisualPath.png b/src/drivers/webextension/images/icons/VisualPath.png similarity index 100% rename from src/icons/VisualPath.png rename to src/drivers/webextension/images/icons/VisualPath.png diff --git a/src/icons/Volusion.svg b/src/drivers/webextension/images/icons/Volusion.svg similarity index 100% rename from src/icons/Volusion.svg rename to src/drivers/webextension/images/icons/Volusion.svg diff --git a/src/icons/Vue.js.png b/src/drivers/webextension/images/icons/Vue.js.png similarity index 100% rename from src/icons/Vue.js.png rename to src/drivers/webextension/images/icons/Vue.js.png diff --git a/src/icons/VuePress.svg b/src/drivers/webextension/images/icons/VuePress.svg similarity index 100% rename from src/icons/VuePress.svg rename to src/drivers/webextension/images/icons/VuePress.svg diff --git a/src/icons/W3 Total Cache.png b/src/drivers/webextension/images/icons/W3 Total Cache.png similarity index 100% rename from src/icons/W3 Total Cache.png rename to src/drivers/webextension/images/icons/W3 Total Cache.png diff --git a/src/icons/W3Counter.png b/src/drivers/webextension/images/icons/W3Counter.png similarity index 100% rename from src/icons/W3Counter.png rename to src/drivers/webextension/images/icons/W3Counter.png diff --git a/src/icons/WEBXPAY.png b/src/drivers/webextension/images/icons/WEBXPAY.png similarity index 100% rename from src/icons/WEBXPAY.png rename to src/drivers/webextension/images/icons/WEBXPAY.png diff --git a/src/icons/WHMCS.png b/src/drivers/webextension/images/icons/WHMCS.png similarity index 100% rename from src/icons/WHMCS.png rename to src/drivers/webextension/images/icons/WHMCS.png diff --git a/src/icons/WP Rocket.png b/src/drivers/webextension/images/icons/WP Rocket.png similarity index 100% rename from src/icons/WP Rocket.png rename to src/drivers/webextension/images/icons/WP Rocket.png diff --git a/src/icons/WP-Statistics.png b/src/drivers/webextension/images/icons/WP-Statistics.png similarity index 100% rename from src/icons/WP-Statistics.png rename to src/drivers/webextension/images/icons/WP-Statistics.png diff --git a/src/drivers/webextension/images/icons/WPCacheOn.png b/src/drivers/webextension/images/icons/WPCacheOn.png new file mode 100644 index 000000000..ff19a44df Binary files /dev/null and b/src/drivers/webextension/images/icons/WPCacheOn.png differ diff --git a/src/icons/Warp.png b/src/drivers/webextension/images/icons/Warp.png similarity index 100% rename from src/icons/Warp.png rename to src/drivers/webextension/images/icons/Warp.png diff --git a/src/icons/Web2py.png b/src/drivers/webextension/images/icons/Web2py.png similarity index 100% rename from src/icons/Web2py.png rename to src/drivers/webextension/images/icons/Web2py.png diff --git a/src/icons/WebGUI.png b/src/drivers/webextension/images/icons/WebGUI.png similarity index 100% rename from src/icons/WebGUI.png rename to src/drivers/webextension/images/icons/WebGUI.png diff --git a/src/icons/WebPublisher.png b/src/drivers/webextension/images/icons/WebPublisher.png similarity index 100% rename from src/icons/WebPublisher.png rename to src/drivers/webextension/images/icons/WebPublisher.png diff --git a/src/icons/WebSite X5.png b/src/drivers/webextension/images/icons/WebSite X5.png similarity index 100% rename from src/icons/WebSite X5.png rename to src/drivers/webextension/images/icons/WebSite X5.png diff --git a/src/icons/Webix.png b/src/drivers/webextension/images/icons/Webix.png similarity index 100% rename from src/icons/Webix.png rename to src/drivers/webextension/images/icons/Webix.png diff --git a/src/icons/WebsPlanet.png b/src/drivers/webextension/images/icons/WebsPlanet.png similarity index 100% rename from src/icons/WebsPlanet.png rename to src/drivers/webextension/images/icons/WebsPlanet.png diff --git a/src/icons/Websale.png b/src/drivers/webextension/images/icons/Websale.png similarity index 100% rename from src/icons/Websale.png rename to src/drivers/webextension/images/icons/Websale.png diff --git a/src/icons/WebsiteBaker.png b/src/drivers/webextension/images/icons/WebsiteBaker.png similarity index 100% rename from src/icons/WebsiteBaker.png rename to src/drivers/webextension/images/icons/WebsiteBaker.png diff --git a/src/icons/WebsiteCreator.png b/src/drivers/webextension/images/icons/WebsiteCreator.png similarity index 100% rename from src/icons/WebsiteCreator.png rename to src/drivers/webextension/images/icons/WebsiteCreator.png diff --git a/src/icons/Webtrekk.png b/src/drivers/webextension/images/icons/Webtrekk.png similarity index 100% rename from src/icons/Webtrekk.png rename to src/drivers/webextension/images/icons/Webtrekk.png diff --git a/src/icons/Webtrends.png b/src/drivers/webextension/images/icons/Webtrends.png similarity index 100% rename from src/icons/Webtrends.png rename to src/drivers/webextension/images/icons/Webtrends.png diff --git a/src/icons/Webzi.svg b/src/drivers/webextension/images/icons/Webzi.svg similarity index 100% rename from src/icons/Webzi.svg rename to src/drivers/webextension/images/icons/Webzi.svg diff --git a/src/icons/Weebly.png b/src/drivers/webextension/images/icons/Weebly.png similarity index 100% rename from src/icons/Weebly.png rename to src/drivers/webextension/images/icons/Weebly.png diff --git a/src/icons/Weglot.png b/src/drivers/webextension/images/icons/Weglot.png similarity index 100% rename from src/icons/Weglot.png rename to src/drivers/webextension/images/icons/Weglot.png diff --git a/src/icons/Whooshkaa.svg b/src/drivers/webextension/images/icons/Whooshkaa.svg similarity index 100% rename from src/icons/Whooshkaa.svg rename to src/drivers/webextension/images/icons/Whooshkaa.svg diff --git a/src/icons/WikkaWiki.png b/src/drivers/webextension/images/icons/WikkaWiki.png similarity index 100% rename from src/icons/WikkaWiki.png rename to src/drivers/webextension/images/icons/WikkaWiki.png diff --git a/src/icons/WindowsServer.png b/src/drivers/webextension/images/icons/WindowsServer.png similarity index 100% rename from src/icons/WindowsServer.png rename to src/drivers/webextension/images/icons/WindowsServer.png diff --git a/src/icons/Wink.png b/src/drivers/webextension/images/icons/Wink.png similarity index 100% rename from src/icons/Wink.png rename to src/drivers/webextension/images/icons/Wink.png diff --git a/src/icons/Wix.png b/src/drivers/webextension/images/icons/Wix.png similarity index 100% rename from src/icons/Wix.png rename to src/drivers/webextension/images/icons/Wix.png diff --git a/src/icons/Wolf CMS.png b/src/drivers/webextension/images/icons/Wolf CMS.png similarity index 100% rename from src/icons/Wolf CMS.png rename to src/drivers/webextension/images/icons/Wolf CMS.png diff --git a/src/icons/Woltlab Community Framework.png b/src/drivers/webextension/images/icons/Woltlab Community Framework.png similarity index 100% rename from src/icons/Woltlab Community Framework.png rename to src/drivers/webextension/images/icons/Woltlab Community Framework.png diff --git a/src/icons/WooCommerce.png b/src/drivers/webextension/images/icons/WooCommerce.png similarity index 100% rename from src/icons/WooCommerce.png rename to src/drivers/webextension/images/icons/WooCommerce.png diff --git a/src/icons/Woopra.png b/src/drivers/webextension/images/icons/Woopra.png similarity index 100% rename from src/icons/Woopra.png rename to src/drivers/webextension/images/icons/Woopra.png diff --git a/src/icons/WordPress.svg b/src/drivers/webextension/images/icons/WordPress.svg similarity index 100% rename from src/icons/WordPress.svg rename to src/drivers/webextension/images/icons/WordPress.svg diff --git a/src/icons/Wowza Media Server.png b/src/drivers/webextension/images/icons/Wowza Media Server.png similarity index 100% rename from src/icons/Wowza Media Server.png rename to src/drivers/webextension/images/icons/Wowza Media Server.png diff --git a/src/icons/X-Cart.png b/src/drivers/webextension/images/icons/X-Cart.png similarity index 100% rename from src/icons/X-Cart.png rename to src/drivers/webextension/images/icons/X-Cart.png diff --git a/src/icons/XAMPP.png b/src/drivers/webextension/images/icons/XAMPP.png similarity index 100% rename from src/icons/XAMPP.png rename to src/drivers/webextension/images/icons/XAMPP.png diff --git a/src/icons/XMB.png b/src/drivers/webextension/images/icons/XMB.png similarity index 100% rename from src/icons/XMB.png rename to src/drivers/webextension/images/icons/XMB.png diff --git a/src/icons/XOOPS.png b/src/drivers/webextension/images/icons/XOOPS.png similarity index 100% rename from src/icons/XOOPS.png rename to src/drivers/webextension/images/icons/XOOPS.png diff --git a/src/icons/XRegExp.png b/src/drivers/webextension/images/icons/XRegExp.png similarity index 100% rename from src/icons/XRegExp.png rename to src/drivers/webextension/images/icons/XRegExp.png diff --git a/src/icons/Xajax.png b/src/drivers/webextension/images/icons/Xajax.png similarity index 100% rename from src/icons/Xajax.png rename to src/drivers/webextension/images/icons/Xajax.png diff --git a/src/icons/Xanario.png b/src/drivers/webextension/images/icons/Xanario.png similarity index 100% rename from src/icons/Xanario.png rename to src/drivers/webextension/images/icons/Xanario.png diff --git a/src/icons/XenForo.png b/src/drivers/webextension/images/icons/XenForo.png similarity index 100% rename from src/icons/XenForo.png rename to src/drivers/webextension/images/icons/XenForo.png diff --git a/src/icons/Xitami.png b/src/drivers/webextension/images/icons/Xitami.png similarity index 100% rename from src/icons/Xitami.png rename to src/drivers/webextension/images/icons/Xitami.png diff --git a/src/icons/XpressEngine.png b/src/drivers/webextension/images/icons/XpressEngine.png similarity index 100% rename from src/icons/XpressEngine.png rename to src/drivers/webextension/images/icons/XpressEngine.png diff --git a/src/icons/YUI.png b/src/drivers/webextension/images/icons/YUI.png similarity index 100% rename from src/icons/YUI.png rename to src/drivers/webextension/images/icons/YUI.png diff --git a/src/icons/YaBB.png b/src/drivers/webextension/images/icons/YaBB.png similarity index 100% rename from src/icons/YaBB.png rename to src/drivers/webextension/images/icons/YaBB.png diff --git a/src/icons/Yandex.Direct.png b/src/drivers/webextension/images/icons/Yandex.Direct.png similarity index 100% rename from src/icons/Yandex.Direct.png rename to src/drivers/webextension/images/icons/Yandex.Direct.png diff --git a/src/icons/Yandex.Metrika.png b/src/drivers/webextension/images/icons/Yandex.Metrika.png similarity index 100% rename from src/icons/Yandex.Metrika.png rename to src/drivers/webextension/images/icons/Yandex.Metrika.png diff --git a/src/icons/Yaws.png b/src/drivers/webextension/images/icons/Yaws.png similarity index 100% rename from src/icons/Yaws.png rename to src/drivers/webextension/images/icons/Yaws.png diff --git a/src/icons/Yieldlab.png b/src/drivers/webextension/images/icons/Yieldlab.png similarity index 100% rename from src/icons/Yieldlab.png rename to src/drivers/webextension/images/icons/Yieldlab.png diff --git a/src/icons/Yii.png b/src/drivers/webextension/images/icons/Yii.png similarity index 100% rename from src/icons/Yii.png rename to src/drivers/webextension/images/icons/Yii.png diff --git a/src/icons/Yoast SEO.png b/src/drivers/webextension/images/icons/Yoast SEO.png similarity index 100% rename from src/icons/Yoast SEO.png rename to src/drivers/webextension/images/icons/Yoast SEO.png diff --git a/src/icons/YouTrack.png b/src/drivers/webextension/images/icons/YouTrack.png similarity index 100% rename from src/icons/YouTrack.png rename to src/drivers/webextension/images/icons/YouTrack.png diff --git a/src/icons/YouTube.png b/src/drivers/webextension/images/icons/YouTube.png similarity index 100% rename from src/icons/YouTube.png rename to src/drivers/webextension/images/icons/YouTube.png diff --git a/src/icons/ZK.png b/src/drivers/webextension/images/icons/ZK.png similarity index 100% rename from src/icons/ZK.png rename to src/drivers/webextension/images/icons/ZK.png diff --git a/src/icons/ZURB Foundation.png b/src/drivers/webextension/images/icons/ZURB Foundation.png similarity index 100% rename from src/icons/ZURB Foundation.png rename to src/drivers/webextension/images/icons/ZURB Foundation.png diff --git a/src/icons/Zabbix.png b/src/drivers/webextension/images/icons/Zabbix.png similarity index 100% rename from src/icons/Zabbix.png rename to src/drivers/webextension/images/icons/Zabbix.png diff --git a/src/icons/Zanox.png b/src/drivers/webextension/images/icons/Zanox.png similarity index 100% rename from src/icons/Zanox.png rename to src/drivers/webextension/images/icons/Zanox.png diff --git a/src/icons/Zen Cart.png b/src/drivers/webextension/images/icons/Zen Cart.png similarity index 100% rename from src/icons/Zen Cart.png rename to src/drivers/webextension/images/icons/Zen Cart.png diff --git a/src/icons/Zend.png b/src/drivers/webextension/images/icons/Zend.png similarity index 100% rename from src/icons/Zend.png rename to src/drivers/webextension/images/icons/Zend.png diff --git a/src/icons/Zendesk Chat.png b/src/drivers/webextension/images/icons/Zendesk Chat.png similarity index 100% rename from src/icons/Zendesk Chat.png rename to src/drivers/webextension/images/icons/Zendesk Chat.png diff --git a/src/icons/Zendesk.png b/src/drivers/webextension/images/icons/Zendesk.png similarity index 100% rename from src/icons/Zendesk.png rename to src/drivers/webextension/images/icons/Zendesk.png diff --git a/src/icons/Zenfolio.png b/src/drivers/webextension/images/icons/Zenfolio.png similarity index 100% rename from src/icons/Zenfolio.png rename to src/drivers/webextension/images/icons/Zenfolio.png diff --git a/src/icons/Zepto.png b/src/drivers/webextension/images/icons/Zepto.png similarity index 100% rename from src/icons/Zepto.png rename to src/drivers/webextension/images/icons/Zepto.png diff --git a/src/icons/Zimbra.png b/src/drivers/webextension/images/icons/Zimbra.png similarity index 100% rename from src/icons/Zimbra.png rename to src/drivers/webextension/images/icons/Zimbra.png diff --git a/src/icons/Zinnia.png b/src/drivers/webextension/images/icons/Zinnia.png similarity index 100% rename from src/icons/Zinnia.png rename to src/drivers/webextension/images/icons/Zinnia.png diff --git a/src/icons/Zipkin.png b/src/drivers/webextension/images/icons/Zipkin.png similarity index 100% rename from src/icons/Zipkin.png rename to src/drivers/webextension/images/icons/Zipkin.png diff --git a/src/icons/Zope.png b/src/drivers/webextension/images/icons/Zope.png similarity index 100% rename from src/icons/Zope.png rename to src/drivers/webextension/images/icons/Zope.png diff --git a/src/icons/a-blog cms.svg b/src/drivers/webextension/images/icons/a-blog cms.svg similarity index 100% rename from src/icons/a-blog cms.svg rename to src/drivers/webextension/images/icons/a-blog cms.svg diff --git a/src/icons/acquia-cloud.png b/src/drivers/webextension/images/icons/acquia-cloud.png similarity index 100% rename from src/icons/acquia-cloud.png rename to src/drivers/webextension/images/icons/acquia-cloud.png diff --git a/src/icons/actionhero.js.png b/src/drivers/webextension/images/icons/actionhero.js.png similarity index 100% rename from src/icons/actionhero.js.png rename to src/drivers/webextension/images/icons/actionhero.js.png diff --git a/src/icons/adminer.png b/src/drivers/webextension/images/icons/adminer.png similarity index 100% rename from src/icons/adminer.png rename to src/drivers/webextension/images/icons/adminer.png diff --git a/src/icons/adnegah.png b/src/drivers/webextension/images/icons/adnegah.png similarity index 100% rename from src/icons/adnegah.png rename to src/drivers/webextension/images/icons/adnegah.png diff --git a/src/icons/adobedmt.png b/src/drivers/webextension/images/icons/adobedmt.png similarity index 100% rename from src/icons/adobedmt.png rename to src/drivers/webextension/images/icons/adobedmt.png diff --git a/src/icons/after-buy.png b/src/drivers/webextension/images/icons/after-buy.png similarity index 100% rename from src/icons/after-buy.png rename to src/drivers/webextension/images/icons/after-buy.png diff --git a/src/icons/aircall.png b/src/drivers/webextension/images/icons/aircall.png similarity index 100% rename from src/icons/aircall.png rename to src/drivers/webextension/images/icons/aircall.png diff --git a/src/icons/akamai.svg b/src/drivers/webextension/images/icons/akamai.svg similarity index 100% rename from src/icons/akamai.svg rename to src/drivers/webextension/images/icons/akamai.svg diff --git a/src/icons/akaunting.svg b/src/drivers/webextension/images/icons/akaunting.svg similarity index 100% rename from src/icons/akaunting.svg rename to src/drivers/webextension/images/icons/akaunting.svg diff --git a/src/icons/akka-http.png b/src/drivers/webextension/images/icons/akka-http.png similarity index 100% rename from src/icons/akka-http.png rename to src/drivers/webextension/images/icons/akka-http.png diff --git a/src/icons/all-in-One-SEO-Pack.png b/src/drivers/webextension/images/icons/all-in-One-SEO-Pack.png similarity index 100% rename from src/icons/all-in-One-SEO-Pack.png rename to src/drivers/webextension/images/icons/all-in-One-SEO-Pack.png diff --git a/src/icons/amCharts.png b/src/drivers/webextension/images/icons/amCharts.png similarity index 100% rename from src/icons/amCharts.png rename to src/drivers/webextension/images/icons/amCharts.png diff --git a/src/icons/amber.png b/src/drivers/webextension/images/icons/amber.png similarity index 100% rename from src/icons/amber.png rename to src/drivers/webextension/images/icons/amber.png diff --git a/src/icons/amplitude.png b/src/drivers/webextension/images/icons/amplitude.png similarity index 100% rename from src/icons/amplitude.png rename to src/drivers/webextension/images/icons/amplitude.png diff --git a/src/icons/apigee.svg b/src/drivers/webextension/images/icons/apigee.svg similarity index 100% rename from src/icons/apigee.svg rename to src/drivers/webextension/images/icons/apigee.svg diff --git a/src/icons/apostrophecms.svg b/src/drivers/webextension/images/icons/apostrophecms.svg similarity index 100% rename from src/icons/apostrophecms.svg rename to src/drivers/webextension/images/icons/apostrophecms.svg diff --git a/src/icons/arcgis_icon.png b/src/drivers/webextension/images/icons/arcgis_icon.png similarity index 100% rename from src/icons/arcgis_icon.png rename to src/drivers/webextension/images/icons/arcgis_icon.png diff --git a/src/icons/asciinema.png b/src/drivers/webextension/images/icons/asciinema.png similarity index 100% rename from src/icons/asciinema.png rename to src/drivers/webextension/images/icons/asciinema.png diff --git a/src/icons/automattic.png b/src/drivers/webextension/images/icons/automattic.png similarity index 100% rename from src/icons/automattic.png rename to src/drivers/webextension/images/icons/automattic.png diff --git a/src/icons/aws-ec2.svg b/src/drivers/webextension/images/icons/aws-ec2.svg similarity index 100% rename from src/icons/aws-ec2.svg rename to src/drivers/webextension/images/icons/aws-ec2.svg diff --git a/src/icons/aws-elb.png b/src/drivers/webextension/images/icons/aws-elb.png similarity index 100% rename from src/icons/aws-elb.png rename to src/drivers/webextension/images/icons/aws-elb.png diff --git a/src/icons/aws-s3.svg b/src/drivers/webextension/images/icons/aws-s3.svg similarity index 100% rename from src/icons/aws-s3.svg rename to src/drivers/webextension/images/icons/aws-s3.svg diff --git a/src/icons/aws.svg b/src/drivers/webextension/images/icons/aws.svg similarity index 100% rename from src/icons/aws.svg rename to src/drivers/webextension/images/icons/aws.svg diff --git a/src/icons/azure.svg b/src/drivers/webextension/images/icons/azure.svg similarity index 100% rename from src/icons/azure.svg rename to src/drivers/webextension/images/icons/azure.svg diff --git a/src/icons/bablic.png b/src/drivers/webextension/images/icons/bablic.png similarity index 100% rename from src/icons/bablic.png rename to src/drivers/webextension/images/icons/bablic.png diff --git a/src/icons/basket.js.png b/src/drivers/webextension/images/icons/basket.js.png similarity index 100% rename from src/icons/basket.js.png rename to src/drivers/webextension/images/icons/basket.js.png diff --git a/src/icons/bigcartel.png b/src/drivers/webextension/images/icons/bigcartel.png similarity index 100% rename from src/icons/bigcartel.png rename to src/drivers/webextension/images/icons/bigcartel.png diff --git a/src/icons/bizweb.png b/src/drivers/webextension/images/icons/bizweb.png similarity index 100% rename from src/icons/bizweb.png rename to src/drivers/webextension/images/icons/bizweb.png diff --git a/src/icons/bokeh.png b/src/drivers/webextension/images/icons/bokeh.png similarity index 100% rename from src/icons/bokeh.png rename to src/drivers/webextension/images/icons/bokeh.png diff --git a/src/icons/boom.svg b/src/drivers/webextension/images/icons/boom.svg similarity index 100% rename from src/icons/boom.svg rename to src/drivers/webextension/images/icons/boom.svg diff --git a/src/icons/bubble.png b/src/drivers/webextension/images/icons/bubble.png similarity index 100% rename from src/icons/bubble.png rename to src/drivers/webextension/images/icons/bubble.png diff --git a/src/icons/byINTI.svg b/src/drivers/webextension/images/icons/byINTI.svg similarity index 100% rename from src/icons/byINTI.svg rename to src/drivers/webextension/images/icons/byINTI.svg diff --git a/src/icons/cPanel.png b/src/drivers/webextension/images/icons/cPanel.png similarity index 100% rename from src/icons/cPanel.png rename to src/drivers/webextension/images/icons/cPanel.png diff --git a/src/icons/caddy.svg b/src/drivers/webextension/images/icons/caddy.svg similarity index 100% rename from src/icons/caddy.svg rename to src/drivers/webextension/images/icons/caddy.svg diff --git a/src/icons/ccvshop.png b/src/drivers/webextension/images/icons/ccvshop.png similarity index 100% rename from src/icons/ccvshop.png rename to src/drivers/webextension/images/icons/ccvshop.png diff --git a/src/icons/cgit.png b/src/drivers/webextension/images/icons/cgit.png similarity index 100% rename from src/icons/cgit.png rename to src/drivers/webextension/images/icons/cgit.png diff --git a/src/icons/chevereto.png b/src/drivers/webextension/images/icons/chevereto.png similarity index 100% rename from src/icons/chevereto.png rename to src/drivers/webextension/images/icons/chevereto.png diff --git a/src/icons/clarity.svg b/src/drivers/webextension/images/icons/clarity.svg similarity index 100% rename from src/icons/clarity.svg rename to src/drivers/webextension/images/icons/clarity.svg diff --git a/src/icons/cloudcart.svg b/src/drivers/webextension/images/icons/cloudcart.svg similarity index 100% rename from src/icons/cloudcart.svg rename to src/drivers/webextension/images/icons/cloudcart.svg diff --git a/src/icons/cnzz.png b/src/drivers/webextension/images/icons/cnzz.png similarity index 100% rename from src/icons/cnzz.png rename to src/drivers/webextension/images/icons/cnzz.png diff --git a/src/icons/coaster-cms.png b/src/drivers/webextension/images/icons/coaster-cms.png similarity index 100% rename from src/icons/coaster-cms.png rename to src/drivers/webextension/images/icons/coaster-cms.png diff --git a/src/icons/coinhave.png b/src/drivers/webextension/images/icons/coinhave.png similarity index 100% rename from src/icons/coinhave.png rename to src/drivers/webextension/images/icons/coinhave.png diff --git a/src/icons/coinimp.png b/src/drivers/webextension/images/icons/coinimp.png similarity index 100% rename from src/icons/coinimp.png rename to src/drivers/webextension/images/icons/coinimp.png diff --git a/src/icons/colormeshop.png b/src/drivers/webextension/images/icons/colormeshop.png similarity index 100% rename from src/icons/colormeshop.png rename to src/drivers/webextension/images/icons/colormeshop.png diff --git a/src/icons/comScore.png b/src/drivers/webextension/images/icons/comScore.png similarity index 100% rename from src/icons/comScore.png rename to src/drivers/webextension/images/icons/comScore.png diff --git a/src/drivers/webextension/images/icons/converted/.gitkeep b/src/drivers/webextension/images/icons/converted/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/icons/datadome.png b/src/drivers/webextension/images/icons/datadome.png similarity index 100% rename from src/icons/datadome.png rename to src/drivers/webextension/images/icons/datadome.png diff --git a/src/icons/datocms.svg b/src/drivers/webextension/images/icons/datocms.svg similarity index 100% rename from src/icons/datocms.svg rename to src/drivers/webextension/images/icons/datocms.svg diff --git a/src/icons/debut.png b/src/drivers/webextension/images/icons/debut.png similarity index 100% rename from src/icons/debut.png rename to src/drivers/webextension/images/icons/debut.png diff --git a/src/icons/decimal.js.png b/src/drivers/webextension/images/icons/decimal.js.png similarity index 100% rename from src/icons/decimal.js.png rename to src/drivers/webextension/images/icons/decimal.js.png diff --git a/src/icons/deepminer.png b/src/drivers/webextension/images/icons/deepminer.png similarity index 100% rename from src/icons/deepminer.png rename to src/drivers/webextension/images/icons/deepminer.png diff --git a/src/icons/default.svg b/src/drivers/webextension/images/icons/default.svg similarity index 100% rename from src/icons/default.svg rename to src/drivers/webextension/images/icons/default.svg diff --git a/src/icons/docusaurus.svg b/src/drivers/webextension/images/icons/docusaurus.svg similarity index 100% rename from src/icons/docusaurus.svg rename to src/drivers/webextension/images/icons/docusaurus.svg diff --git a/src/icons/duda.png b/src/drivers/webextension/images/icons/duda.png similarity index 100% rename from src/icons/duda.png rename to src/drivers/webextension/images/icons/duda.png diff --git a/src/icons/e107.png b/src/drivers/webextension/images/icons/e107.png similarity index 100% rename from src/icons/e107.png rename to src/drivers/webextension/images/icons/e107.png diff --git a/src/icons/eSyndiCat.png b/src/drivers/webextension/images/icons/eSyndiCat.png similarity index 100% rename from src/icons/eSyndiCat.png rename to src/drivers/webextension/images/icons/eSyndiCat.png diff --git a/src/icons/eZ.svg b/src/drivers/webextension/images/icons/eZ.svg similarity index 100% rename from src/icons/eZ.svg rename to src/drivers/webextension/images/icons/eZ.svg diff --git a/src/icons/ebis.png b/src/drivers/webextension/images/icons/ebis.png similarity index 100% rename from src/icons/ebis.png rename to src/drivers/webextension/images/icons/ebis.png diff --git a/src/icons/ec-cube.png b/src/drivers/webextension/images/icons/ec-cube.png similarity index 100% rename from src/icons/ec-cube.png rename to src/drivers/webextension/images/icons/ec-cube.png diff --git a/src/icons/ecwid.svg b/src/drivers/webextension/images/icons/ecwid.svg similarity index 100% rename from src/icons/ecwid.svg rename to src/drivers/webextension/images/icons/ecwid.svg diff --git a/src/icons/ef.js.svg b/src/drivers/webextension/images/icons/ef.js.svg similarity index 100% rename from src/icons/ef.js.svg rename to src/drivers/webextension/images/icons/ef.js.svg diff --git a/src/icons/elm.svg b/src/drivers/webextension/images/icons/elm.svg similarity index 100% rename from src/icons/elm.svg rename to src/drivers/webextension/images/icons/elm.svg diff --git a/src/icons/enduro.js.svg b/src/drivers/webextension/images/icons/enduro.js.svg similarity index 100% rename from src/icons/enduro.js.svg rename to src/drivers/webextension/images/icons/enduro.js.svg diff --git a/src/icons/ensighten.png b/src/drivers/webextension/images/icons/ensighten.png similarity index 100% rename from src/icons/ensighten.png rename to src/drivers/webextension/images/icons/ensighten.png diff --git a/src/icons/epages.png b/src/drivers/webextension/images/icons/epages.png similarity index 100% rename from src/icons/epages.png rename to src/drivers/webextension/images/icons/epages.png diff --git a/src/icons/etherpad.png b/src/drivers/webextension/images/icons/etherpad.png similarity index 100% rename from src/icons/etherpad.png rename to src/drivers/webextension/images/icons/etherpad.png diff --git a/src/icons/fastspring.png b/src/drivers/webextension/images/icons/fastspring.png similarity index 100% rename from src/icons/fastspring.png rename to src/drivers/webextension/images/icons/fastspring.png diff --git a/src/icons/flarum.png b/src/drivers/webextension/images/icons/flarum.png similarity index 100% rename from src/icons/flarum.png rename to src/drivers/webextension/images/icons/flarum.png diff --git a/src/icons/flywheel.svg b/src/drivers/webextension/images/icons/flywheel.svg similarity index 100% rename from src/icons/flywheel.svg rename to src/drivers/webextension/images/icons/flywheel.svg diff --git a/src/icons/foswiki.png b/src/drivers/webextension/images/icons/foswiki.png similarity index 100% rename from src/icons/foswiki.png rename to src/drivers/webextension/images/icons/foswiki.png diff --git a/src/icons/freshchat.png b/src/drivers/webextension/images/icons/freshchat.png similarity index 100% rename from src/icons/freshchat.png rename to src/drivers/webextension/images/icons/freshchat.png diff --git a/src/icons/freshmarketer.png b/src/drivers/webextension/images/icons/freshmarketer.png similarity index 100% rename from src/icons/freshmarketer.png rename to src/drivers/webextension/images/icons/freshmarketer.png diff --git a/src/icons/futureshop.png b/src/drivers/webextension/images/icons/futureshop.png similarity index 100% rename from src/icons/futureshop.png rename to src/drivers/webextension/images/icons/futureshop.png diff --git a/src/drivers/webextension/images/icons/gRPC.png b/src/drivers/webextension/images/icons/gRPC.png new file mode 100644 index 000000000..c35182c02 Binary files /dev/null and b/src/drivers/webextension/images/icons/gRPC.png differ diff --git a/src/icons/gerrit.svg b/src/drivers/webextension/images/icons/gerrit.svg similarity index 100% rename from src/icons/gerrit.svg rename to src/drivers/webextension/images/icons/gerrit.svg diff --git a/src/icons/git.svg b/src/drivers/webextension/images/icons/git.svg similarity index 100% rename from src/icons/git.svg rename to src/drivers/webextension/images/icons/git.svg diff --git a/src/icons/gitea.svg b/src/drivers/webextension/images/icons/gitea.svg similarity index 100% rename from src/icons/gitea.svg rename to src/drivers/webextension/images/icons/gitea.svg diff --git a/src/icons/godaddy.svg b/src/drivers/webextension/images/icons/godaddy.svg similarity index 100% rename from src/icons/godaddy.svg rename to src/drivers/webextension/images/icons/godaddy.svg diff --git a/src/icons/gogs.png b/src/drivers/webextension/images/icons/gogs.png similarity index 100% rename from src/icons/gogs.png rename to src/drivers/webextension/images/icons/gogs.png diff --git a/src/icons/google_cloud.svg b/src/drivers/webextension/images/icons/google_cloud.svg similarity index 100% rename from src/icons/google_cloud.svg rename to src/drivers/webextension/images/icons/google_cloud.svg diff --git a/src/icons/govCMS.svg b/src/drivers/webextension/images/icons/govCMS.svg similarity index 100% rename from src/icons/govCMS.svg rename to src/drivers/webextension/images/icons/govCMS.svg diff --git a/src/icons/govuk.png b/src/drivers/webextension/images/icons/govuk.png similarity index 100% rename from src/icons/govuk.png rename to src/drivers/webextension/images/icons/govuk.png diff --git a/src/icons/gravityforms.svg b/src/drivers/webextension/images/icons/gravityforms.svg similarity index 100% rename from src/icons/gravityforms.svg rename to src/drivers/webextension/images/icons/gravityforms.svg diff --git a/src/icons/gunicorn.png b/src/drivers/webextension/images/icons/gunicorn.png similarity index 100% rename from src/icons/gunicorn.png rename to src/drivers/webextension/images/icons/gunicorn.png diff --git a/src/drivers/webextension/images/icons/heroku.svg b/src/drivers/webextension/images/icons/heroku.svg new file mode 100644 index 000000000..8d02649e6 --- /dev/null +++ b/src/drivers/webextension/images/icons/heroku.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/hinza_advanced_cms.svg b/src/drivers/webextension/images/icons/hinza_advanced_cms.svg similarity index 100% rename from src/icons/hinza_advanced_cms.svg rename to src/drivers/webextension/images/icons/hinza_advanced_cms.svg diff --git a/src/icons/http2.png b/src/drivers/webextension/images/icons/http2.png similarity index 100% rename from src/icons/http2.png rename to src/drivers/webextension/images/icons/http2.png diff --git a/src/icons/iEXExchanger.png b/src/drivers/webextension/images/icons/iEXExchanger.png similarity index 100% rename from src/icons/iEXExchanger.png rename to src/drivers/webextension/images/icons/iEXExchanger.png diff --git a/src/icons/iPresta.png b/src/drivers/webextension/images/icons/iPresta.png similarity index 100% rename from src/icons/iPresta.png rename to src/drivers/webextension/images/icons/iPresta.png diff --git a/src/icons/iWeb.png b/src/drivers/webextension/images/icons/iWeb.png similarity index 100% rename from src/icons/iWeb.png rename to src/drivers/webextension/images/icons/iWeb.png diff --git a/src/icons/idosellshop.png b/src/drivers/webextension/images/icons/idosellshop.png similarity index 100% rename from src/icons/idosellshop.png rename to src/drivers/webextension/images/icons/idosellshop.png diff --git a/src/icons/ikiwiki.png b/src/drivers/webextension/images/icons/ikiwiki.png similarity index 100% rename from src/icons/ikiwiki.png rename to src/drivers/webextension/images/icons/ikiwiki.png diff --git a/src/icons/imperiaCMS.svg b/src/drivers/webextension/images/icons/imperiaCMS.svg similarity index 100% rename from src/icons/imperiaCMS.svg rename to src/drivers/webextension/images/icons/imperiaCMS.svg diff --git a/src/icons/infusionsoft.svg b/src/drivers/webextension/images/icons/infusionsoft.svg similarity index 100% rename from src/icons/infusionsoft.svg rename to src/drivers/webextension/images/icons/infusionsoft.svg diff --git a/src/icons/inspectlet.png b/src/drivers/webextension/images/icons/inspectlet.png similarity index 100% rename from src/icons/inspectlet.png rename to src/drivers/webextension/images/icons/inspectlet.png diff --git a/src/icons/io4 CMS.png b/src/drivers/webextension/images/icons/io4 CMS.png similarity index 100% rename from src/icons/io4 CMS.png rename to src/drivers/webextension/images/icons/io4 CMS.png diff --git a/src/icons/ionic.png b/src/drivers/webextension/images/icons/ionic.png similarity index 100% rename from src/icons/ionic.png rename to src/drivers/webextension/images/icons/ionic.png diff --git a/src/icons/iplabel.svg b/src/drivers/webextension/images/icons/iplabel.svg similarity index 100% rename from src/icons/iplabel.svg rename to src/drivers/webextension/images/icons/iplabel.svg diff --git a/src/icons/irroba.svg b/src/drivers/webextension/images/icons/irroba.svg similarity index 100% rename from src/icons/irroba.svg rename to src/drivers/webextension/images/icons/irroba.svg diff --git a/src/drivers/webextension/images/icons/j2store.png b/src/drivers/webextension/images/icons/j2store.png new file mode 100644 index 000000000..65798b62f Binary files /dev/null and b/src/drivers/webextension/images/icons/j2store.png differ diff --git a/src/icons/jQTouch.png b/src/drivers/webextension/images/icons/jQTouch.png similarity index 100% rename from src/icons/jQTouch.png rename to src/drivers/webextension/images/icons/jQTouch.png diff --git a/src/icons/jQuery Mobile.svg b/src/drivers/webextension/images/icons/jQuery Mobile.svg similarity index 100% rename from src/icons/jQuery Mobile.svg rename to src/drivers/webextension/images/icons/jQuery Mobile.svg diff --git a/src/icons/jQuery UI.svg b/src/drivers/webextension/images/icons/jQuery UI.svg similarity index 100% rename from src/icons/jQuery UI.svg rename to src/drivers/webextension/images/icons/jQuery UI.svg diff --git a/src/icons/jQuery.svg b/src/drivers/webextension/images/icons/jQuery.svg similarity index 100% rename from src/icons/jQuery.svg rename to src/drivers/webextension/images/icons/jQuery.svg diff --git a/src/icons/jimdo.png b/src/drivers/webextension/images/icons/jimdo.png similarity index 100% rename from src/icons/jimdo.png rename to src/drivers/webextension/images/icons/jimdo.png diff --git a/src/icons/jqPlot.png b/src/drivers/webextension/images/icons/jqPlot.png similarity index 100% rename from src/icons/jqPlot.png rename to src/drivers/webextension/images/icons/jqPlot.png diff --git a/src/icons/kemalcr.png b/src/drivers/webextension/images/icons/kemalcr.png similarity index 100% rename from src/icons/kemalcr.png rename to src/drivers/webextension/images/icons/kemalcr.png diff --git a/src/icons/kestrel.svg b/src/drivers/webextension/images/icons/kestrel.svg similarity index 100% rename from src/icons/kestrel.svg rename to src/drivers/webextension/images/icons/kestrel.svg diff --git a/src/icons/kibana.svg b/src/drivers/webextension/images/icons/kibana.svg similarity index 100% rename from src/icons/kibana.svg rename to src/drivers/webextension/images/icons/kibana.svg diff --git a/src/icons/kinsta.svg b/src/drivers/webextension/images/icons/kinsta.svg similarity index 100% rename from src/icons/kinsta.svg rename to src/drivers/webextension/images/icons/kinsta.svg diff --git a/src/icons/koha.png b/src/drivers/webextension/images/icons/koha.png similarity index 100% rename from src/icons/koha.png rename to src/drivers/webextension/images/icons/koha.png diff --git a/src/drivers/webextension/images/icons/kolors4u.png b/src/drivers/webextension/images/icons/kolors4u.png new file mode 100644 index 000000000..618d5ec18 Binary files /dev/null and b/src/drivers/webextension/images/icons/kolors4u.png differ diff --git a/src/icons/laterpay.png b/src/drivers/webextension/images/icons/laterpay.png similarity index 100% rename from src/icons/laterpay.png rename to src/drivers/webextension/images/icons/laterpay.png diff --git a/src/icons/libwww-perl-daemon.png b/src/drivers/webextension/images/icons/libwww-perl-daemon.png similarity index 100% rename from src/icons/libwww-perl-daemon.png rename to src/drivers/webextension/images/icons/libwww-perl-daemon.png diff --git a/src/icons/lighttpd.png b/src/drivers/webextension/images/icons/lighttpd.png similarity index 100% rename from src/icons/lighttpd.png rename to src/drivers/webextension/images/icons/lighttpd.png diff --git a/src/icons/liquidweb.svg b/src/drivers/webextension/images/icons/liquidweb.svg similarity index 100% rename from src/icons/liquidweb.svg rename to src/drivers/webextension/images/icons/liquidweb.svg diff --git a/src/icons/litespeed-cache.png b/src/drivers/webextension/images/icons/litespeed-cache.png similarity index 100% rename from src/icons/litespeed-cache.png rename to src/drivers/webextension/images/icons/litespeed-cache.png diff --git a/src/icons/mailchimp.svg b/src/drivers/webextension/images/icons/mailchimp.svg similarity index 100% rename from src/icons/mailchimp.svg rename to src/drivers/webextension/images/icons/mailchimp.svg diff --git a/src/icons/mariadb.svg b/src/drivers/webextension/images/icons/mariadb.svg similarity index 100% rename from src/icons/mariadb.svg rename to src/drivers/webextension/images/icons/mariadb.svg diff --git a/src/icons/marked.svg b/src/drivers/webextension/images/icons/marked.svg similarity index 100% rename from src/icons/marked.svg rename to src/drivers/webextension/images/icons/marked.svg diff --git a/src/icons/math.js.png b/src/drivers/webextension/images/icons/math.js.png similarity index 100% rename from src/icons/math.js.png rename to src/drivers/webextension/images/icons/math.js.png diff --git a/src/icons/mattermost.png b/src/drivers/webextension/images/icons/mattermost.png similarity index 100% rename from src/icons/mattermost.png rename to src/drivers/webextension/images/icons/mattermost.png diff --git a/src/icons/mautic.svg b/src/drivers/webextension/images/icons/mautic.svg similarity index 100% rename from src/icons/mautic.svg rename to src/drivers/webextension/images/icons/mautic.svg diff --git a/src/icons/melis-platform.svg b/src/drivers/webextension/images/icons/melis-platform.svg similarity index 100% rename from src/icons/melis-platform.svg rename to src/drivers/webextension/images/icons/melis-platform.svg diff --git a/src/icons/mini_httpd.png b/src/drivers/webextension/images/icons/mini_httpd.png similarity index 100% rename from src/icons/mini_httpd.png rename to src/drivers/webextension/images/icons/mini_httpd.png diff --git a/src/icons/miva.png b/src/drivers/webextension/images/icons/miva.png similarity index 100% rename from src/icons/miva.png rename to src/drivers/webextension/images/icons/miva.png diff --git a/src/icons/mkdocs.png b/src/drivers/webextension/images/icons/mkdocs.png similarity index 100% rename from src/icons/mkdocs.png rename to src/drivers/webextension/images/icons/mkdocs.png diff --git a/src/icons/mobirise.png b/src/drivers/webextension/images/icons/mobirise.png similarity index 100% rename from src/icons/mobirise.png rename to src/drivers/webextension/images/icons/mobirise.png diff --git a/src/icons/mod_perl.png b/src/drivers/webextension/images/icons/mod_perl.png similarity index 100% rename from src/icons/mod_perl.png rename to src/drivers/webextension/images/icons/mod_perl.png diff --git a/src/icons/mod_python.png b/src/drivers/webextension/images/icons/mod_python.png similarity index 100% rename from src/icons/mod_python.png rename to src/drivers/webextension/images/icons/mod_python.png diff --git a/src/icons/mod_ssl.png b/src/drivers/webextension/images/icons/mod_ssl.png similarity index 100% rename from src/icons/mod_ssl.png rename to src/drivers/webextension/images/icons/mod_ssl.png diff --git a/src/icons/mod_wsgi.png b/src/drivers/webextension/images/icons/mod_wsgi.png similarity index 100% rename from src/icons/mod_wsgi.png rename to src/drivers/webextension/images/icons/mod_wsgi.png diff --git a/src/icons/modified.png b/src/drivers/webextension/images/icons/modified.png similarity index 100% rename from src/icons/modified.png rename to src/drivers/webextension/images/icons/modified.png diff --git a/src/icons/moon.svg b/src/drivers/webextension/images/icons/moon.svg similarity index 100% rename from src/icons/moon.svg rename to src/drivers/webextension/images/icons/moon.svg diff --git a/src/icons/mouseflow.png b/src/drivers/webextension/images/icons/mouseflow.png similarity index 100% rename from src/icons/mouseflow.png rename to src/drivers/webextension/images/icons/mouseflow.png diff --git a/src/icons/mycashflow.png b/src/drivers/webextension/images/icons/mycashflow.png similarity index 100% rename from src/icons/mycashflow.png rename to src/drivers/webextension/images/icons/mycashflow.png diff --git a/src/icons/nivsoft.png b/src/drivers/webextension/images/icons/nivsoft.png similarity index 100% rename from src/icons/nivsoft.png rename to src/drivers/webextension/images/icons/nivsoft.png diff --git a/src/icons/node.js.png b/src/drivers/webextension/images/icons/node.js.png similarity index 100% rename from src/icons/node.js.png rename to src/drivers/webextension/images/icons/node.js.png diff --git a/src/icons/nopCommerce.png b/src/drivers/webextension/images/icons/nopCommerce.png similarity index 100% rename from src/icons/nopCommerce.png rename to src/drivers/webextension/images/icons/nopCommerce.png diff --git a/src/drivers/webextension/images/icons/nuvem.png b/src/drivers/webextension/images/icons/nuvem.png new file mode 100644 index 000000000..5a8ddd3d4 Binary files /dev/null and b/src/drivers/webextension/images/icons/nuvem.png differ diff --git a/src/icons/octopress.png b/src/drivers/webextension/images/icons/octopress.png similarity index 100% rename from src/icons/octopress.png rename to src/drivers/webextension/images/icons/octopress.png diff --git a/src/icons/orocommerce.svg b/src/drivers/webextension/images/icons/orocommerce.svg similarity index 100% rename from src/icons/orocommerce.svg rename to src/drivers/webextension/images/icons/orocommerce.svg diff --git a/src/icons/osCommerce.png b/src/drivers/webextension/images/icons/osCommerce.png similarity index 100% rename from src/icons/osCommerce.png rename to src/drivers/webextension/images/icons/osCommerce.png diff --git a/src/icons/osTicket.png b/src/drivers/webextension/images/icons/osTicket.png similarity index 100% rename from src/icons/osTicket.png rename to src/drivers/webextension/images/icons/osTicket.png diff --git a/src/icons/otrs.png b/src/drivers/webextension/images/icons/otrs.png similarity index 100% rename from src/icons/otrs.png rename to src/drivers/webextension/images/icons/otrs.png diff --git a/src/icons/ownCloud.png b/src/drivers/webextension/images/icons/ownCloud.png similarity index 100% rename from src/icons/ownCloud.png rename to src/drivers/webextension/images/icons/ownCloud.png diff --git a/src/icons/pagefly.png b/src/drivers/webextension/images/icons/pagefly.png similarity index 100% rename from src/icons/pagefly.png rename to src/drivers/webextension/images/icons/pagefly.png diff --git a/src/drivers/webextension/images/icons/pagely.svg b/src/drivers/webextension/images/icons/pagely.svg new file mode 100644 index 000000000..410712e65 --- /dev/null +++ b/src/drivers/webextension/images/icons/pagely.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/icons/pantheon.svg b/src/drivers/webextension/images/icons/pantheon.svg similarity index 100% rename from src/icons/pantheon.svg rename to src/drivers/webextension/images/icons/pantheon.svg diff --git a/src/icons/papaya CMS.png b/src/drivers/webextension/images/icons/papaya CMS.png similarity index 100% rename from src/icons/papaya CMS.png rename to src/drivers/webextension/images/icons/papaya CMS.png diff --git a/src/icons/parselecom.png b/src/drivers/webextension/images/icons/parselecom.png similarity index 100% rename from src/icons/parselecom.png rename to src/drivers/webextension/images/icons/parselecom.png diff --git a/src/icons/pelican.png b/src/drivers/webextension/images/icons/pelican.png similarity index 100% rename from src/icons/pelican.png rename to src/drivers/webextension/images/icons/pelican.png diff --git a/src/icons/percona.svg b/src/drivers/webextension/images/icons/percona.svg similarity index 100% rename from src/icons/percona.svg rename to src/drivers/webextension/images/icons/percona.svg diff --git a/src/icons/phpAlbum.png b/src/drivers/webextension/images/icons/phpAlbum.png similarity index 100% rename from src/icons/phpAlbum.png rename to src/drivers/webextension/images/icons/phpAlbum.png diff --git a/src/icons/phpBB.png b/src/drivers/webextension/images/icons/phpBB.png similarity index 100% rename from src/icons/phpBB.png rename to src/drivers/webextension/images/icons/phpBB.png diff --git a/src/icons/phpDocumentor.png b/src/drivers/webextension/images/icons/phpDocumentor.png similarity index 100% rename from src/icons/phpDocumentor.png rename to src/drivers/webextension/images/icons/phpDocumentor.png diff --git a/src/icons/phpMyAdmin.png b/src/drivers/webextension/images/icons/phpMyAdmin.png similarity index 100% rename from src/icons/phpMyAdmin.png rename to src/drivers/webextension/images/icons/phpMyAdmin.png diff --git a/src/icons/phpPgAdmin.png b/src/drivers/webextension/images/icons/phpPgAdmin.png similarity index 100% rename from src/icons/phpPgAdmin.png rename to src/drivers/webextension/images/icons/phpPgAdmin.png diff --git a/src/icons/phpSQLiteCMS.png b/src/drivers/webextension/images/icons/phpSQLiteCMS.png similarity index 100% rename from src/icons/phpSQLiteCMS.png rename to src/drivers/webextension/images/icons/phpSQLiteCMS.png diff --git a/src/icons/phpdebugbar.png b/src/drivers/webextension/images/icons/phpdebugbar.png similarity index 100% rename from src/icons/phpdebugbar.png rename to src/drivers/webextension/images/icons/phpdebugbar.png diff --git a/src/icons/phpwind.png b/src/drivers/webextension/images/icons/phpwind.png similarity index 100% rename from src/icons/phpwind.png rename to src/drivers/webextension/images/icons/phpwind.png diff --git a/src/icons/pimcore.svg b/src/drivers/webextension/images/icons/pimcore.svg similarity index 100% rename from src/icons/pimcore.svg rename to src/drivers/webextension/images/icons/pimcore.svg diff --git a/src/icons/pinoox.png b/src/drivers/webextension/images/icons/pinoox.png similarity index 100% rename from src/icons/pinoox.png rename to src/drivers/webextension/images/icons/pinoox.png diff --git a/src/icons/pirobaseCMS.svg b/src/drivers/webextension/images/icons/pirobaseCMS.svg similarity index 100% rename from src/icons/pirobaseCMS.svg rename to src/drivers/webextension/images/icons/pirobaseCMS.svg diff --git a/src/icons/platformsh.svg b/src/drivers/webextension/images/icons/platformsh.svg similarity index 100% rename from src/icons/platformsh.svg rename to src/drivers/webextension/images/icons/platformsh.svg diff --git a/src/icons/polyfill.svg b/src/drivers/webextension/images/icons/polyfill.svg similarity index 100% rename from src/icons/polyfill.svg rename to src/drivers/webextension/images/icons/polyfill.svg diff --git a/src/drivers/webextension/images/icons/powerboutique.png b/src/drivers/webextension/images/icons/powerboutique.png new file mode 100644 index 000000000..617750c62 Binary files /dev/null and b/src/drivers/webextension/images/icons/powerboutique.png differ diff --git a/src/icons/prettyPhoto.png b/src/drivers/webextension/images/icons/prettyPhoto.png similarity index 100% rename from src/icons/prettyPhoto.png rename to src/drivers/webextension/images/icons/prettyPhoto.png diff --git a/src/icons/projesoft.png b/src/drivers/webextension/images/icons/projesoft.png similarity index 100% rename from src/icons/projesoft.png rename to src/drivers/webextension/images/icons/projesoft.png diff --git a/src/icons/punBB.png b/src/drivers/webextension/images/icons/punBB.png similarity index 100% rename from src/icons/punBB.png rename to src/drivers/webextension/images/icons/punBB.png diff --git a/src/icons/pygments.png b/src/drivers/webextension/images/icons/pygments.png similarity index 100% rename from src/icons/pygments.png rename to src/drivers/webextension/images/icons/pygments.png diff --git a/src/icons/question2answer.png b/src/drivers/webextension/images/icons/question2answer.png similarity index 100% rename from src/icons/question2answer.png rename to src/drivers/webextension/images/icons/question2answer.png diff --git a/src/icons/raychat.png b/src/drivers/webextension/images/icons/raychat.png similarity index 100% rename from src/icons/raychat.png rename to src/drivers/webextension/images/icons/raychat.png diff --git a/src/icons/reCAPTCHA.png b/src/drivers/webextension/images/icons/reCAPTCHA.png similarity index 100% rename from src/icons/reCAPTCHA.png rename to src/drivers/webextension/images/icons/reCAPTCHA.png diff --git a/src/icons/redoc.png b/src/drivers/webextension/images/icons/redoc.png similarity index 100% rename from src/icons/redoc.png rename to src/drivers/webextension/images/icons/redoc.png diff --git a/src/icons/revslider.png b/src/drivers/webextension/images/icons/revslider.png similarity index 100% rename from src/icons/revslider.png rename to src/drivers/webextension/images/icons/revslider.png diff --git a/src/icons/riskified.png b/src/drivers/webextension/images/icons/riskified.png similarity index 100% rename from src/icons/riskified.png rename to src/drivers/webextension/images/icons/riskified.png diff --git a/src/icons/sIFR.png b/src/drivers/webextension/images/icons/sIFR.png similarity index 100% rename from src/icons/sIFR.png rename to src/drivers/webextension/images/icons/sIFR.png diff --git a/src/icons/sNews.png b/src/drivers/webextension/images/icons/sNews.png similarity index 100% rename from src/icons/sNews.png rename to src/drivers/webextension/images/icons/sNews.png diff --git a/src/icons/sazito-phoenix.png b/src/drivers/webextension/images/icons/sazito-phoenix.png similarity index 100% rename from src/icons/sazito-phoenix.png rename to src/drivers/webextension/images/icons/sazito-phoenix.png diff --git a/src/icons/script.aculo.us.png b/src/drivers/webextension/images/icons/script.aculo.us.png similarity index 100% rename from src/icons/script.aculo.us.png rename to src/drivers/webextension/images/icons/script.aculo.us.png diff --git a/src/icons/scrollreveal.svg b/src/drivers/webextension/images/icons/scrollreveal.svg similarity index 100% rename from src/icons/scrollreveal.svg rename to src/drivers/webextension/images/icons/scrollreveal.svg diff --git a/src/icons/sectionio.svg b/src/drivers/webextension/images/icons/sectionio.svg similarity index 100% rename from src/icons/sectionio.svg rename to src/drivers/webextension/images/icons/sectionio.svg diff --git a/src/icons/seravo.svg b/src/drivers/webextension/images/icons/seravo.svg similarity index 100% rename from src/icons/seravo.svg rename to src/drivers/webextension/images/icons/seravo.svg diff --git a/src/icons/shopline.png b/src/drivers/webextension/images/icons/shopline.png similarity index 100% rename from src/icons/shopline.png rename to src/drivers/webextension/images/icons/shopline.png diff --git a/src/icons/signal.png b/src/drivers/webextension/images/icons/signal.png similarity index 100% rename from src/icons/signal.png rename to src/drivers/webextension/images/icons/signal.png diff --git a/src/icons/simbel.svg b/src/drivers/webextension/images/icons/simbel.svg similarity index 100% rename from src/icons/simbel.svg rename to src/drivers/webextension/images/icons/simbel.svg diff --git a/src/icons/siteground.svg b/src/drivers/webextension/images/icons/siteground.svg similarity index 100% rename from src/icons/siteground.svg rename to src/drivers/webextension/images/icons/siteground.svg diff --git a/src/icons/softtr.png b/src/drivers/webextension/images/icons/softtr.png similarity index 100% rename from src/icons/softtr.png rename to src/drivers/webextension/images/icons/softtr.png diff --git a/src/icons/sonar.png b/src/drivers/webextension/images/icons/sonar.png similarity index 100% rename from src/icons/sonar.png rename to src/drivers/webextension/images/icons/sonar.png diff --git a/src/icons/spip.svg b/src/drivers/webextension/images/icons/spip.svg similarity index 100% rename from src/icons/spip.svg rename to src/drivers/webextension/images/icons/spip.svg diff --git a/src/drivers/webextension/images/icons/splitbee.svg b/src/drivers/webextension/images/icons/splitbee.svg new file mode 100644 index 000000000..88f781bba --- /dev/null +++ b/src/drivers/webextension/images/icons/splitbee.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/icons/storeden.svg b/src/drivers/webextension/images/icons/storeden.svg similarity index 100% rename from src/icons/storeden.svg rename to src/drivers/webextension/images/icons/storeden.svg diff --git a/src/icons/storyblok.png b/src/drivers/webextension/images/icons/storyblok.png similarity index 100% rename from src/icons/storyblok.png rename to src/drivers/webextension/images/icons/storyblok.png diff --git a/src/icons/strapdown.js.png b/src/drivers/webextension/images/icons/strapdown.js.png similarity index 100% rename from src/icons/strapdown.js.png rename to src/drivers/webextension/images/icons/strapdown.js.png diff --git a/src/icons/strato.png b/src/drivers/webextension/images/icons/strato.png similarity index 100% rename from src/icons/strato.png rename to src/drivers/webextension/images/icons/strato.png diff --git a/src/icons/styled-components.png b/src/drivers/webextension/images/icons/styled-components.png similarity index 100% rename from src/icons/styled-components.png rename to src/drivers/webextension/images/icons/styled-components.png diff --git a/src/icons/sucuri.png b/src/drivers/webextension/images/icons/sucuri.png similarity index 100% rename from src/icons/sucuri.png rename to src/drivers/webextension/images/icons/sucuri.png diff --git a/src/icons/svbtle.png b/src/drivers/webextension/images/icons/svbtle.png similarity index 100% rename from src/icons/svbtle.png rename to src/drivers/webextension/images/icons/svbtle.png diff --git a/src/icons/swift.engine.png b/src/drivers/webextension/images/icons/swift.engine.png similarity index 100% rename from src/icons/swift.engine.png rename to src/drivers/webextension/images/icons/swift.engine.png diff --git a/src/icons/swiftype.png b/src/drivers/webextension/images/icons/swiftype.png similarity index 100% rename from src/icons/swiftype.png rename to src/drivers/webextension/images/icons/swiftype.png diff --git a/src/icons/swiper.svg b/src/drivers/webextension/images/icons/swiper.svg similarity index 100% rename from src/icons/swiper.svg rename to src/drivers/webextension/images/icons/swiper.svg diff --git a/src/icons/sympa.png b/src/drivers/webextension/images/icons/sympa.png similarity index 100% rename from src/icons/sympa.png rename to src/drivers/webextension/images/icons/sympa.png diff --git a/src/icons/syncfusion.svg b/src/drivers/webextension/images/icons/syncfusion.svg similarity index 100% rename from src/icons/syncfusion.svg rename to src/drivers/webextension/images/icons/syncfusion.svg diff --git a/src/icons/tagcommander.png b/src/drivers/webextension/images/icons/tagcommander.png similarity index 100% rename from src/icons/tagcommander.png rename to src/drivers/webextension/images/icons/tagcommander.png diff --git a/src/icons/tailwindcss.svg b/src/drivers/webextension/images/icons/tailwindcss.svg similarity index 100% rename from src/icons/tailwindcss.svg rename to src/drivers/webextension/images/icons/tailwindcss.svg diff --git a/src/icons/tessitura.svg b/src/drivers/webextension/images/icons/tessitura.svg similarity index 100% rename from src/icons/tessitura.svg rename to src/drivers/webextension/images/icons/tessitura.svg diff --git a/src/icons/textalk.png b/src/drivers/webextension/images/icons/textalk.png similarity index 100% rename from src/icons/textalk.png rename to src/drivers/webextension/images/icons/textalk.png diff --git a/src/icons/three.js.png b/src/drivers/webextension/images/icons/three.js.png similarity index 100% rename from src/icons/three.js.png rename to src/drivers/webextension/images/icons/three.js.png diff --git a/src/icons/thttpd.png b/src/drivers/webextension/images/icons/thttpd.png similarity index 100% rename from src/icons/thttpd.png rename to src/drivers/webextension/images/icons/thttpd.png diff --git a/src/icons/tictail.png b/src/drivers/webextension/images/icons/tictail.png similarity index 100% rename from src/icons/tictail.png rename to src/drivers/webextension/images/icons/tictail.png diff --git a/src/icons/total.js.png b/src/drivers/webextension/images/icons/total.js.png similarity index 100% rename from src/icons/total.js.png rename to src/drivers/webextension/images/icons/total.js.png diff --git a/src/icons/transifex.png b/src/drivers/webextension/images/icons/transifex.png similarity index 100% rename from src/icons/transifex.png rename to src/drivers/webextension/images/icons/transifex.png diff --git a/src/icons/translucide.svg b/src/drivers/webextension/images/icons/translucide.svg similarity index 100% rename from src/icons/translucide.svg rename to src/drivers/webextension/images/icons/translucide.svg diff --git a/src/icons/tray.png b/src/drivers/webextension/images/icons/tray.png similarity index 100% rename from src/icons/tray.png rename to src/drivers/webextension/images/icons/tray.png diff --git a/src/icons/typecho.svg b/src/drivers/webextension/images/icons/typecho.svg similarity index 100% rename from src/icons/typecho.svg rename to src/drivers/webextension/images/icons/typecho.svg diff --git a/src/icons/uCoz.svg b/src/drivers/webextension/images/icons/uCoz.svg similarity index 100% rename from src/icons/uCoz.svg rename to src/drivers/webextension/images/icons/uCoz.svg diff --git a/src/icons/uKnowva.png b/src/drivers/webextension/images/icons/uKnowva.png similarity index 100% rename from src/icons/uKnowva.png rename to src/drivers/webextension/images/icons/uKnowva.png diff --git a/src/icons/user.com.svg b/src/drivers/webextension/images/icons/user.com.svg similarity index 100% rename from src/icons/user.com.svg rename to src/drivers/webextension/images/icons/user.com.svg diff --git a/src/icons/vBulletin.png b/src/drivers/webextension/images/icons/vBulletin.png similarity index 100% rename from src/icons/vBulletin.png rename to src/drivers/webextension/images/icons/vBulletin.png diff --git a/src/icons/varbase.png b/src/drivers/webextension/images/icons/varbase.png similarity index 100% rename from src/icons/varbase.png rename to src/drivers/webextension/images/icons/varbase.png diff --git a/src/icons/vercel.svg b/src/drivers/webextension/images/icons/vercel.svg similarity index 100% rename from src/icons/vercel.svg rename to src/drivers/webextension/images/icons/vercel.svg diff --git a/src/icons/vibecommerce.png b/src/drivers/webextension/images/icons/vibecommerce.png similarity index 100% rename from src/icons/vibecommerce.png rename to src/drivers/webextension/images/icons/vibecommerce.png diff --git a/src/icons/vigbo.png b/src/drivers/webextension/images/icons/vigbo.png similarity index 100% rename from src/icons/vigbo.png rename to src/drivers/webextension/images/icons/vigbo.png diff --git a/src/icons/vwo.svg b/src/drivers/webextension/images/icons/vwo.svg similarity index 100% rename from src/icons/vwo.svg rename to src/drivers/webextension/images/icons/vwo.svg diff --git a/src/icons/webEdition.png b/src/drivers/webextension/images/icons/webEdition.png similarity index 100% rename from src/icons/webEdition.png rename to src/drivers/webextension/images/icons/webEdition.png diff --git a/src/icons/webdev.png b/src/drivers/webextension/images/icons/webdev.png similarity index 100% rename from src/icons/webdev.png rename to src/drivers/webextension/images/icons/webdev.png diff --git a/src/icons/webflow.svg b/src/drivers/webextension/images/icons/webflow.svg similarity index 100% rename from src/icons/webflow.svg rename to src/drivers/webextension/images/icons/webflow.svg diff --git a/src/icons/webmine.png b/src/drivers/webextension/images/icons/webmine.png similarity index 100% rename from src/icons/webmine.png rename to src/drivers/webextension/images/icons/webmine.png diff --git a/src/icons/webpack.svg b/src/drivers/webextension/images/icons/webpack.svg similarity index 100% rename from src/icons/webpack.svg rename to src/drivers/webextension/images/icons/webpack.svg diff --git a/src/icons/websocket.png b/src/drivers/webextension/images/icons/websocket.png similarity index 100% rename from src/icons/websocket.png rename to src/drivers/webextension/images/icons/websocket.png diff --git a/src/icons/wikinggruppen.png b/src/drivers/webextension/images/icons/wikinggruppen.png similarity index 100% rename from src/icons/wikinggruppen.png rename to src/drivers/webextension/images/icons/wikinggruppen.png diff --git a/src/icons/wisyCMS.svg b/src/drivers/webextension/images/icons/wisyCMS.svg similarity index 100% rename from src/icons/wisyCMS.svg rename to src/drivers/webextension/images/icons/wisyCMS.svg diff --git a/src/icons/wpCache.png b/src/drivers/webextension/images/icons/wpCache.png similarity index 100% rename from src/icons/wpCache.png rename to src/drivers/webextension/images/icons/wpCache.png diff --git a/src/icons/wp_super_cache.png b/src/drivers/webextension/images/icons/wp_super_cache.png similarity index 100% rename from src/icons/wp_super_cache.png rename to src/drivers/webextension/images/icons/wp_super_cache.png diff --git a/src/icons/wpengine.svg b/src/drivers/webextension/images/icons/wpengine.svg similarity index 100% rename from src/icons/wpengine.svg rename to src/drivers/webextension/images/icons/wpengine.svg diff --git a/src/icons/wpvip.svg b/src/drivers/webextension/images/icons/wpvip.svg similarity index 100% rename from src/icons/wpvip.svg rename to src/drivers/webextension/images/icons/wpvip.svg diff --git a/src/icons/xeora.png b/src/drivers/webextension/images/icons/xeora.png similarity index 100% rename from src/icons/xeora.png rename to src/drivers/webextension/images/icons/xeora.png diff --git a/src/icons/xonic.png b/src/drivers/webextension/images/icons/xonic.png similarity index 100% rename from src/icons/xonic.png rename to src/drivers/webextension/images/icons/xonic.png diff --git a/src/icons/xtCommerce.png b/src/drivers/webextension/images/icons/xtCommerce.png similarity index 100% rename from src/icons/xtCommerce.png rename to src/drivers/webextension/images/icons/xtCommerce.png diff --git a/src/icons/xwiki.png b/src/drivers/webextension/images/icons/xwiki.png similarity index 100% rename from src/icons/xwiki.png rename to src/drivers/webextension/images/icons/xwiki.png diff --git a/src/icons/yahoo.png b/src/drivers/webextension/images/icons/yahoo.png similarity index 100% rename from src/icons/yahoo.png rename to src/drivers/webextension/images/icons/yahoo.png diff --git a/src/icons/yepcomm.png b/src/drivers/webextension/images/icons/yepcomm.png similarity index 100% rename from src/icons/yepcomm.png rename to src/drivers/webextension/images/icons/yepcomm.png diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index 5059c4837..f08f4db78 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -10,29 +10,29 @@ /** global: fetch */ /** global: Wappalyzer */ -const wappalyzer = new Wappalyzer(); +const wappalyzer = new Wappalyzer() -const tabCache = {}; -const robotsTxtQueue = {}; +const tabCache = {} +const robotsTxtQueue = {} -let categoryOrder = []; +let categoryOrder = [] browser.tabs.onRemoved.addListener((tabId) => { - tabCache[tabId] = null; -}); + tabCache[tabId] = null +}) function userAgent() { - const url = chrome.extension.getURL('/'); + const url = chrome.extension.getURL('/') - if (url.match(/^moz-/)) { - return 'firefox'; + if (url.startsWith('moz-')) { + return 'firefox' } - if (url.match(/^ms-browser-/)) { - return 'edge'; + if (url.startsWith('ms-browser')) { + return 'edge' } - return 'chrome'; + return 'chrome' } /** @@ -40,22 +40,22 @@ function userAgent() { */ function getOption(name, defaultValue = null) { return new Promise(async (resolve, reject) => { - let value = defaultValue; + let value = defaultValue try { - const option = await browser.storage.local.get(name); + const option = await browser.storage.local.get(name) if (option[name] !== undefined) { - value = option[name]; + value = option[name] } } catch (error) { - wappalyzer.log(error.message, 'driver', 'error'); + wappalyzer.log(error.message, 'driver', 'error') - return reject(error.message); + return reject(error.message) } - return resolve(value); - }); + return resolve(value) + }) } /** @@ -64,15 +64,15 @@ function getOption(name, defaultValue = null) { function setOption(name, value) { return new Promise(async (resolve, reject) => { try { - await browser.storage.local.set({ [name]: value }); + await browser.storage.local.set({ [name]: value }) } catch (error) { - wappalyzer.log(error.message, 'driver', 'error'); + wappalyzer.log(error.message, 'driver', 'error') - return reject(error.message); + return reject(error.message) } - return resolve(); - }); + return resolve() + }) } /** @@ -81,8 +81,8 @@ function setOption(name, value) { function openTab(args) { browser.tabs.create({ url: args.url, - active: args.background === undefined || !args.background, - }); + active: args.background === undefined || !args.background + }) } /** @@ -92,321 +92,345 @@ async function post(url, body) { try { const response = await fetch(url, { method: 'POST', - body: JSON.stringify(body), - }); + body: JSON.stringify(body) + }) - wappalyzer.log(`POST ${url}: ${response.status}`, 'driver'); + wappalyzer.log(`POST ${url}: ${response.status}`, 'driver') } catch (error) { - wappalyzer.log(`POST ${url}: ${error}`, 'driver', 'error'); + wappalyzer.log(`POST ${url}: ${error}`, 'driver', 'error') } } // Capture response headers -browser.webRequest.onCompleted.addListener(async (request) => { - const headers = {}; +browser.webRequest.onCompleted.addListener( + async (request) => { + const headers = {} - if (request.responseHeaders) { - const url = wappalyzer.parseUrl(request.url); + if (request.responseHeaders) { + const url = wappalyzer.parseUrl(request.url) - let tab; + let tab - try { - [tab] = await browser.tabs.query({ url: [url.href] }); - } catch (error) { - wappalyzer.log(error, 'driver', 'error'); - } + try { + ;[tab] = await browser.tabs.query({ url: [url.href] }) + } catch (error) { + wappalyzer.log(error, 'driver', 'error') + } - if (tab) { - request.responseHeaders.forEach((header) => { - const name = header.name.toLowerCase(); + if (tab) { + request.responseHeaders.forEach((header) => { + const name = header.name.toLowerCase() - headers[name] = headers[name] || []; + headers[name] = headers[name] || [] - headers[name].push((header.value || header.binaryValue || '').toString()); - }); + headers[name].push( + (header.value || header.binaryValue || '').toString() + ) + }) - if (headers['content-type'] && /\/x?html/.test(headers['content-type'][0])) { - wappalyzer.analyze(url, { headers }, { tab }); + if ( + headers['content-type'] && + /\/x?html/.test(headers['content-type'][0]) + ) { + wappalyzer.analyze(url, { headers }, { tab }) + } } } - } -}, { urls: ['http://*/*', 'https://*/*'], types: ['main_frame'] }, ['responseHeaders']); + }, + { urls: ['http://*/*', 'https://*/*'], types: ['main_frame'] }, + ['responseHeaders'] +) browser.runtime.onConnect.addListener((port) => { port.onMessage.addListener(async (message) => { if (message.id === undefined) { - return; + return } if (message.id !== 'log') { - wappalyzer.log(`Message from ${port.name}: ${message.id}`, 'driver'); + wappalyzer.log(`Message from ${port.name}: ${message.id}`, 'driver') } - const pinnedCategory = await getOption('pinnedCategory'); + const pinnedCategory = await getOption('pinnedCategory') - const url = wappalyzer.parseUrl(port.sender.tab ? port.sender.tab.url : ''); + const url = wappalyzer.parseUrl(port.sender.tab ? port.sender.tab.url : '') - const cookies = await browser.cookies.getAll({ domain: `.${url.hostname}` }); + const cookies = await browser.cookies.getAll({ + domain: `.${url.hostname}` + }) - let response; + let response switch (message.id) { case 'log': - wappalyzer.log(message.subject, message.source); + wappalyzer.log(message.subject, message.source) - break; + break case 'init': - wappalyzer.analyze(url, { cookies }, { tab: port.sender.tab }); + wappalyzer.analyze(url, { cookies }, { tab: port.sender.tab }) - break; + break case 'analyze': if (message.subject.html) { - browser.i18n.detectLanguage(message.subject.html) + browser.i18n + .detectLanguage(message.subject.html) .then(({ languages }) => { const language = languages .filter(({ percentage }) => percentage >= 75) - .map(({ language: lang }) => lang)[0]; + .map(({ language: lang }) => lang)[0] - message.subject.language = language; + message.subject.language = language - wappalyzer.analyze(url, message.subject, { tab: port.sender.tab }); - }); + wappalyzer.analyze(url, message.subject, { tab: port.sender.tab }) + }) } else { - wappalyzer.analyze(url, message.subject, { tab: port.sender.tab }); + wappalyzer.analyze(url, message.subject, { tab: port.sender.tab }) } - await setOption('hostnameCache', wappalyzer.hostnameCache); + await setOption('hostnameCache', wappalyzer.hostnameCache) - break; + break case 'ad_log': - wappalyzer.cacheDetectedAds(message.subject); + wappalyzer.cacheDetectedAds(message.subject) - break; + break case 'get_apps': response = { tabCache: tabCache[message.tab.id], apps: wappalyzer.apps, categories: wappalyzer.categories, pinnedCategory, - termsAccepted: userAgent() === 'chrome' || await getOption('termsAccepted', false), - }; + termsAccepted: + userAgent() === 'chrome' || + (await getOption('termsAccepted', false)) + } - break; + break case 'set_option': - await setOption(message.key, message.value); + await setOption(message.key, message.value) - break; + break case 'get_js_patterns': response = { - patterns: wappalyzer.jsPatterns, - }; + patterns: wappalyzer.jsPatterns + } - break; + break case 'update_theme_mode': // Sync theme mode to popup. response = { - themeMode: await getOption('themeMode', false), - }; + themeMode: await getOption('themeMode', false) + } - break; + break default: - // Do nothing + // Do nothing } if (response) { port.postMessage({ id: message.id, - response, - }); + response + }) } - }); -}); + }) +}) -wappalyzer.driver.document = document; +wappalyzer.driver.document = document /** * Log messages to console */ wappalyzer.driver.log = (message, source, type) => { - const log = ['warn', 'error'].indexOf(type) !== -1 ? type : 'log'; + const log = ['warn', 'error'].includes(type) ? type : 'log' - console[log](`[wappalyzer ${type}]`, `[${source}]`, message); // eslint-disable-line no-console -}; + console[log](`[wappalyzer ${type}]`, `[${source}]`, message) // eslint-disable-line no-console +} /** * Display apps */ wappalyzer.driver.displayApps = async (detected, meta, context) => { - const { tab } = context; + const { tab } = context if (tab === undefined) { - return; + return } tabCache[tab.id] = tabCache[tab.id] || { - detected: [], - }; + detected: [] + } - tabCache[tab.id].detected = detected; + tabCache[tab.id].detected = detected - const pinnedCategory = await getOption('pinnedCategory'); - const dynamicIcon = await getOption('dynamicIcon', true); + const pinnedCategory = await getOption('pinnedCategory') + const dynamicIcon = await getOption('dynamicIcon', true) - let found = false; + let found = false // Find the main application to display - [pinnedCategory].concat(categoryOrder).forEach((match) => { + ;[pinnedCategory].concat(categoryOrder).forEach((match) => { Object.keys(detected).forEach((appName) => { - const app = detected[appName]; + const app = detected[appName] app.props.cats.forEach((category) => { if (category === match && !found) { - let icon = app.props.icon && dynamicIcon ? app.props.icon : 'default.svg'; + let icon = + app.props.icon && dynamicIcon ? app.props.icon : 'default.svg' if (/\.svg$/i.test(icon)) { - icon = `converted/${icon.replace(/\.svg$/, '.png')}`; + icon = `converted/${icon.replace(/\.svg$/, '.png')}` } try { browser.pageAction.setIcon({ tabId: tab.id, - path: `../images/icons/${icon}`, - }); + path: `../images/icons/${icon}` + }) } catch (e) { // Firefox for Android does not support setIcon see https://bugzilla.mozilla.org/show_bug.cgi?id=1331746 } - found = true; + found = true } - }); - }); - }); + }) + }) + }) - browser.pageAction.show(tab.id); -}; + browser.pageAction.show(tab.id) +} /** * Fetch and cache robots.txt for host */ wappalyzer.driver.getRobotsTxt = async (host, secure = false) => { if (robotsTxtQueue[host]) { - return robotsTxtQueue[host]; + return robotsTxtQueue[host] } - const tracking = await getOption('tracking', true); - const robotsTxtCache = await getOption('robotsTxtCache', {}); + const tracking = await getOption('tracking', true) + const robotsTxtCache = await getOption('robotsTxtCache', {}) robotsTxtQueue[host] = new Promise(async (resolve) => { if (!tracking) { - return resolve([]); + return resolve([]) } if (host in robotsTxtCache) { - return resolve(robotsTxtCache[host]); + return resolve(robotsTxtCache[host]) } - const timeout = setTimeout(() => resolve([]), 3000); + const timeout = setTimeout(() => resolve([]), 3000) - let response; + let response try { - response = await fetch(`http${secure ? 's' : ''}://${host}/robots.txt`, { redirect: 'follow', mode: 'no-cors' }); + response = await fetch(`http${secure ? 's' : ''}://${host}/robots.txt`, { + redirect: 'follow', + mode: 'no-cors' + }) } catch (error) { - wappalyzer.log(error, 'driver', 'error'); + wappalyzer.log(error, 'driver', 'error') - return resolve([]); + return resolve([]) } - clearTimeout(timeout); + clearTimeout(timeout) - const robotsTxt = response.ok ? await response.text() : ''; + const robotsTxt = response.ok ? await response.text() : '' - robotsTxtCache[host] = Wappalyzer.parseRobotsTxt(robotsTxt); + robotsTxtCache[host] = Wappalyzer.parseRobotsTxt(robotsTxt) - await setOption('robotsTxtCache', robotsTxtCache); + await setOption('robotsTxtCache', robotsTxtCache) - delete robotsTxtQueue[host]; + delete robotsTxtQueue[host] - return resolve(robotsTxtCache[host]); - }); + return resolve(robotsTxtCache[host]) + }) - return robotsTxtQueue[host]; -}; + return robotsTxtQueue[host] +} /** * Anonymously track detected applications for research purposes */ wappalyzer.driver.ping = async (hostnameCache = {}, adCache = []) => { - const tracking = await getOption('tracking', true); - const termsAccepted = userAgent() === 'chrome' || await getOption('termsAccepted', false); + const tracking = await getOption('tracking', true) + const termsAccepted = + userAgent() === 'chrome' || (await getOption('termsAccepted', false)) if (tracking && termsAccepted) { if (Object.keys(hostnameCache).length) { - post('https://api.wappalyzer.com/ping/v1/', hostnameCache); + post('https://api.wappalyzer.com/ping/v1/', hostnameCache) } if (adCache.length) { - post('https://ad.wappalyzer.com/log/wp/', adCache); + post('https://ad.wappalyzer.com/log/wp/', adCache) } - await setOption('robotsTxtCache', {}); + await setOption('robotsTxtCache', {}) } -}; +} // Init -(async () => { +;(async () => { // Technologies try { - const response = await fetch('../apps.json'); - const json = await response.json(); + const response = await fetch('../apps.json') + const json = await response.json() - wappalyzer.apps = json.apps; - wappalyzer.categories = json.categories; + wappalyzer.apps = json.apps + wappalyzer.categories = json.categories } catch (error) { - wappalyzer.log(`GET apps.json: ${error.message}`, 'driver', 'error'); + wappalyzer.log(`GET apps.json: ${error.message}`, 'driver', 'error') } - wappalyzer.parseJsPatterns(); + wappalyzer.parseJsPatterns() categoryOrder = Object.keys(wappalyzer.categories) - .map(categoryId => parseInt(categoryId, 10)) - .sort((a, b) => wappalyzer.categories[a].priority - wappalyzer.categories[b].priority); + .map((categoryId) => parseInt(categoryId, 10)) + .sort( + (a, b) => + wappalyzer.categories[a].priority - wappalyzer.categories[b].priority + ) // Version check - const { version } = browser.runtime.getManifest(); - const previousVersion = await getOption('version'); - const upgradeMessage = await getOption('upgradeMessage', true); + const { version } = browser.runtime.getManifest() + const previousVersion = await getOption('version') + const upgradeMessage = await getOption('upgradeMessage', true) if (previousVersion === null) { openTab({ - url: `${wappalyzer.config.websiteURL}installed`, - }); + url: `${wappalyzer.config.websiteURL}installed` + }) } else if (version !== previousVersion && upgradeMessage) { openTab({ url: `${wappalyzer.config.websiteURL}upgraded?v${version}`, - background: true, - }); + background: true + }) } - await setOption('version', version); + await setOption('version', version) // Hostname cache - wappalyzer.hostnameCache = await getOption('hostnameCache', {}); + wappalyzer.hostnameCache = await getOption('hostnameCache', {}) // Run content script on all tabs try { - const tabs = await browser.tabs.query({ url: ['http://*/*', 'https://*/*'] }); + const tabs = await browser.tabs.query({ + url: ['http://*/*', 'https://*/*'] + }) tabs.forEach(async (tab) => { try { await browser.tabs.executeScript(tab.id, { - file: '../js/content.js', - }); + file: '../js/content.js' + }) } catch (error) { // } - }); + }) } catch (error) { - wappalyzer.log(error, 'driver', 'error'); + wappalyzer.log(error, 'driver', 'error') } -})(); +})() diff --git a/src/drivers/webextension/js/options.js b/src/drivers/webextension/js/options.js index 03c6ae504..29d11d5d4 100644 --- a/src/drivers/webextension/js/options.js +++ b/src/drivers/webextension/js/options.js @@ -3,29 +3,29 @@ /* globals browser Wappalyzer */ /* eslint-env browser */ -const wappalyzer = new Wappalyzer(); +const wappalyzer = new Wappalyzer() /** * Get a value from localStorage */ function getOption(name, defaultValue = null) { return new Promise(async (resolve, reject) => { - let value = defaultValue; + let value = defaultValue try { - const option = await browser.storage.local.get(name); + const option = await browser.storage.local.get(name) if (option[name] !== undefined) { - value = option[name]; + value = option[name] } } catch (error) { - wappalyzer.log(error.message, 'driver', 'error'); + wappalyzer.log(error.message, 'driver', 'error') - return reject(error.message); + return reject(error.message) } - return resolve(value); - }); + return resolve(value) + }) } /** @@ -34,72 +34,76 @@ function getOption(name, defaultValue = null) { function setOption(name, value) { return new Promise(async (resolve, reject) => { try { - await browser.storage.local.set({ [name]: value }); + await browser.storage.local.set({ [name]: value }) } catch (error) { - wappalyzer.log(error.message, 'driver', 'error'); + wappalyzer.log(error.message, 'driver', 'error') - return reject(error.message); + return reject(error.message) } - return resolve(); - }); + return resolve() + }) } document.addEventListener('DOMContentLoaded', async () => { - const nodes = document.querySelectorAll('[data-i18n]'); + const nodes = document.querySelectorAll('[data-i18n]') Array.prototype.forEach.call(nodes, (node) => { - node.childNodes[0].nodeValue = browser.i18n.getMessage(node.dataset.i18n); - }); + node.childNodes[0].nodeValue = browser.i18n.getMessage(node.dataset.i18n) + }) document.querySelector('#github').addEventListener('click', () => { - window.open(wappalyzer.config.githubURL); - }); + window.open(wappalyzer.config.githubURL) + }) document.querySelector('#twitter').addEventListener('click', () => { - window.open(wappalyzer.config.twitterURL); - }); + window.open(wappalyzer.config.twitterURL) + }) document.querySelector('#wappalyzer').addEventListener('click', () => { - window.open(wappalyzer.config.websiteURL); - }); + window.open(wappalyzer.config.websiteURL) + }) - let el; - let value; + let el + let value // Upgrade message - value = await getOption('upgradeMessage', true); + value = await getOption('upgradeMessage', true) - el = document.querySelector('#option-upgrade-message'); + el = document.querySelector('#option-upgrade-message') - el.checked = value; + el.checked = value - el.addEventListener('change', e => setOption('upgradeMessage', e.target.checked)); + el.addEventListener('change', (e) => + setOption('upgradeMessage', e.target.checked) + ) // Dynamic icon - value = await getOption('dynamicIcon', true); + value = await getOption('dynamicIcon', true) - el = document.querySelector('#option-dynamic-icon'); + el = document.querySelector('#option-dynamic-icon') - el.checked = value; + el.checked = value - el.addEventListener('change', e => setOption('dynamicIcon', e.target.checked)); + el.addEventListener('change', (e) => + setOption('dynamicIcon', e.target.checked) + ) // Tracking - value = await getOption('tracking', true); + value = await getOption('tracking', true) - el = document.querySelector('#option-tracking'); + el = document.querySelector('#option-tracking') - el.checked = value; + el.checked = value - el.addEventListener('change', e => setOption('tracking', e.target.checked)); + el.addEventListener('change', (e) => setOption('tracking', e.target.checked)) // Theme Mode - value = await getOption('themeMode', false); + value = await getOption('themeMode', false) - el = document.querySelector('#option-theme-mode'); + el = document.querySelector('#option-theme-mode') - el.checked = value; + el.checked = value - el.addEventListener('change', e => setOption('themeMode', e.target.checked)); -}); + el.addEventListener('change', (e) => setOption('themeMode', e.target.checked)) +}) diff --git a/src/drivers/webextension/js/popup.js b/src/drivers/webextension/js/popup.js index cf5d2d95d..24248935f 100644 --- a/src/drivers/webextension/js/popup.js +++ b/src/drivers/webextension/js/popup.js @@ -4,217 +4,270 @@ /** global: browser */ /** global: jsonToDOM */ -let pinnedCategory = null; -let termsAccepted = false; +let pinnedCategory = null +let termsAccepted = false const port = browser.runtime.connect({ - name: 'popup.js', -}); + name: 'popup.js' +}) function slugify(string) { - return string.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/--+/g, '-').replace(/(?:^-|-$)/, ''); + return string + .toLowerCase() + .replace(/[^a-z0-9-]/g, '-') + .replace(/--+/g, '-') + .replace(/(?:^-|-$)/, '') } function i18n() { - const nodes = document.querySelectorAll('[data-i18n]'); + const nodes = document.querySelectorAll('[data-i18n]') Array.prototype.forEach.call(nodes, (node) => { - node.innerHTML = browser.i18n.getMessage(node.dataset.i18n); - }); + node.innerHTML = browser.i18n.getMessage(node.dataset.i18n) + }) } function replaceDom(domTemplate) { - const container = document.getElementsByClassName('container')[0]; + const container = document.getElementsByClassName('container')[0] while (container.firstChild) { - container.removeChild(container.firstChild); + container.removeChild(container.firstChild) } - container.appendChild(jsonToDOM(domTemplate, document, {})); + container.appendChild(jsonToDOM(domTemplate, document, {})) - i18n(); + i18n() - Array.from(document.querySelectorAll('.detected__category-pin-wrapper')).forEach((pin) => { + Array.from( + document.querySelectorAll('.detected__category-pin-wrapper') + ).forEach((pin) => { pin.addEventListener('click', () => { - const categoryId = parseInt(pin.dataset.categoryId, 10); + const categoryId = parseInt(pin.dataset.categoryId, 10) if (categoryId === pinnedCategory) { - pin.className = 'detected__category-pin-wrapper'; + pin.className = 'detected__category-pin-wrapper' - pinnedCategory = null; + pinnedCategory = null } else { - const active = document.querySelector('.detected__category-pin-wrapper--active'); + const active = document.querySelector( + '.detected__category-pin-wrapper--active' + ) if (active) { - active.className = 'detected__category-pin-wrapper'; + active.className = 'detected__category-pin-wrapper' } - pin.className = 'detected__category-pin-wrapper detected__category-pin-wrapper--active'; + pin.className = + 'detected__category-pin-wrapper detected__category-pin-wrapper--active' - pinnedCategory = categoryId; + pinnedCategory = categoryId } port.postMessage({ id: 'set_option', key: 'pinnedCategory', - value: pinnedCategory, - }); - }); - }); + value: pinnedCategory + }) + }) + }) } function replaceDomWhenReady(dom) { if (/complete|interactive|loaded/.test(document.readyState)) { - replaceDom(dom); + replaceDom(dom) } else { document.addEventListener('DOMContentLoaded', () => { - replaceDom(dom); - }); + replaceDom(dom) + }) } } function appsToDomTemplate(response) { - let template = []; + let template = [] if (response.tabCache && Object.keys(response.tabCache.detected).length > 0) { - const categories = {}; + const categories = {} // Group apps by category for (const appName in response.tabCache.detected) { response.apps[appName].cats.forEach((cat) => { - categories[cat] = categories[cat] || { apps: [] }; + categories[cat] = categories[cat] || { + name: response.categories[cat].name, + apps: [] + } - categories[cat].apps[appName] = appName; - }); + categories[cat].apps[appName] = appName + }) } for (const cat in categories) { - const apps = []; + const apps = [] for (const appName in categories[cat].apps) { - const { confidence, version } = response.tabCache.detected[appName]; - - apps.push( + const { confidenceTotal, version } = response.tabCache.detected[appName] + + apps.push([ + 'a', + { + class: 'detected__app', + href: `https://www.wappalyzer.com/technologies/${slugify( + categories[cat].name + )}/${slugify(appName)}` + }, [ - 'a', { - class: 'detected__app', - target: '_blank', - href: `https://www.wappalyzer.com/technologies/${slugify(appName)}`, - }, [ - 'img', { - class: 'detected__app-icon', - src: `../images/icons/${response.apps[appName].icon || 'default.svg'}`, - }, - ], [ - 'span', { - class: 'detected__app-name', - }, - appName, - ], version ? [ - 'span', { - class: 'detected__app-version', - }, - version, - ] : null, confidence < 100 ? [ - 'span', { - class: 'detected__app-confidence', - }, - `${confidence}% sure`, - ] : null, + 'img', + { + class: 'detected__app-icon', + src: `../images/icons/${response.apps[appName].icon || + 'default.svg'}` + } + ], + [ + 'span', + { + class: 'detected__app-name' + }, + appName ], - ); + version + ? [ + 'span', + { + class: 'detected__app-version' + }, + version + ] + : null, + confidenceTotal < 100 + ? [ + 'span', + { + class: 'detected__app-confidence' + }, + `${confidenceTotal}% sure` + ] + : null + ]) } - template.push( + template.push([ + 'div', + { + class: 'detected__category' + }, [ - 'div', { - class: 'detected__category', - }, [ - 'div', { - class: 'detected__category-name', - }, [ - 'a', { - class: 'detected__category-link', - target: '_blank', - href: `https://www.wappalyzer.com/categories/${slugify(response.categories[cat].name)}`, - }, - browser.i18n.getMessage(`categoryName${cat}`), - ], [ - 'span', { - class: `detected__category-pin-wrapper${pinnedCategory == cat ? ' detected__category-pin-wrapper--active' : ''}`, - 'data-category-id': cat, - title: browser.i18n.getMessage('categoryPin'), - }, [ - 'img', { - class: 'detected__category-pin detected__category-pin--active', - src: '../images/pin-active.svg', - }, - ], [ - 'img', { - class: 'detected__category-pin detected__category-pin--inactive', - src: '../images/pin.svg', - }, - ], - ], - ], [ - 'div', { - class: 'detected__apps', + 'div', + { + class: 'detected__category-name' + }, + [ + 'a', + { + class: 'detected__category-link', + href: `https://www.wappalyzer.com/categories/${slugify( + response.categories[cat].name + )}` }, - apps, + browser.i18n.getMessage(`categoryName${cat}`) ], + [ + 'span', + { + class: `detected__category-pin-wrapper${ + parseInt(pinnedCategory, 10) === parseInt(cat, 10) + ? ' detected__category-pin-wrapper--active' + : '' + }`, + 'data-category-id': cat, + title: browser.i18n.getMessage('categoryPin') + }, + [ + 'img', + { + class: 'detected__category-pin detected__category-pin--active', + src: '../images/pin-active.svg' + } + ], + [ + 'img', + { + class: + 'detected__category-pin detected__category-pin--inactive', + src: '../images/pin.svg' + } + ] + ] ], - ); + [ + 'div', + { + class: 'detected__apps' + }, + apps + ] + ]) } template = [ - 'div', { - class: 'detected', + 'div', + { + class: 'detected' }, - template, - ]; + template + ] } else { template = [ - 'div', { - class: 'empty', + 'div', + { + class: 'empty' }, [ - 'span', { - class: 'empty__text', + 'span', + { + class: 'empty__text' }, - browser.i18n.getMessage('noAppsDetected'), - ], - ]; + browser.i18n.getMessage('noAppsDetected') + ] + ] } - return template; + return template } async function getApps() { try { const tabs = await browser.tabs.query({ active: true, - currentWindow: true, - }); + currentWindow: true + }) + + const url = new URL(tabs[0].url) + + document.querySelector( + '.footer__link' + ).href = `https://www.wappalyzer.com/alerts/manage?url=${encodeURIComponent( + `${url.protocol}//${url.hostname}` + )}` port.postMessage({ id: 'get_apps', - tab: tabs[0], - }); + tab: tabs[0] + }) } catch (error) { - console.error(error); // eslint-disable-line no-console + console.error(error) // eslint-disable-line no-console } } /** * Async function to update body class based on option. */ -async function getThemeMode() { +function getThemeMode() { try { port.postMessage({ - id: 'update_theme_mode', - }); + id: 'update_theme_mode' + }) } catch (error) { - console.error(error); // eslint-disable-line no-console + console.error(error) // eslint-disable-line no-console } } @@ -224,50 +277,51 @@ async function getThemeMode() { */ function updateThemeMode(res) { if (res.hasOwnProperty('themeMode') && res.themeMode !== false) { - document.body.classList.add('theme-mode-sync'); + document.body.classList.add('theme-mode-sync') } } + function displayApps(response) { - pinnedCategory = response.pinnedCategory; // eslint-disable-line prefer-destructuring - termsAccepted = response.termsAccepted; // eslint-disable-line prefer-destructuring + pinnedCategory = response.pinnedCategory // eslint-disable-line prefer-destructuring + termsAccepted = response.termsAccepted // eslint-disable-line prefer-destructuring if (termsAccepted) { - replaceDomWhenReady(appsToDomTemplate(response)); + replaceDomWhenReady(appsToDomTemplate(response)) } else { - i18n(); + i18n() - const wrapper = document.querySelector('.terms__wrapper'); + const wrapper = document.querySelector('.terms__wrapper') document.querySelector('.terms__accept').addEventListener('click', () => { port.postMessage({ id: 'set_option', key: 'termsAccepted', - value: true, - }); + value: true + }) - wrapper.classList.remove('terms__wrapper--active'); + wrapper.classList.remove('terms__wrapper--active') - getApps(); - }); + getApps() + }) - wrapper.classList.add('terms__wrapper--active'); + wrapper.classList.add('terms__wrapper--active') } } port.onMessage.addListener((message) => { switch (message.id) { case 'get_apps': - displayApps(message.response); + displayApps(message.response) - break; + break case 'update_theme_mode': - updateThemeMode(message.response); + updateThemeMode(message.response) - break; + break default: - // Do nothing + // Do nothing } -}); +}) -getThemeMode(); -getApps(); +getThemeMode() +getApps() diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index bfd1f69de..a5a25866e 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -4,7 +4,7 @@ "author": "Wappalyzer", "homepage_url": "https://www.wappalyzer.com", "description": "Identify web technologies", - "version": "5.9.34", + "version": "5.10.1", "default_locale": "en", "manifest_version": 2, "icons": { diff --git a/src/drivers/webextension/npm-shrinkwrap.json b/src/drivers/webextension/npm-shrinkwrap.json deleted file mode 100644 index 9934b3a1c..000000000 --- a/src/drivers/webextension/npm-shrinkwrap.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "webextension-polyfill": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.4.0.tgz", - "integrity": "sha512-oreMp+EoAo1pzRMigx4jB5jInIpx6NTCySPSjGyLLee/dCIPiRqowCEfbFP8o20wz9SOtNwSsfkaJ9D/tRgpag==" - } - } -} diff --git a/src/drivers/webextension/yarn.lock b/src/drivers/webextension/yarn.lock index e2e1d507d..1e20414fe 100644 --- a/src/drivers/webextension/yarn.lock +++ b/src/drivers/webextension/yarn.lock @@ -2,6 +2,7 @@ # yarn lockfile v1 -webextension-polyfill@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.2.1.tgz#cdfc9126033039f1713553157d35beff1d4d6f4a" +webextension-polyfill@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.4.0.tgz#9cc5a60f0f2bf907a6b349fdd7e61701f54956f9" + integrity sha512-oreMp+EoAo1pzRMigx4jB5jInIpx6NTCySPSjGyLLee/dCIPiRqowCEfbFP8o20wz9SOtNwSsfkaJ9D/tRgpag== diff --git a/src/icons/Prism.svg b/src/icons/Prism.svg deleted file mode 100644 index b3257ac00..000000000 --- a/src/icons/Prism.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/src/wappalyzer.js b/src/wappalyzer.js index 771de8426..603ea119e 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -8,130 +8,137 @@ const validation = { hostname: /(www.)?((.+?)\.(([a-z]{2,3}\.)?[a-z]{2,6}))$/, - hostnameBlacklist: /((local|dev(elopment)?|stag(e|ing)?|test(ing)?|demo(shop)?|admin|google|cache)\.|\/admin|\.local)/, -}; + hostnameBlacklist: /((local|dev(elopment)?|stag(e|ing)?|test(ing)?|demo(shop)?|admin|google|cache)\.|\/admin|\.local)/ +} /** * Enclose string in array */ function asArray(value) { - return value instanceof Array ? value : [value]; + return Array.isArray(value) ? value : [value] } /** * */ function asyncForEach(iterable, iterator) { - return Promise.all((iterable || []) - .map(item => new Promise(resolve => setTimeout(() => resolve(iterator(item)), 1)))); + return Promise.all( + (iterable || []).map( + (item) => + new Promise((resolve) => setTimeout(() => resolve(iterator(item)), 1)) + ) + ) } /** * Mark application as detected, set confidence and version */ function addDetected(app, pattern, type, value, key) { - app.detected = true; + app.detected = true // Set confidence level - app.confidence[`${type} ${key ? `${key} ` : ''}${pattern.regex}`] = pattern.confidence === undefined ? 100 : parseInt(pattern.confidence, 10); + app.confidence[`${type} ${key ? `${key} ` : ''}${pattern.regex}`] = + pattern.confidence === undefined ? 100 : parseInt(pattern.confidence, 10) // Detect version number if (pattern.version) { - const versions = []; - const matches = pattern.regex.exec(value); + const versions = [] + const matches = pattern.regex.exec(value) - let { version } = pattern; + let { version } = pattern if (matches) { matches.forEach((match, i) => { // Parse ternary operator - const ternary = new RegExp(`\\\\${i}\\?([^:]+):(.*)$`).exec(version); + const ternary = new RegExp(`\\\\${i}\\?([^:]+):(.*)$`).exec(version) if (ternary && ternary.length === 3) { - version = version.replace(ternary[0], match ? ternary[1] : ternary[2]); + version = version.replace(ternary[0], match ? ternary[1] : ternary[2]) } // Replace back references - version = version.trim().replace(new RegExp(`\\\\${i}`, 'g'), match || ''); - }); + version = version + .trim() + .replace(new RegExp(`\\\\${i}`, 'g'), match || '') + }) - if (version && versions.indexOf(version) === -1) { - versions.push(version); + if (version && !versions.includes(version)) { + versions.push(version) } if (versions.length) { // Use the longest detected version number - app.version = versions.reduce((a, b) => (a.length > b.length ? a : b)); + app.version = versions.reduce((a, b) => (a.length > b.length ? a : b)) } } } } function resolveExcludes(apps, detected) { - const excludes = []; - const detectedApps = Object.assign({}, apps, detected); + const excludes = [] + const detectedApps = Object.assign({}, apps, detected) // Exclude app in detected apps only Object.keys(detectedApps).forEach((appName) => { - const app = detectedApps[appName]; + const app = detectedApps[appName] if (app.props.excludes) { asArray(app.props.excludes).forEach((excluded) => { - excludes.push(excluded); - }); + excludes.push(excluded) + }) } - }); + }) // Remove excluded applications Object.keys(apps).forEach((appName) => { - if (excludes.indexOf(appName) > -1) { - delete apps[appName]; + if (excludes.includes(appName)) { + delete apps[appName] } - }); + }) } class Application { constructor(name, props, detected) { - this.confidence = {}; - this.confidenceTotal = 0; - this.detected = Boolean(detected); - this.excludes = []; - this.name = name; - this.props = props; - this.version = ''; + this.confidence = {} + this.confidenceTotal = 0 + this.detected = Boolean(detected) + this.excludes = [] + this.name = name + this.props = props + this.version = '' } /** * Calculate confidence total */ getConfidence() { - let total = 0; + let total = 0 Object.keys(this.confidence).forEach((id) => { - total += this.confidence[id]; - }); + total += this.confidence[id] + }) - this.confidenceTotal = Math.min(total, 100); + this.confidenceTotal = Math.min(total, 100) - return this.confidenceTotal; + return this.confidenceTotal } } class Wappalyzer { constructor() { - this.apps = {}; - this.categories = {}; - this.driver = {}; - this.jsPatterns = {}; - this.detected = {}; - this.hostnameCache = {}; - this.adCache = []; + this.apps = {} + this.categories = {} + this.driver = {} + this.jsPatterns = {} + this.detected = {} + this.hostnameCache = {} + this.adCache = [] this.config = { websiteURL: 'https://www.wappalyzer.com/', twitterURL: 'https://twitter.com/Wappalyzer', - githubURL: 'https://github.com/AliasIO/Wappalyzer', - }; + githubURL: 'https://github.com/AliasIO/Wappalyzer' + } } /** @@ -139,124 +146,135 @@ class Wappalyzer { */ log(message, source, type) { if (this.driver.log) { - this.driver.log(message, source || '', type || 'debug'); + this.driver.log(message, source || '', type || 'debug') } } analyze(url, data, context) { - const apps = {}; - const promises = []; - const startTime = new Date(); - const { - scripts, - cookies, - headers, - js, - } = data; - - let { html } = data; + const apps = {} + const promises = [] + const startTime = new Date() + const { scripts, cookies, headers, js } = data + + let { html } = data if (this.detected[url.canonical] === undefined) { - this.detected[url.canonical] = {}; + this.detected[url.canonical] = {} } - const metaTags = []; + const metaTags = [] // Additional information - let language = null; + let language = null if (html) { if (typeof html !== 'string') { - html = ''; + html = '' } - let matches = data.html.match(new RegExp(']*[: ]lang="([a-z]{2}((-|_)[A-Z]{2})?)"', 'i')); + let matches = data.html.match( + new RegExp(']*[: ]lang="([a-z]{2}((-|_)[A-Z]{2})?)"', 'i') + ) - language = matches && matches.length ? matches[1] : data.language || null; + language = matches && matches.length ? matches[1] : data.language || null // Meta tags - const regex = /]+>/ig; + const regex = /]+>/gi do { - matches = regex.exec(html); + matches = regex.exec(html) if (!matches) { - break; + break } - metaTags.push(matches[0]); - } while (matches); + metaTags.push(matches[0]) + } while (matches) } Object.keys(this.apps).forEach((appName) => { - apps[appName] = this.detected[url.canonical] && this.detected[url.canonical][appName] - ? this.detected[url.canonical][appName] - : new Application(appName, this.apps[appName]); + apps[appName] = + this.detected[url.canonical] && this.detected[url.canonical][appName] + ? this.detected[url.canonical][appName] + : new Application(appName, this.apps[appName]) - const app = apps[appName]; + const app = apps[appName] - promises.push(this.analyzeUrl(app, url)); + promises.push(this.analyzeUrl(app, url)) if (html) { - promises.push(this.analyzeHtml(app, html)); - promises.push(this.analyzeMeta(app, metaTags)); + promises.push(this.analyzeHtml(app, html)) + promises.push(this.analyzeMeta(app, metaTags)) } if (scripts) { - promises.push(this.analyzeScripts(app, scripts)); + promises.push(this.analyzeScripts(app, scripts)) } if (cookies) { - promises.push(this.analyzeCookies(app, cookies)); + promises.push(this.analyzeCookies(app, cookies)) } if (headers) { - promises.push(this.analyzeHeaders(app, headers)); + promises.push(this.analyzeHeaders(app, headers)) } - }); + }) if (js) { Object.keys(js).forEach((appName) => { if (typeof js[appName] !== 'function') { - promises.push(this.analyzeJs(apps[appName], js[appName])); + promises.push(this.analyzeJs(apps[appName], js[appName])) } - }); + }) } return new Promise(async (resolve) => { - await Promise.all(promises); + await Promise.all(promises) Object.keys(apps).forEach((appName) => { - const app = apps[appName]; + const app = apps[appName] if (!app.detected || !app.getConfidence()) { - delete apps[app.name]; + delete apps[app.name] } - }); + }) - resolveExcludes(apps, this.detected[url]); - this.resolveImplies(apps, url.canonical); + resolveExcludes(apps, this.detected[url]) + this.resolveImplies(apps, url.canonical) - this.cacheDetectedApps(apps, url.canonical); - this.trackDetectedApps(apps, url, language); + this.cacheDetectedApps(apps, url.canonical) + this.trackDetectedApps(apps, url, language) - this.log(`Processing ${Object.keys(data).join(', ')} took ${((new Date() - startTime) / 1000).toFixed(2)}s (${url.hostname})`, 'core'); + this.log( + `Processing ${Object.keys(data).join(', ')} took ${( + (new Date() - startTime) / + 1000 + ).toFixed(2)}s (${url.hostname})`, + 'core' + ) if (Object.keys(apps).length) { - this.log(`Identified ${Object.keys(apps).join(', ')} (${url.hostname})`, 'core'); + this.log( + `Identified ${Object.keys(apps).join(', ')} (${url.hostname})`, + 'core' + ) } - this.driver.displayApps(this.detected[url.canonical], { language }, context); + this.driver.displayApps( + this.detected[url.canonical], + { language }, + context + ) - return resolve(); - }); + return resolve() + }) } /** * Cache detected ads */ cacheDetectedAds(ad) { - this.adCache.push(ad); + this.adCache.push(ad) } /** @@ -264,58 +282,65 @@ class Wappalyzer { */ robotsTxtAllows(url) { return new Promise(async (resolve, reject) => { - const parsed = this.parseUrl(url); + const parsed = this.parseUrl(url) if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') { - return reject(); + return reject() } - const robotsTxt = await this.driver.getRobotsTxt(parsed.host, parsed.protocol === 'https:'); - - if (robotsTxt.some(disallowedPath => parsed.pathname.indexOf(disallowedPath) === 0)) { - return reject(); + const robotsTxt = await this.driver.getRobotsTxt( + parsed.host, + parsed.protocol === 'https:' + ) + + if ( + robotsTxt.some( + (disallowedPath) => parsed.pathname.indexOf(disallowedPath) === 0 + ) + ) { + return reject() } - return resolve(); - }); + return resolve() + }) } /** * Parse a URL */ parseUrl(url) { - const a = this.driver.document.createElement('a'); + const a = this.driver.document.createElement('a') - a.href = url; + a.href = url - a.canonical = `${a.protocol}//${a.host}${a.pathname}`; + a.canonical = `${a.protocol}//${a.host}${a.pathname}` - return a; + return a } /** * */ static parseRobotsTxt(robotsTxt) { - const disallow = []; + const disallow = [] - let userAgent; + let userAgent robotsTxt.split('\n').forEach((line) => { - let matches = /^User-agent:\s*(.+)$/i.exec(line.trim()); + let matches = /^User-agent:\s*(.+)$/i.exec(line.trim()) if (matches) { - userAgent = matches[1].toLowerCase(); + userAgent = matches[1].toLowerCase() } else if (userAgent === '*' || userAgent === 'wappalyzer') { - matches = /^Disallow:\s*(.+)$/i.exec(line.trim()); + matches = /^Disallow:\s*(.+)$/i.exec(line.trim()) if (matches) { - disallow.push(matches[1]); + disallow.push(matches[1]) } } - }); + }) - return disallow; + return disallow } /** @@ -323,15 +348,15 @@ class Wappalyzer { */ ping() { if (Object.keys(this.hostnameCache).length > 50) { - this.driver.ping(this.hostnameCache); + this.driver.ping(this.hostnameCache) - this.hostnameCache = {}; + this.hostnameCache = {} } if (this.adCache.length > 50) { - this.driver.ping({}, this.adCache); + this.driver.ping({}, this.adCache) - this.adCache = []; + this.adCache = [] } } @@ -340,55 +365,55 @@ class Wappalyzer { */ parsePatterns(patterns) { if (!patterns) { - return []; + return [] } - let parsed = {}; + let parsed = {} // Convert string to object containing array containing string - if (typeof patterns === 'string' || patterns instanceof Array) { + if (typeof patterns === 'string' || Array.isArray(patterns)) { patterns = { - main: asArray(patterns), - }; + main: asArray(patterns) + } } Object.keys(patterns).forEach((key) => { - parsed[key] = []; + parsed[key] = [] asArray(patterns[key]).forEach((pattern) => { - const attrs = {}; + const attrs = {} pattern.split('\\;').forEach((attr, i) => { if (i) { // Key value pairs - attr = attr.split(':'); + attr = attr.split(':') if (attr.length > 1) { - attrs[attr.shift()] = attr.join(':'); + attrs[attr.shift()] = attr.join(':') } } else { - attrs.string = attr; + attrs.string = attr try { - attrs.regex = new RegExp(attr.replace('/', '\/'), 'i'); // Escape slashes in regular expression + attrs.regex = new RegExp(attr.replace('/', '/'), 'i') // Escape slashes in regular expression } catch (error) { - attrs.regex = new RegExp(); + attrs.regex = new RegExp() - this.log(`${error.message}: ${attr}`, 'error', 'core'); + this.log(`${error.message}: ${attr}`, 'error', 'core') } } - }); + }) - parsed[key].push(attrs); - }); - }); + parsed[key].push(attrs) + }) + }) // Convert back to array if the original pattern list was an array (or string) if ('main' in parsed) { - parsed = parsed.main; + parsed = parsed.main } - return parsed; + return parsed } /** @@ -397,49 +422,60 @@ class Wappalyzer { parseJsPatterns() { Object.keys(this.apps).forEach((appName) => { if (this.apps[appName].js) { - this.jsPatterns[appName] = this.parsePatterns(this.apps[appName].js); + this.jsPatterns[appName] = this.parsePatterns(this.apps[appName].js) } - }); + }) } resolveImplies(apps, url) { - let checkImplies = true; + let checkImplies = true const resolve = (appName) => { - const app = apps[appName]; + const app = apps[appName] if (app && app.props.implies) { asArray(app.props.implies).forEach((implied) => { - [implied] = this.parsePatterns(implied); + ;[implied] = this.parsePatterns(implied) if (!this.apps[implied.string]) { - this.log(`Implied application ${implied.string} does not exist`, 'core', 'warn'); + this.log( + `Implied application ${implied.string} does not exist`, + 'core', + 'warn' + ) - return; + return } if (!(implied.string in apps)) { - apps[implied.string] = this.detected[url] && this.detected[url][implied.string] - ? this.detected[url][implied.string] - : new Application(implied.string, this.apps[implied.string], true); - - checkImplies = true; + apps[implied.string] = + this.detected[url] && this.detected[url][implied.string] + ? this.detected[url][implied.string] + : new Application( + implied.string, + this.apps[implied.string], + true + ) + + checkImplies = true } // Apply app confidence to implied app Object.keys(app.confidence).forEach((id) => { - apps[implied.string].confidence[`${id} implied by ${appName}`] = app.confidence[id] * (implied.confidence === undefined ? 1 : implied.confidence / 100); - }); - }); + apps[implied.string].confidence[`${id} implied by ${appName}`] = + app.confidence[id] * + (implied.confidence === undefined ? 1 : implied.confidence / 100) + }) + }) } - }; + } // Implied applications // Run several passes as implied apps may imply other apps while (checkImplies) { - checkImplies = false; + checkImplies = false - Object.keys(apps).forEach(resolve); + Object.keys(apps).forEach(resolve) } } @@ -448,19 +484,18 @@ class Wappalyzer { */ cacheDetectedApps(apps, url) { Object.keys(apps).forEach((appName) => { - const app = apps[appName]; + const app = apps[appName] // Per URL - this.detected[url][appName] = app; + this.detected[url][appName] = app - Object.keys(app.confidence) - .forEach((id) => { - this.detected[url][appName].confidence[id] = app.confidence[id]; - }); - }); + Object.keys(app.confidence).forEach((id) => { + this.detected[url][appName].confidence[id] = app.confidence[id] + }) + }) if (this.driver.ping instanceof Function) { - this.ping(); + this.ping() } } @@ -469,204 +504,219 @@ class Wappalyzer { */ trackDetectedApps(apps, url, language) { if (!(this.driver.ping instanceof Function)) { - return; + return } - const hostname = `${url.protocol}//${url.hostname}`; + const hostname = `${url.protocol}//${url.hostname}` Object.keys(apps).forEach((appName) => { - const app = apps[appName]; + const app = apps[appName] if (this.detected[url.canonical][appName].getConfidence() >= 100) { if ( - validation.hostname.test(url.hostname) - && !validation.hostnameBlacklist.test(url.hostname) + validation.hostname.test(url.hostname) && + !validation.hostnameBlacklist.test(url.hostname) ) { if (!(hostname in this.hostnameCache)) { this.hostnameCache[hostname] = { applications: {}, - meta: {}, - }; + meta: {} + } } if (!(appName in this.hostnameCache[hostname].applications)) { this.hostnameCache[hostname].applications[appName] = { - hits: 0, - }; + hits: 0 + } } - this.hostnameCache[hostname].applications[appName].hits += 1; + this.hostnameCache[hostname].applications[appName].hits += 1 if (apps[appName].version) { - this.hostnameCache[hostname].applications[appName].version = app.version; + this.hostnameCache[hostname].applications[appName].version = + app.version } } } - }); + }) if (hostname in this.hostnameCache) { - this.hostnameCache[hostname].meta.language = language; + this.hostnameCache[hostname].meta.language = language } - this.ping(); + this.ping() } /** * Analyze URL */ analyzeUrl(app, url) { - const patterns = this.parsePatterns(app.props.url); + const patterns = this.parsePatterns(app.props.url) if (!patterns.length) { - return Promise.resolve(); + return Promise.resolve() } return asyncForEach(patterns, (pattern) => { if (pattern.regex.test(url.canonical)) { - addDetected(app, pattern, 'url', url.canonical); + addDetected(app, pattern, 'url', url.canonical) } - }); + }) } /** * Analyze HTML */ analyzeHtml(app, html) { - const patterns = this.parsePatterns(app.props.html); + const patterns = this.parsePatterns(app.props.html) if (!patterns.length) { - return Promise.resolve(); + return Promise.resolve() } return asyncForEach(patterns, (pattern) => { if (pattern.regex.test(html)) { - addDetected(app, pattern, 'html', html); + addDetected(app, pattern, 'html', html) } - }); + }) } /** * Analyze script tag */ analyzeScripts(app, scripts) { - const patterns = this.parsePatterns(app.props.script); + const patterns = this.parsePatterns(app.props.script) if (!patterns.length) { - return Promise.resolve(); + return Promise.resolve() } return asyncForEach(patterns, (pattern) => { scripts.forEach((uri) => { if (pattern.regex.test(uri)) { - addDetected(app, pattern, 'script', uri); + addDetected(app, pattern, 'script', uri) } - }); - }); + }) + }) } /** * Analyze meta tag */ analyzeMeta(app, metaTags) { - const patterns = this.parsePatterns(app.props.meta); - const promises = []; + const patterns = this.parsePatterns(app.props.meta) + const promises = [] if (!app.props.meta) { - return Promise.resolve(); + return Promise.resolve() } metaTags.forEach((match) => { Object.keys(patterns).forEach((meta) => { - const r = new RegExp(`(?:name|property)=["']${meta}["']`, 'i'); + const r = new RegExp(`(?:name|property)=["']${meta}["']`, 'i') if (r.test(match)) { - const content = match.match(/content=("|')([^"']+)("|')/i); - - promises.push(asyncForEach(patterns[meta], (pattern) => { - if (content && content.length === 4 && pattern.regex.test(content[2])) { - addDetected(app, pattern, 'meta', content[2], meta); - } - })); + const content = match.match(/content=("|')([^"']+)("|')/i) + + promises.push( + asyncForEach(patterns[meta], (pattern) => { + if ( + content && + content.length === 4 && + pattern.regex.test(content[2]) + ) { + addDetected(app, pattern, 'meta', content[2], meta) + } + }) + ) } - }); - }); + }) + }) - return Promise.all(promises); + return Promise.all(promises) } /** * Analyze response headers */ analyzeHeaders(app, headers) { - const patterns = this.parsePatterns(app.props.headers); - const promises = []; + const patterns = this.parsePatterns(app.props.headers) + const promises = [] Object.keys(patterns).forEach((headerName) => { if (typeof patterns[headerName] !== 'function') { - promises.push(asyncForEach(patterns[headerName], (pattern) => { - headerName = headerName.toLowerCase(); - - if (headerName in headers) { - headers[headerName].forEach((headerValue) => { - if (pattern.regex.test(headerValue)) { - addDetected(app, pattern, 'headers', headerValue, headerName); - } - }); - } - })); + promises.push( + asyncForEach(patterns[headerName], (pattern) => { + headerName = headerName.toLowerCase() + + if (headerName in headers) { + headers[headerName].forEach((headerValue) => { + if (pattern.regex.test(headerValue)) { + addDetected(app, pattern, 'headers', headerValue, headerName) + } + }) + } + }) + ) } - }); + }) - return promises ? Promise.all(promises) : Promise.resolve(); + return promises ? Promise.all(promises) : Promise.resolve() } /** * Analyze cookies */ analyzeCookies(app, cookies) { - const patterns = this.parsePatterns(app.props.cookies); - const promises = []; + const patterns = this.parsePatterns(app.props.cookies) + const promises = [] Object.keys(patterns).forEach((cookieName) => { if (typeof patterns[cookieName] !== 'function') { - const cookieNameLower = cookieName.toLowerCase(); + const cookieNameLower = cookieName.toLowerCase() - promises.push(asyncForEach(patterns[cookieName], (pattern) => { - const cookie = cookies.find(_cookie => _cookie.name.toLowerCase() === cookieNameLower); + promises.push( + asyncForEach(patterns[cookieName], (pattern) => { + const cookie = cookies.find( + (_cookie) => _cookie.name.toLowerCase() === cookieNameLower + ) - if (cookie && pattern.regex.test(cookie.value)) { - addDetected(app, pattern, 'cookies', cookie.value, cookieName); - } - })); + if (cookie && pattern.regex.test(cookie.value)) { + addDetected(app, pattern, 'cookies', cookie.value, cookieName) + } + }) + ) } - }); + }) - return promises ? Promise.all(promises) : Promise.resolve(); + return promises ? Promise.all(promises) : Promise.resolve() } /** * Analyze JavaScript variables */ analyzeJs(app, results) { - const promises = []; + const promises = [] Object.keys(results).forEach((string) => { if (typeof results[string] !== 'function') { - promises.push(asyncForEach(Object.keys(results[string]), (index) => { - const pattern = this.jsPatterns[app.name][string][index]; - const value = results[string][index]; + promises.push( + asyncForEach(Object.keys(results[string]), (index) => { + const pattern = this.jsPatterns[app.name][string][index] + const value = results[string][index] - if (pattern && pattern.regex.test(value)) { - addDetected(app, pattern, 'js', value, string); - } - })); + if (pattern && pattern.regex.test(value)) { + addDetected(app, pattern, 'js', value, string) + } + }) + ) } - }); + }) - return promises ? Promise.all(promises) : Promise.resolve(); + return promises ? Promise.all(promises) : Promise.resolve() } } if (typeof module === 'object') { - module.exports = Wappalyzer; + module.exports = Wappalyzer } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..57f1682cd --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1991 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/generator@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" + integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== + dependencies: + "@babel/types" "^7.9.6" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.9.5" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" + integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== + +"@babel/template@^7.8.3": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/traverse@^7.7.0": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" + integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.5", "@babel/types@^7.9.6": + version "7.9.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" + integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA== + dependencies: + "@babel/helper-validator-identifier" "^7.9.5" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@nuxtjs/eslint-config@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@nuxtjs/eslint-config/-/eslint-config-1.1.2.tgz#cde4c950014a781bcc34abbfef9c62546d8fc34c" + integrity sha512-uKBdza1/Poz32gEodQ9MSW8M9CU4RPdvEiSLX5LWyavrbjhXW9iIbzJzSDlgMhD1QfQ5WrWv1iqL3Bh/ArbIgw== + dependencies: + eslint-config-standard "^12.0.0" + eslint-plugin-import "^2.18.0" + eslint-plugin-jest "^22.10.0" + eslint-plugin-node "^9.1.0" + eslint-plugin-promise "^4.2.1" + eslint-plugin-standard "^4.0.0" + eslint-plugin-unicorn "^9.1.1" + eslint-plugin-vue "^5.2.3" + +"@nuxtjs/eslint-module@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@nuxtjs/eslint-module/-/eslint-module-1.2.0.tgz#a1d014690d505309c16ced2ded3b729cbc479306" + integrity sha512-ZVweM95atKQIqKPmrYS532SyO0/Uqi5wXc1uUiPZVy2MTVjqlC/7uHJ/XSxpvnt78kBW9z64Fxgf5pZggSNXgA== + dependencies: + consola "^2.11.3" + eslint-loader "^4.0.2" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/json-schema@^7.0.3": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== + +"@typescript-eslint/experimental-utils@^1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" + integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-scope "^4.0.0" + +"@typescript-eslint/typescript-estree@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" + integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + +acorn-jsx@^5.0.0, acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + +acorn@^6.0.2: + version "6.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +acorn@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe" + integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ== + +ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-includes@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@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" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chai@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" + +chalk@^2.0.0, chalk@^2.1.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + integrity sha1-jffHquUf02h06PjQW5GAvBGj/tc= + dependencies: + escape-string-regexp "^1.0.5" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +commander@2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +consola@^2.11.3: + version "2.12.1" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.12.1.tgz#88e9311a02cb88a7f6f9488239dd30b6ba99cbb0" + integrity sha512-aEkkju9ZcEa9y2MhzNhfmTUws/CEZZ0LKu0FxftSU3HygPfVMMIMSYyYct+xBN6XNRhsaDZjw2HAv3m2ammXSA== + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + 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@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-ast-utils@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz#3d58ba557801cfb1c941d68131ee9f8c34bd1586" + integrity sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA== + dependencies: + lodash.get "^4.4.2" + lodash.zip "^4.2.0" + +eslint-config-prettier@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-4.3.0.tgz#c55c1fcac8ce4518aeb77906984e134d9eb5a4f0" + integrity sha512-sZwhSTHVVz78+kYD3t5pCWSYEdVSBR0PXnwjDRsUs8ytIrK8PLXw+6FKp8r3Z7rx4ZszdetWlXYKOHoUrrwPlA== + dependencies: + get-stdin "^6.0.0" + +eslint-config-standard@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9" + integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ== + +eslint-import-resolver-node@^0.3.2: + version "0.3.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" + integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-4.0.2.tgz#386a1e21bcb613b3cf2d252a3b708023ccfb41ec" + integrity sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw== + dependencies: + find-cache-dir "^3.3.1" + fs-extra "^8.1.0" + loader-utils "^2.0.0" + object-hash "^2.0.3" + schema-utils "^2.6.5" + +eslint-module-utils@^2.4.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-es@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998" + integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA== + dependencies: + eslint-utils "^1.4.2" + regexpp "^2.0.1" + +eslint-plugin-import@^2.18.0: + version "2.20.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" + integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== + dependencies: + 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" + +eslint-plugin-jest@^22.10.0: + version "22.21.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.21.0.tgz#8137294645866636160487d9764224b9a43e2eb1" + integrity sha512-OaqnSS7uBgcGiqXUiEnjoqxPNKvR4JWG5mSRkzVoR6+vDwlqqp11beeql1hYs0HTbdhiwrxWLxbX0Vx7roG3Ew== + dependencies: + "@typescript-eslint/experimental-utils" "^1.13.0" + +eslint-plugin-node@^9.1.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.2.0.tgz#b1911f111002d366c5954a6d96d3cd5bf2a3036a" + integrity sha512-2abNmzAH/JpxI4gEOwd6K8wZIodK3BmHbTxz4s79OIYwwIt2gkpEXlAouJXu4H1c9ySTnRso0tsuthSOZbUMlA== + dependencies: + eslint-plugin-es "^1.4.1" + eslint-utils "^1.4.2" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-nuxt@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-nuxt/-/eslint-plugin-nuxt-0.5.2.tgz#638cdfd0fc0473d285ca848e7e30b8b8e6f59f91" + integrity sha512-kOWUSrix6h+gGTCe6He51ett065yAzXsMiteKkBo5pdjc94A3gBMBrWtRZGyZGv91P1wRcJpF8l4CWMhNm3oWg== + dependencies: + eslint-plugin-vue "^6.2.2" + semver "^7.1.3" + vue-eslint-parser "^7.0.0" + +eslint-plugin-prettier@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz#ae116a0fc0e598fdae48743a4430903de5b4e6ca" + integrity sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-promise@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" + integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== + +eslint-plugin-standard@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4" + integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ== + +eslint-plugin-unicorn@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-9.1.1.tgz#1588a0473f9a0e37cfbbcf7552065a0b0a96ce26" + integrity sha512-SHh/N54pRu5KXlS4Boa1qbWM7yTNl6VpuYJ8Qc1O3TJDr+CDUwEEdUtVlVSV/dBUE97BC8Xk0+Y5zphn21qlCA== + dependencies: + clean-regexp "^1.0.0" + eslint-ast-utils "^1.0.0" + import-modules "^1.1.0" + lodash.camelcase "^4.1.1" + lodash.defaultsdeep "^4.6.0" + lodash.kebabcase "^4.0.1" + lodash.snakecase "^4.0.1" + lodash.topairs "^4.3.0" + lodash.upperfirst "^4.2.0" + regexpp "^2.0.1" + reserved-words "^0.1.2" + safe-regex "^2.0.1" + +eslint-plugin-vue@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz#3ee7597d823b5478804b2feba9863b1b74273961" + integrity sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw== + dependencies: + vue-eslint-parser "^5.0.0" + +eslint-plugin-vue@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz#27fecd9a3a24789b0f111ecdd540a9e56198e0fe" + integrity sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ== + dependencies: + natural-compare "^1.4.0" + semver "^5.6.0" + vue-eslint-parser "^7.0.0" + +eslint-scope@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.2, eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^6.1.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@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" + +espree@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" + integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== + dependencies: + acorn "^6.0.2" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +espree@^6.1.2, espree@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-type@7.4.*: + version "7.4.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-7.4.0.tgz#2a7c94f62a0030150bb7d9b6c70cfa1d3e759c86" + integrity sha1-KnyU9ioAMBULt9m2xwz6HT51nIY= + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +glob-parent@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + 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" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + 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" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.6.tgz#643194ad4bf2712f37852e386b6998eff0db2106" + integrity sha512-cgXgkypZBcCnOgSihyeqbo6gjIaIyDqPQB7Ra4vhE9m6kigdGoQDMHjviFhRZo3IMlRy6yElosoviMs5YxZXUA== + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-1.1.0.tgz#748db79c5cc42bb9701efab424f894e72600e9dc" + integrity sha1-dI23nFzEK7lwHvq0JPiU5yYA6dw= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inquirer@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-svg@2.1.*: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.camelcase@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.defaultsdeep@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" + integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.kebabcase@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + +lodash.snakecase@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= + +lodash.topairs@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.topairs/-/lodash.topairs-4.3.0.tgz#3b6deaa37d60fb116713c46c5f17ea190ec48d64" + integrity sha1-O23qo31g+xFnE8RsXxfqGQ7EjWQ= + +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + +lodash.upperfirst@^4.2.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984= + +lodash.zip@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" + integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= + +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mocha@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== + dependencies: + browser-stdout "1.3.1" + commander "2.15.1" + debug "3.1.0" + diff "3.5.0" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.5" + he "1.1.1" + minimatch "3.0.4" + mkdirp "0.5.1" + supports-color "5.4.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +object-hash@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" + integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.values@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pathval@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^1.16.4: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +read-chunk@2.1.*: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655" + integrity sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU= + dependencies: + pify "^3.0.0" + safe-buffer "^5.1.1" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +regexp-tree@~0.1.1: + version "0.1.21" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.21.tgz#55e2246b7f7d36f1b461490942fa780299c400d7" + integrity sha512-kUUXjX4AnqnR8KRTCrayAo9PzYMRKmVoGgaz2tBuz0MF3g1ZbGebmtW0yFHfFK9CmBjQKeYIgoL22pFLBJY7sw== + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +reserved-words@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rxjs@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +schema-utils@^2.6.5: + version "2.6.6" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.6.tgz#299fe6bd4a3365dc23d99fd446caff8f1d6c330c" + integrity sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + +semver@^6.0.0, semver@^6.1.0, semver@^6.1.2: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.1.3: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" + +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-json-comments@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== + +supports-color@5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== + dependencies: + has-flag "^3.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vue-eslint-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1" + integrity sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g== + dependencies: + debug "^4.1.0" + eslint-scope "^4.0.0" + eslint-visitor-keys "^1.0.0" + espree "^4.1.0" + esquery "^1.0.1" + lodash "^4.17.11" + +vue-eslint-parser@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz#9cdbcc823e656b087507a1911732b867ac101e83" + integrity sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q== + dependencies: + debug "^4.1.1" + eslint-scope "^5.0.0" + eslint-visitor-keys "^1.1.0" + espree "^6.2.1" + esquery "^1.0.1" + lodash "^4.17.15" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1"