diff --git a/.editorconfig b/.editorconfig index 0f1786729b408ab2c4473567fcb202acfeb10bd5..5d126348471c348decba17143ce128130c9f4104 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 d262d990939507ecac847c2ac285d3671e3ed87c..8ff448efdd7f51fac1b97ad7b810a04d95d9ea50 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/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000000000000000000000000000000000..afce2edfc90cf5abaac133a9ae7627cd8a647622 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: AliasIO diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000000000000000000000000000000000..f19dfc2d448cfae180fa28b4c835c8de47ff88b4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,31 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: Bug +assignees: '' + +--- + +**Platform** +Which platform does the bug apply to? +* WebExtension (Google Chrome, Mozilla Firefox) +* NPM +* Bookmarklet +* Website + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '...' +3. Scroll down to '...' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000000000000000000000000000000000..4a3a14b55ce44ff71dd73d9dfbbe49dedd70c3cc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: Feature request +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is, e.g. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/technology-request.md b/.github/ISSUE_TEMPLATE/technology-request.md new file mode 100644 index 0000000000000000000000000000000000000000..28880b99a5af98430d350daba453ad050638a289 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/technology-request.md @@ -0,0 +1,10 @@ +--- +name: Technology request +about: Propose a technology to be added +title: '' +labels: Technology request +assignees: '' + +--- + +You may request a new technology to be added but changes of having it included are greatly improved if you submit a pull request. Please refer to the [documentation](https://docs.wappalyzer.com/dev/contributing.html#adding-a-new-application). diff --git a/src/icons/converted/.gitkeep b/.github/lock.yml similarity index 100% rename from src/icons/converted/.gitkeep rename to .github/lock.yml diff --git a/.gitignore b/.gitignore index 4c54d94c3c3de3abd6aae3e45fc6471eb2501c44..6036ee47722f3408a1e534036f4f7bf5b6718dbb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,17 @@ /build/* -/src/icons/converted/* -/node_modules -/npm-debug.log -/npm-debug.log +/src/drivers/**/apps.json +/src/drivers/**/wappalyzer.js +/src/drivers/webextension/images/icons/converted/* +node_modules package-lock.json !.gitkeep -# Junk files Thumbs.db Desktop.ini *.DS_Store +*.log ._* tags tags.* diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000000000000000000000000000000000..59639c50d5eea7ebf416ae8b509ee5c277eba75f --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "arrowParens": "always", + "singleQuote": true +} diff --git a/.travis.yml b/.travis.yml index b39d23df32ddcb0fb19c9c606d1a4415e5ec3637..dcd2f1204307fb4036c0213fd3f0e22b439d0ce2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,31 +1,42 @@ -sudo: required - services: - docker -before_install: npm install -g npm@latest -install: npm ci +language: node_js +node_js: + - 12 after_success: - sha256sum build/* > build/SHA256SUMS - cat build/SHA256SUMS -script: |- - version=$(grep '"version":' src/drivers/webextension/manifest.json | sed 's/^.*"version": "\(.*\)".*$/\1/'); ./run build $version +script: + - >- + version=$(grep '"version":' src/package.json | sed 's/^.*"version": "\(.*\)".*$/\1/') && + yarn run build $version + +env: + - secure: xc5vP+LjpNnZgMIfXUUeP3EBGhhNoDV5vTfophBliaWZrBX8POpLOFQGZ/Fcd0i+UBmSckLYW30BLSwHwjYLAZJGM12AfeiKbI1eub5tNfsosI2FZ3lNeb2nlpoIjzpsyS5fknJL0zQfkadUgxbrwDRDuaN+P6oOup3XMgHR9hkjb/QwVW2ozxU+OP4iRvcNECLP+XqnsOyq0YFshZzRMOd6fVYnJZuP6NTj24hCfymcmZJlS8Q5dSHISg68Lckaa/z3APxrMW+5/PORsHZ/U8yugNQr6Ty5J3YoaEuUoaMaUkGpaiuP26/lndynlRhNVlw8zQKfb7A09oom/UjnhyLE+9NuhKpo7f3l56OP/ubIvJzkrGt0hqwKnW2+EixURLxAOL7shtc/9gl8q2cPwEJg50siIRGJXkUEear/oqYr/EqEk1/6kq3dOfaDM0kRYAeHi8Kuf4+tyTbKQDULT3xYMi3ZxAYTd8gEMGsWca+PT/+IfFB4sHADmFmh6Y9VhI89Zrsrqa7C2BlS/ytuiAJHgrleKxyYKEFy78yG5Tb/AGi2UmGFMk8ShKRNrK8VJmrqixWttvyUr81iBI5uEP9copsXDnR5aZaFZF5vBi7PK85Ngwj6uREM+rjQadaPR49KQqUXFj0s3OXbwDXgMFIXAguqsji/nm4IuEeA8zA= deploy: - provider: releases +- provider: releases api_key: secure: mco1ycbfGXZEiBywOmM5A50Y1QPFawj4i0gdB9JDkXDvY7N2kPZyCdAeOQOMEJuetGT3HvJuTG0Ll47sithZfPqq6wx/4EeP8YQYYFIyoOlsIGi5MDR1kS5ZOqKDWGe5+x+/rUZbmuMHvgHWNSjPG8mBrp5xWmON6ETkLWfVB0c= file_glob: true file: build/* skip_cleanup: true on: - repo: AliasIO/Wappalyzer + repo: AliasIO/wappalyzer + tags: true +- provider: script + script: + - >- + version=$(grep '"version":' src/package.json | sed 's/^.*"version": "\(.*\)".*$/\1/') && + docker login -u wappalyzer -p "$DOCKER_PASSWORD" && + docker build -t wappalyzer/cli:latest -t wappalyzer/cli:$version src/drivers/npm && + docker push wappalyzer/cli + on: + repo: AliasIO/wappalyzer tags: true - -env: - - CXX=g++-4.8 notifications: slack: wappalyzer:ppXlJRMBDxrKYS9vgVxT7FuH diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index e7c9e6806b9ee3b4622d0da00588b2b86268515a..0000000000000000000000000000000000000000 --- a/Dockerfile +++ /dev/null @@ -1,33 +0,0 @@ -FROM alpine - -LABEL maintainer="elbert@alias.io" - -ENV WAPPALYZER_DIR=/opt/wappalyzer - -RUN apk update && apk add --no-cache \ - bash \ - curl \ - fontconfig \ - nodejs-npm \ - optipng \ - zip - -# Fixes PhantomJS -# https://github.com/dustinblackman/phantomized -RUN curl -Ls "https://github.com/dustinblackman/phantomized/releases/download/2.1.1a/dockerized-phantomjs.tar.gz" | tar xz -C / - -RUN apk del curl - -RUN npm i -g n npm@latest - -RUN n stable - -RUN npm i --unsafe-perm --silent -g \ - jsonlint-cli \ - svg2png-many - -RUN mkdir -p $WAPPALYZER_DIR - -WORKDIR $WAPPALYZER_DIR - -CMD [ "./bin/run" ] diff --git a/LICENSE b/LICENSE index 20d40b6bceca3a6c0237d7455ebf1820aeff3680..d19c3fad84d71aec2ffc03f05ee074ba6acb93e3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,674 +1,20 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file +Copyright 2008 Wappalyzer + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 29e837b4b20b0c32648a136a37990df65c1e4b4b..97fdd7fc3dadc5e9677eeb41c3f00c02ee270eec 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,48 @@ -# Wappalyzer [![Travis](https://travis-ci.org/AliasIO/Wappalyzer.svg?branch=master)](https://travis-ci.org/AliasIO/Wappalyzer/) [![Scrutinizer](https://scrutinizer-ci.com/g/AliasIO/Wappalyzer/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/AliasIO/Wappalyzer/?branch=master) +# Wappalyzer [![Travis](https://travis-ci.org/aliasio/wappalyzer.svg?branch=master)](https://travis-ci.org/aliasio/wappalyzer/) -[Wappalyzer](https://www.wappalyzer.com/) is a -[cross-platform](https://github.com/AliasIO/Wappalyzer/wiki/Drivers) utility that uncovers the -technologies used on websites. It detects -[content management systems](https://www.wappalyzer.com/categories/cms), -[eCommerce platforms](https://www.wappalyzer.com/categories/ecommerce), -[web servers](https://www.wappalyzer.com/categories/web-servers), -[JavaScript frameworks](https://www.wappalyzer.com/categories/javascript-frameworks), -[analytics tools](https://www.wappalyzer.com/categories/analytics) and -[many more](https://www.wappalyzer.com/applications). - -*Licensed under the [GPL](https://github.com/AliasIO/Wappalyzer/blob/master/LICENSE).* +[Wappalyzer](https://www.wappalyzer.com) identifies technologies on websites. +It detects content management systems, ecommerce platforms, JavaScript frameworks, +analytics tools and [much more](https://www.wappalyzer.com/technologies). +* [wappalyzer on NPM](https://www.npmjs.com/package/wappalyzer) +* [wappalyzer-core on NPM](https://www.npmjs.com/package/wappalyzer-core) +* [Chrome extension](https://chrome.google.com/webstore/detail/wappalyzer/gppongmhjkpfnbhagpmjfkannfbllamg) +* [Firefox add-on](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) +* [Edge extension](https://microsoftedge.microsoft.com/addons/detail/mnbndgmknlpdjdnjfmfcdjoegcckoikn) +* [Bookmarklet](https://www.wappalyzer.com/download) +* [wappalyzer/cli on Docker Hub](https://hub.docker.com/r/wappalyzer/cli/) +* [Wappalyzer REST APIs](https://www.wappalyzer.com/api/) ## Documentation -Please read the [developer documentation](https://www.wappalyzer.com/docs) to get started. +Please read the [developer documentation](https://www.wappalyzer.com/docs). + +## Quick start + +```sh +git clone https://github.com/aliasio/wappalyzer +cd wappalyzer +yarn install +yarn run link +``` + +## Usage + +### Command line + +```sh +node src/drivers/npm/cli.js https://example.com +``` + +### Chrome extension + +* Go go `about:extensions` +* Enable 'Developer mode' +* Click 'Load unpacked' +* Select `src/drivers/webextension` + +### Firefox extension + +* Go go `about:debugging#/runtime/this-firefox` +* Click 'Load Temporary Add-on' +* Select `src/drivers/webextension/manifest.json` diff --git a/bin/build b/bin/build deleted file mode 100755 index e39752ccc041588b7c2a6ba163b6793d0788e4ec..0000000000000000000000000000000000000000 --- a/bin/build +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -cd "$(dirname $0)/.." - -version="$2" - -if [[ -z "$version" ]]; then - current=$(grep '"version":' src/drivers/webextension/manifest.json | sed 's/^.*"version": "\(.*\)".*$/\1/') - - echo "No version specified. Current version is $current." - - exit 1; -fi - -set -eu - -./bin/validate - -echo "Deleting junk files..." - -find . -name ".DS_Store" -exec rm {} \; - -echo "Prettifying apps.json..." - -sed -e 's/\\\\/{{ESCAPE}}/g' src/apps.json | jsonlint-cli -ps | sed -e 's/{{ESCAPE}}/\\\\/g' > /tmp/apps.json && cat /tmp/apps.json > src/apps.json - -echo "Converting SVG icons to PNG..." - -svg2png-many -i src/icons/ -o src/icons/converted/ --width=32 --height=32 - -echo "Compressing PNG icons..." - -set +e - -optipng -quiet "src/icons/*.png" -optipng -quiet "src/icons/converted/*.png" - -set -e - -# NPM -sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$version\"/" src/drivers/npm/package.json - -# WebExtension -echo "Building WebExtension..." - -webextension_dir=src/drivers/webextension - -pushd $webextension_dir > /dev/null - -sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$version\"/" manifest.json - -zip -qr ../../../build/wappalyzer_webextension.zip . \ - -x images/icon_44.png \ - -x images/icon_50.png \ - -x images/icon_150.png \ - -x js/ms_\*.js \ - -x \*.log \ - -x \*.lock \ - -x \*.gitignore \ - -x \*.gitkeep \ - -x \*.js.map \ - -x \*.min.js \ - -x \*.spec.js \ - -x \*.yarn-integrity \ - -x \*package.json \ - -x \*LICENSE \ - -x \*README.md - -popd > /dev/null - -echo "Done (v$version)." diff --git a/bin/build.js b/bin/build.js new file mode 100755 index 0000000000000000000000000000000000000000..c0c68c1aeebdbc4504233c18fc00d0d00b9f100f --- /dev/null +++ b/bin/build.js @@ -0,0 +1,33 @@ +const fs = require('fs') +const Zip = require('adm-zip') + +const currentVersion = JSON.parse(fs.readFileSync('./src/package.json')).version + +const version = process.argv[2] + +if (!version) { + // eslint-disable-next-line no-console + console.error( + `No version number specified. Current version is ${currentVersion}.` + ) + + process.exit(1) +} + +;[ + './src/package.json', + './src/drivers/npm/package.json', + './src/drivers/webextension/manifest.json' +].forEach((file) => { + const json = JSON.parse(fs.readFileSync(file)) + + json.version = version + + fs.writeFileSync(file, JSON.stringify(json, null, 2)) +}) + +const zip = new Zip() + +zip.addLocalFolder('./src/drivers/webextension', '') + +zip.writeZip('./build/webextension.zip') diff --git a/bin/dev b/bin/dev deleted file mode 100755 index 1b58c63d77a28d50e886b084e3034783e3318539..0000000000000000000000000000000000000000 --- a/bin/dev +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -cd "$(dirname $0)/.." - -yarn run dev diff --git a/bin/help b/bin/help deleted file mode 100755 index dc2fd3e8dc95ee4efc3c747fffa4367cb5b06abf..0000000000000000000000000000000000000000 --- a/bin/help +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -cat << 'EOF' -usage: ./run [] - -The following commands are available: - build Package drivers - help This help text - links Create symlinks to shared files in each driver - validate Validate apps.json -EOF diff --git a/bin/link.js b/bin/link.js new file mode 100755 index 0000000000000000000000000000000000000000..f59d208030b07ff041f192f5fe587334fd6bfd24 --- /dev/null +++ b/bin/link.js @@ -0,0 +1,17 @@ +const fs = require('fs') + +const link = (src, dest) => { + if (fs.existsSync(dest)) { + fs.unlinkSync(dest) + } + + fs.linkSync(src, dest) +} + +// WebExtension +link('./src/apps.json', './src/drivers/webextension/apps.json') +link('./src/wappalyzer.js', './src/drivers/webextension/js/wappalyzer.js') + +// NPM +link('./src/apps.json', './src/drivers/npm/apps.json') +link('./src/wappalyzer.js', './src/drivers/npm/wappalyzer.js') diff --git a/bin/links b/bin/links deleted file mode 100755 index 3bbf1dc9f1838f7607286c3ef30839eee0516c19..0000000000000000000000000000000000000000 --- a/bin/links +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -cd "$(dirname $0)/../src" - -echo "Creating links..." - -ln -nf apps.json drivers/npm -ln -nf wappalyzer.js drivers/npm - -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/run b/bin/run deleted file mode 100755 index f7a29c820384b3a338d84e4b92a0b47d412bdbef..0000000000000000000000000000000000000000 --- a/bin/run +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -cd "$(dirname $0)" - -if [[ -f "$1" ]]; then - ./$1 $@ -else - ./help - - exit 1 -fi diff --git a/bin/validate b/bin/validate deleted file mode 100755 index 2c60e5b9034dc68f37a20097fca445ae8fe45778..0000000000000000000000000000000000000000 --- a/bin/validate +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -cd "$(dirname $0)/.." - -set -eu - -echo "Validating apps.json..." - -jsonlint-cli -s schema.json src/apps.json - -echo "Validating regular expressions..." - -./bin/validate-regex - -echo "Validating icons..." - -./bin/validate-icons - -echo "Running tests..." - -npm run test diff --git a/bin/validate-icons b/bin/validate-icons deleted file mode 100755 index e64efac02f8160e3c398644b1240814cfb9f0ae7..0000000000000000000000000000000000000000 --- a/bin/validate-icons +++ /dev/null @@ -1,60 +0,0 @@ -#!/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'), - - basePath = 'src/icons/', - - 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)); -} - - -// 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); - } - } - }); - diff --git a/bin/validate-regex b/bin/validate-regex deleted file mode 100755 index 380ffdb1569d22414e76f3ac0dd48b4abb08147b..0000000000000000000000000000000000000000 --- a/bin/validate-regex +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env node - -var - app, - json = require('../src/apps.json'); - -for ( app in json.apps ) { - ['headers', 'html', 'env', 'meta', 'script'].forEach(function(type) { - var - key, - patterns = json.apps[app][type]; - - if ( patterns !== undefined ) { - patterns = typeof patterns === 'string' ? [patterns] : patterns; - - if ( !( patterns instanceof Array ) ) { - patterns = []; - - for ( key in json.apps[app][type] ) { - patterns.push(json.apps[app][type][key]); - } - } - - patterns.forEach(function(pattern) { - var - attrs = pattern.split('\\;'), - regex = '/' + attrs.shift().replace('/', '\/') + '/', - version = attrs.find( function (attr){ - return attr.indexOf('version:')===0; - } ), - amountOfCaptureGroups, - captureGroupsNeeded, - amountOfCaptureGroupsNeeded, - highestBackReference; - - //Check if the pattern is a valid RegExp - //Note: unlike when used in Wappalyzer, the modifier i isn't added here - new RegExp(regex); - - //Actual amount of capture groups - amountOfCaptureGroups = ''.match(new RegExp('(?:'+pattern+')?')).length - 1; - - //Capture groups of which the result is used - captureGroupsNeeded = version ? (version.match(/\\\d/g) || []).filter( function(value, index, self){ - return self.indexOf(value) === index; - }).map( function(value){//Because Math.max needs the integers only - return parseInt(value.charAt(1), 10);//Will only work if backreferences cannot be any longer than a single digit - }) : []; - - //Amount of capture groups needed - amountOfCaptureGroupsNeeded = captureGroupsNeeded.length; - - //Highest back reference number used - highestBackReference = Math.max.apply(null, captureGroupsNeeded); - - //Report error - if(amountOfCaptureGroups > amountOfCaptureGroupsNeeded) { - throw new Error('The pattern uses more capture groups than needed. Use non-capturing groups where appropriate.\n' + app + ': ' + type + ': ' + pattern); - }else if(amountOfCaptureGroups < amountOfCaptureGroupsNeeded){ - throw new Error('The version string references more capture groups than there are in the pattern! Remove any incorrect back references from the version string and/or add the missing capture groups to the pattern.\n' + app + ': ' + type + ': ' + pattern); - } else if(highestBackReference > amountOfCaptureGroups){ - throw new Error('The version string references one or more capture groups whose index is higher than the amount of capture groups in the pattern. Please use the correct index instead of \\\\'+highestBackReference+'.\n' + app + ': ' + type + ': ' + pattern); - } - - if ( /^\/(?:\^\$|\.\+|\.\*)\/$/.test(regex) ) { - throw new Error('Pattern should be replaced with empty string.\n' + app + ': ' + type + ': ' + pattern); - } - - if ( type === 'html' ) { - if ( /\.(?:\+|\*)/.test(regex) ) { - throw new Error('Avoid ".+" and ".*" in HTML patterns. Consider using "[^>]+" or "[^<]+" instead.\n' + app + ': ' + type + ': ' + pattern); - } - - if ( !/[<>]/.test(regex) ) { - throw new Error('HTML patterns must contain "<" or ">".\n' + app + ': ' + type + ': ' + pattern); - } - } - - //Warn about suspicious periods (".") in patterns which should probably have been escaped - // Periods inside character classes (such as [\d.]) don't count as wildcard, so we'll replace - // the character classes in the pattern with "_". (We could remove them entirely, but then - // we'd have to deal with leftover * and + characters; for example, removing the character - // class entirely from the pattern /test.[a-z]+/ would yield the pattern /test.+/, which - // would mean not detecting the un-escaped ".". Replacing the character class with an - // underscore instead gives /test._+/, which WOULD yield a warning about the unescaped ".".) - if ( /(?:^\/|[^\\])\.(?:[^*+]|\/$)/.test(regex.replace(/([^\\]|^)\[[^\]]+\]/g,'$1_') ) ) { - console.warn('Suspicious period (".") in pattern. Should this have been escaped?\n\tApp: ' + app + '\n\tPattern: ' + type + ': ' + pattern); - } - - }); - } - }); - - if ( !/^https?:\/\//i.test(json.apps[app].website) ) { - throw new Error('Invalid website URL\n' + app + ': ' + json.apps[app].website); - } -} diff --git a/bin/validate.js b/bin/validate.js new file mode 100755 index 0000000000000000000000000000000000000000..f28ecb17acb9089810f1160260a257e739d98e1f --- /dev/null +++ b/bin/validate.js @@ -0,0 +1,176 @@ +const fs = require('fs') + +const iconPath = './src/drivers/webextension/images/icons' + +const { apps: technologies, categories } = JSON.parse( + fs.readFileSync('./src/apps.json') +) + +try { + Object.keys(technologies).forEach((name) => { + const technology = technologies[name] + + // Validate regular expressions + ;['url', 'html', 'meta', 'headers', 'cookies', 'script', 'js'].forEach( + (type) => { + if (technology[type]) { + const keyed = + typeof technology[type] === 'string' || + Array.isArray(technology[type]) + ? { _: technology[type] } + : technology[type] + + Object.keys(keyed).forEach((key) => { + const patterns = Array.isArray(keyed[key]) + ? keyed[key] + : [keyed[key]] + + patterns.forEach((pattern, index) => { + const id = `${name}: ${type}[${key === '_' ? `${index}` : key}]` + + const [regex, ...flags] = pattern.split('\\;') + + let maxGroups = 0 + + flags.forEach((flag) => { + const [key, value] = flag.split(':') + + if (key === 'version') { + const refs = value.match(/\\(\d+)/g) + + if (refs) { + maxGroups = refs.reduce((max, ref) => + Math.max(max, parseInt(refs[1] || 0)) + ) + } + } else if (key === 'confidence') { + if ( + !/^\d+$/.test(value) || + parseInt(value, 10) < 0 || + parseInt(value, 10) > 99 + ) { + throw new Error( + `Confidence value must a number between 0 and 99: ${value} (${id})` + ) + } + } else { + throw new Error(`Invalid flag: ${key} (${id})`) + } + }) + + // Validate regular expression + try { + // eslint-disable-next-line no-new + new RegExp(regex) + } catch (error) { + throw new Error(`${error.message} (${id})`) + } + + // Count capture groups + const groups = new RegExp(`${regex}|`).exec('').length - 1 + + if (groups > maxGroups) { + throw new Error( + `Too many non-capturing groups, expected ${maxGroups}: ${regex} (${id})` + ) + } + + if (type === 'html' && !/[<>]/.test(regex)) { + throw new Error( + `HTML pattern must include < or >: ${regex} (${id})` + ) + } + }) + }) + } + } + ) + + // Validate categories + technology.cats.forEach((id) => { + if (!categories[id]) { + throw new Error(`No such category: ${id} (${name})`) + } + }) + + // Validate icons + if (technology.icon && !fs.existsSync(`${iconPath}/${technology.icon}`)) { + throw new Error(`No such icon: ${technology.icon} (${name})`) + } + + // Validate website URLs + try { + // eslint-disable-next-line no-new + const { protocol } = new URL(technology.website) + + if (protocol !== 'http:' && protocol !== 'https:') { + throw new Error('Invalid protocol') + } + } catch (error) { + throw new Error(`Invalid website URL: ${technology.website} (${name})`) + } + + // Validate implies and excludes + const { implies, excludes } = technology + + if (implies) { + ;(Array.isArray(implies) ? implies : [implies]).forEach((implied) => { + const [_name, ...flags] = implied.split('\\;') + + const id = `${name}: implies[${implied}]` + + if (!technologies[_name]) { + throw new Error(`Implied technology does not exist: ${_name} (${id})`) + } + + flags.forEach((flag) => { + const [key, value] = flag.split(':') + + if (key === 'confidence') { + if ( + !/^\d+$/.test(value) || + parseInt(value, 10) < 0 || + parseInt(value, 10) > 99 + ) { + throw new Error( + `Confidence value must a number between 0 and 99: ${value} (${id})` + ) + } + } else { + throw new Error(`Invalid flag: ${key} (${id})`) + } + }) + }) + } + + if (excludes) { + ;(Array.isArray(excludes) ? excludes : [excludes]).forEach((excluded) => { + const id = `${name}: excludes[${excluded}]` + + if (!technologies[excluded]) { + throw new Error( + `Excluded technology does not exist: ${excluded} (${id})` + ) + } + }) + } + }) + + // Validate icons + fs.readdirSync(iconPath).forEach((file) => { + const filePath = `${iconPath}/${file}` + + if (fs.statSync(filePath).isFile() && !file.startsWith('.')) { + if (!/^(png|svg)$/i.test(file.split('.').pop())) { + throw new Error(`Incorrect file type, expected PNG or SVG: ${filePath}`) + } + + if (!Object.values(technologies).some(({ icon }) => icon === file)) { + throw new Error(`Extraneous file: ${filePath}}`) + } + } + }) +} catch (error) { + // eslint-disable-next-line no-console + console.error(error.message) +} diff --git a/issue_template.md b/issue_template.md deleted file mode 100644 index 4e55ba0c4283947645a328db27cebb8753bbcf81..0000000000000000000000000000000000000000 --- a/issue_template.md +++ /dev/null @@ -1,16 +0,0 @@ - - -**Do you want to request a *feature*, a *new application detection* or report a *bug*?** - -**Is your issue about WebExtension driver (Chrome & Firefox), the website, the NPM driver or the bookmarklet ?** - -**What is the current behavior ?** - -**If the current behavior is a bug, please provide the steps to reproduce and if possible a demo of the problem.** - -**What is the expected behavior ?** - -**Which versions of Wappalyzer, and which browser / OS are affected by this issue ? Did this work in previous versions ?** diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json deleted file mode 100644 index 221001f3199096bf25d9b144551c28436b12d514..0000000000000000000000000000000000000000 --- 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 e7bee59308d77fab7597655aeafde54c91609171..1fb93d26bbbe4f4759e987623613bfc5171a8b92 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,27 @@ { "dependencies": { - "file-type": "7.4.*", - "is-svg": "2.1.*", - "read-chunk": "2.1.*" + "@prantlf/jsonlint": "^10.2.0", + "adm-zip": "^0.4.14", + "convert-svg-to-png": "^0.5.0", + "languagedetect": "^2.0.0" }, "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", + "eslint": "^6.1.0", + "eslint-config-prettier": "^4.1.0", + "eslint-plugin-nuxt": "^0.5.2", + "eslint-plugin-prettier": "^3.1.3", + "prettier": "^1.16.4" }, "scripts": { - "test": "mocha -R spec src", - "lint": "eslint src", - "lint:fix": "eslint src --fix" + "link": "node ./bin/link.js", + "lint": "eslint src/**/*.js", + "validate": "yarn run lint && jsonlint -qV ./schema.json ./src/apps.json && node ./bin/validate.js", + "convert": "cd ./src/drivers/webextension/images/icons ; cp *.svg converted ; cd converted ; convert-svg-to-png *.svg --width 32 --height 32 ; rm *.svg", + "prettify": "jsonlint -si --trim-trailing-commas --enforce-double-quotes ./src/apps.json", + "build": "yarn run link && yarn run validate && yarn run prettify && yarn run convert && node ./bin/build.js", + "build:safari": "xcrun safari-web-extension-converter --swift --project-location build --force src/drivers/webextension" } } diff --git a/patches/zombie-vm-timeout.patch b/patches/zombie-vm-timeout.patch deleted file mode 100644 index 27313611a8782ff53541a22dfecb9d6279b30883..0000000000000000000000000000000000000000 --- a/patches/zombie-vm-timeout.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- src/drivers/npm/node_modules/zombie/lib/document.js -+++ src/drivers/npm/node_modules/zombie/lib/document.js -@@ -247,7 +247,7 @@ function setupWindow(window, args) { - browser._windowInScope = window; - let result; - if (typeof code == 'buffer' || code instanceof Buffer) code = code.toString(); -- if (typeof code === 'string' || code instanceof String) result = VM.runInContext(code, context, { filename });else if (code) result = code.call(window); -+ if (typeof code === 'string' || code instanceof String) result = VM.runInContext(code, context, { filename, timeout: 1000 });else if (code) result = code.call(window); - browser.emit('evaluated', code, result, filename); - return result; - } catch (error) { diff --git a/run b/run deleted file mode 100755 index 06556bb07c18ec92ef06e1271b8f8a581147cb89..0000000000000000000000000000000000000000 --- a/run +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -cd "$(dirname $0)" - -if [[ -z "$(which docker)" ]]; then - echo "Please install Docker from https://www.docker.com" - - exit 1 -fi - -cmd="docker run --rm -v "$(pwd):/opt/wappalyzer" -it wappalyzer/dev" - -$cmd sh -c "\ - npm i; \ - npm shrinkwrap; \ - cd src/drivers/webextension; \ - npm i; \ - npm shrinkwrap; \ - cd ../npm; \ - npm i; \ - npm shrinkwrap" - -$cmd sh -c "cat patches/*.patch | patch -p0" - -$cmd ./bin/run links -$cmd ./bin/run $@ diff --git a/schema.json b/schema.json index 1d4ddb67d4cc9ea0cb9e382103b13d417c6b2d71..9160c3e8382366217017197af6f21074cf65c86f 100644 --- a/schema.json +++ b/schema.json @@ -1,19 +1,25 @@ { - "title": "Wappalyzer Schema", + "title": "Wappalyzer schema", + "definitions": { + "non-empty-non-blank-string": { + "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,86 +33,141 @@ }, "apps": { "type": "object", - "required": true, "additionalProperties": { "additionalProperties": false, + "required": ["cats","website"], "properties": { + "description": { + "type": "string", + "pattern": "^.{0,255}$" + }, "cats": { "type": "array", "items": { "type": "number" }, - "required": true + "minItems": 1 + }, + "cpe": { + "$ref": "#/definitions/non-empty-non-blank-string" }, "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-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] + }, + "robots": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] }, "excludes": { - "type": [ - "string", - "array" - ], - "items": { - "type": "string" - } + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] }, "implies": { - "type": [ - "string", - "array" - ], - "items": { - "type": "string" - } + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/definitions/non-empty-non-blank-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] }, "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-string" + } + }, + { + "$ref": "#/definitions/non-empty-non-blank-string" + } + ] }, "url": { - "type": "string" + "$ref": "#/definitions/non-empty-non-blank-string" }, "website": { - "type": "string", - "required": true + "$ref": "#/definitions/non-empty-non-blank-string" }, "icon": { - "type": "string" + "$ref": "#/definitions/non-empty-non-blank-string" } } } diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000000000000000000000000000000000000..bf37bfeabbf7b9cd0b859d15b44e65edcf73d5d9 --- /dev/null +++ b/src/README.md @@ -0,0 +1,40 @@ +# Wappalyzer core + +[Wappalyzer](https://www.wappalyzer.com/) indentifies technologies on websites. + +## Installation + +```shell +$ npm i wappalyzer-core +``` + +## Usage + +```javascript +#!/usr/bin/env node + +const fs = require('fs') +const Wappalyzer = require('./wappalyzer') + +// See https://www.wappalyzer.com/docs/dev/specification or use +// https://raw.githubusercontent.com/AliasIO/wappalyzer/master/src/apps.json +const { apps: technologies, categories } = JSON.parse( + fs.readFileSync('./apps.json') +) + +Wappalyzer.setTechnologies(technologies) +Wappalyzer.setCategories(categories) + +const detections = Wappalyzer.analyze({ + url: 'https://example.github.io/', + meta: { generator: ['WordPress'] }, + headers: { server: ['Nginx'] }, + scripts: ['jquery-3.0.0.js'], + cookies: { awselb: [''] }, + html: '
' +}) + +const results = Wappalyzer.resolve(detections) + +console.log(results) +``` diff --git a/src/apps.json b/src/apps.json index 9bfc6c0b6819824efd7fe9da94bc88ceff17b5e6..7e433ee5dd3b98925b3d20fc693ac9ba4c8d8e34 100644 --- a/src/apps.json +++ b/src/apps.json @@ -3,7 +3,8 @@ "apps": { "1C-Bitrix": { "cats": [ - 1 + 1, + 6 ], "headers": { "Set-Cookie": "BITRIX_", @@ -15,14 +16,6 @@ "script": "1c-bitrix", "website": "http://www.1c-bitrix.ru" }, - "91App": { - "cats": [ - 6 - ], - "icon": "91app.png", - "script": "https\\:\\/\\/track\\.91app\\.io\\/track\\.js\\?", - "website": "https://www.91app.com/" - }, "3dCart": { "cats": [ 1, @@ -38,6 +31,24 @@ "script": "(?:twlh(?:track)?\\.asp|3d_upsell\\.js)", "website": "http://www.3dcart.com" }, + "91App": { + "cats": [ + 6 + ], + "icon": "91app.png", + "script": "https\\:\\/\\/track\\.91app\\.io\\/track\\.js\\?", + "website": "https://www.91app.com/" + }, + "@sulu/web": { + "cats": [ + 59 + ], + "icon": "Sulu.svg", + "js": { + "web.startComponents": "" + }, + "website": "https://github.com/sulu/web-js" + }, "A-Frame": { "cats": [ 25 @@ -64,10 +75,45 @@ "icon": "ebis.png", "website": "http://www.ebis.ne.jp" }, + "ADPLAN": { + "cats": [ + 10 + ], + "icon": "ADPLAN.png", + "script": [ + "^https?://[^.]+\\.adplan7\\.com/\\;version:7", + "^https?://(?!o\\.)\\w+\\.advg\\.jp/" + ], + "website": "https://www.adplan7.com/" + }, + "AMP": { + "cats": [ + 12 + ], + "html": [ + "]* (?:amp|⚡)[^-]", + "]* (?:amp|⚡)[^-]", - "icon": "Accelerated-Mobile-Pages.svg", - "website": "https://www.amp.dev" - }, - "AMP Plugin": { - "cats": [ - 1, - 5 - ], - "icon": "Accelerated-Mobile-Pages.svg", - "implies": [ - "WordPress" - ], - "meta": { - "generator": "^AMP Plugin v(\\d+\\.\\d+.*)$\\;version:\\1" - }, - "website": "https://amp-wp.org" - }, - "Arc Publishing": { - "cats": [ - 1 - ], - "html": "
]*id=\"pb-root\"", - "js": { - "Fusion.arcSite": "" - }, - "icon": "Arc-Publishing.svg", - "website": "https://www.arcpublishing.com/" - }, - "Azure": { + "AccessiBe": { "cats": [ - 62 + 68 ], - "headers": { - "azure-regionname": "", - "azure-sitename": "", - "azure-slotname": "", - "azure-version": "" - }, - "cookies": { - "ARRAffinity": "", - "TiPMix": "" - }, - "icon": "azure.svg", - "website": "https://azure.microsoft.com" - }, - "Azure CDN": { - "cats": [ - 31 - ], - "headers": { - "server": "^(?:ECAcc|ECS|ECD)", - "X-EC-Debug": "" - }, - "icon": "azure.svg", - "website": "https://azure.microsoft.com/en-us/services/cdn/" + "icon": "Accessibe.png", + "script": "acsbap\\.com/.*/acsb\\.js", + "website": "https://accessibe.com/" }, "Acquia Cloud": { "cats": [ @@ -210,12 +204,12 @@ "implies": "Gemius", "js": { "ado.master": "", - "ado.slave": "", - "ado.placement": "" + "ado.placement": "", + "ado.slave": "" }, "script": [ "adocean\\.pl/files/js/ado\\.js", - "adocean\\.pl\\;confidence:0.8" + "adocean\\.pl\\;confidence:80" ], "website": "https://adocean-global.com" }, @@ -243,6 +237,14 @@ "script": "(?:a|s)\\.adroll\\.com", "website": "http://adroll.com" }, + "Adally": { + "cats": [ + 68 + ], + "icon": "Adally.png", + "script": "cloudfront\\.net/.*/adally\\.js", + "website": "https://adally.com/" + }, "Adcash": { "cats": [ 36 @@ -315,10 +317,33 @@ "script": "[^a-z]adnegah.*\\.js$", "website": "https://Adnegah.net" }, + "Adobe Analytics": { + "cats": [ + 10, + 61 + ], + "js": { + "s_c_il.0._c": "s_c", + "s_c_il.1._c": "s_c", + "s_c_il.2._c": "s_c", + "s_c_il.3._c": "s_c", + "s_c_il.4._c": "s_c", + "s_c_il.5._c": "s_c", + "s_c_il.0.constructor.name": "AppMeasurement", + "s_c_il.1.constructor.name": "AppMeasurement", + "s_c_il.2.constructor.name": "AppMeasurement", + "s_c_il.3.constructor.name": "AppMeasurement", + "s_c_il.4.constructor.name": "AppMeasurement", + "s_c_il.5.constructor.name": "AppMeasurement" + }, + "icon": "Adobe Analytics.svg", + "website": "https://www.adobe.com/analytics/adobe-analytics.html" + }, "Adobe ColdFusion": { "cats": [ 18 ], + "cpe": "cpe:/a:adobe:coldfusion", "headers": { "Cookie": "CFTOKEN=" }, @@ -336,14 +361,17 @@ "cats": [ 42 ], - "script": "//assets.adobedtm.com/", - "icon": "adobedmt.png", + "icon": "adobedtm.png", + "js": { + "_satellite": "" + }, "website": "https://marketing.adobe.com/resources/help/en_US/dtm/c_overview.html" }, "Adobe Experience Manager": { "cats": [ 1 ], + "cpe": "cpe:/a:adobe:experience_manager", "html": [ "
]+data-component-path=\"[^\"+]jcr:", @@ -354,34 +382,42 @@ "script": [ "/etc/designs/", "/etc/clientlibs/", - "/etc.clientlibs/" + "/etc\\.clientlibs/" ], + "icon": "Adobe.svg", "website": "https://www.adobe.com/marketing/experience-manager.html" }, - "Adobe GoLive": { + "Adobe Experience Platform Identity Service": { "cats": [ - 20 + 61 ], - "icon": "Adobe GoLive.png", - "meta": { - "generator": "Adobe GoLive(?:\\s([\\d.]+))?\\;version:\\1" + "js": { + "s_c_il.0._c": "Visitor", + "s_c_il.1._c": "Visitor", + "s_c_il.2._c": "Visitor", + "s_c_il.3._c": "Visitor", + "s_c_il.4._c": "Visitor", + "s_c_il.5._c": "Visitor" }, - "website": "http://www.adobe.com/products/golive" + "icon": "Adobe.svg", + "website": "https://docs.adobe.com/content/help/en/id-service/using/home.html" }, - "Adobe Muse": { + "Adobe GoLive": { "cats": [ 20 ], - "icon": "Adobe Muse.svg", + "cpe": "cpe:/a:adobe:golive", + "icon": "Adobe GoLive.png", "meta": { - "generator": "^Muse(?:$| ?/?(\\d[\\d.]+))\\;version:\\1" + "generator": "Adobe GoLive(?:\\s([\\d.]+))?\\;version:\\1" }, - "website": "http://muse.adobe.com" + "website": "http://www.adobe.com/products/golive" }, "Adobe RoboHelp": { "cats": [ 4 ], + "cpe": "cpe:/a:adobe:robohelp", "icon": "Adobe RoboHelp.svg", "js": { "gbWhLang": "", @@ -396,16 +432,28 @@ "script": "(?:wh(?:utils|ver|proxy|lang|topic|msg)|ehlpdhtm)\\.js", "website": "http://adobe.com/products/robohelp.html" }, - "ADPLAN": { + "Adobe Target": { "cats": [ - 10 + 32, + 61 ], - "icon": "ADPLAN.png", - "script": [ - "^https?://[^.]+\\.adplan7\\.com/\\;version:7", - "^https?://(?!o\\.)\\w+\\.advg\\.jp/" + "js": { + "adobe.target": "", + "adobe.target.VERSION": "^(.+)$\\;version:\\1" + }, + "icon": "Adobe.svg", + "website": "https://www.adobe.com/marketing/target.html" + }, + "AdonisJS": { + "cats": [ + 18 ], - "website": "https://www.adplan7.com/" + "cookies": { + "cookie_name": "adonis-session" + }, + "icon": "AdonisJS.png", + "implies": "Node.js", + "website": "https://adonisjs.com" }, "Advanced Web Stats": { "cats": [ @@ -431,9 +479,9 @@ "cats": [ 36 ], + "html": "
]+?action=\"[^\"]*airform\\.io[^>]+?>" + ], + "icon": "Airform.svg", + "website": "https://airform.io" + }, "Akamai": { "cats": [ 31 @@ -536,6 +606,18 @@ "icon": "akamai.svg", "website": "http://akamai.com" }, + "Akamai Bot Manager": { + "cats": [ + 16 + ], + "cookies": { + "ak_bmsc": "", + "bm_sv": "", + "bm_sz": "" + }, + "icon": "akamai.svg", + "website": "http://akamai.com/bot-manager" + }, "Akaunting": { "cats": [ 55 @@ -556,17 +638,18 @@ 18, 22 ], + "cpe": "cpe:/a:lightbend:akka_http", "headers": { "Server": "akka-http(?:/([\\d.]+))?\\;version:\\1" }, "icon": "akka-http.png", "website": "http://akka.io" }, - "Algolia Realtime Search": { + "Algolia": { "cats": [ 29 ], - "icon": "Algolia Realtime Search.svg", + "icon": "Algolia.svg", "js": { "AlgoliaSearch": "", "algoliasearch.version": "^(.+)$\\;version:\\1" @@ -577,6 +660,7 @@ "cats": [ 54 ], + "cpe": "cpe:/a:semperfiwebdesign:all_in_one_seo_pack", "html": "", "]+(?:typolight|contao)\\.css" @@ -2246,6 +2638,7 @@ "cats": [ 1 ], + "cpe": "cpe:/a:contenido:contendio", "icon": "Contenido.png", "implies": "PHP", "meta": { @@ -2295,10 +2688,45 @@ "script": "conversionlab\\.trackset\\.com/track/tsend\\.js", "website": "http://www.trackset.it/conversionlab" }, + "Cookie Script": { + "cats": [ + 67 + ], + "icon": "CookieScript.png", + "script": "//cookie-script\\.com/s/", + "website": "https://cookie-script.com/" + }, + "CookieHub": { + "cats": [ + 67 + ], + "icon": "CookieHub.png", + "script": [ + "cookiehub\\.net/.*\\.js" + ], + "website": "https://www.cookiehub.com" + }, + "CookieYes": { + "cats": [ + 67 + ], + "icon": "cookieyes.png", + "script": "app\\.cookieyes\\.com/client_data/", + "website": "https://www.cookieyes.com/" + }, + "Cookiebot": { + "cats": [ + 67 + ], + "icon": "Cookiebot.svg", + "script": "consent\\.cookiebot\\.com", + "website": "http://www.cookiebot.com" + }, "Coppermine": { "cats": [ 7 ], + "cpe": "cpe:/a:coppermine-gallery:coppermine_photo_gallery", "html": "", + "icon": "Docker.svg", + "website": "https://www.docker.com/" }, "Docusaurus": { "cats": [ @@ -2798,19 +3273,11 @@ }, "website": "https://docusaurus.io/" }, - "Docker": { - "cats": [ - 60 - ], - "icon": "Docker.svg", - "implies": "Linux", - "html": "", - "website": "https://www.docker.com/" - }, "Dojo": { "cats": [ 59 ], + "cpe": "cpe:/a:dojotoolkit:dojo", "icon": "Dojo.png", "js": { "dojo": "", @@ -2846,6 +3313,7 @@ "cookies": { "DokuWiki": "" }, + "cpe": "cpe:/a:dokuwiki:dokuwiki", "html": [ "]+id=\"dokuwiki__>", "]+href=\"#dokuwiki__" @@ -2861,6 +3329,7 @@ "cats": [ 1 ], + "cpe": "cpe:/a:dotclear:dotclear", "headers": { "X-Dotclear-Static-Cache": "" }, @@ -2918,6 +3387,7 @@ "cats": [ 4 ], + "cpe": "cpe:/a:doxygen:doxygen", "html": "(?:", - "icon": "InProces.png", - "script": "brein/inproces/website/websitefuncties\\.js", - "website": "http://www.brein.nl/oplossing/product/website" - }, "Incapsula": { "cats": [ 31 @@ -4881,16 +5634,6 @@ "icon": "Incapsula.png", "website": "http://www.incapsula.com" }, - "PageCDN": { - "cats": [ - 31 - ], - "headers": { - "X-CDN": "PageCDN" - }, - "icon": "PageCDN.png", - "website": "https://pagecdn.com" - }, "Includable": { "cats": [ 18 @@ -4905,6 +5648,7 @@ "cats": [ 1 ], + "cpe": "cpe:/a:indexhibit:indexhibit", "html": "<(?:link|a href) [^>]+ndxz-studio", "implies": [ "PHP", @@ -4951,6 +5695,7 @@ "cats": [ 32 ], + "cpe": "cpe:/a:infusionsoft_project:infusionsoft", "html": [ "]*name=\"infusionsoft_version\" [^>]*value=\"([^>]*)\" [^>]*\\/>\\;version:\\1", "]*value=\"([^>]*)\" [^>]*name=\"infusionsoft_version\" [^>]*\\/>\\;version:\\1" @@ -4997,6 +5742,7 @@ "cookies": { "InstantCMS[logdate]": "" }, + "cpe": "cpe:/a:instantcms:instantcms", "icon": "InstantCMS.png", "implies": "PHP", "meta": { @@ -5009,6 +5755,7 @@ 22, 46 ], + "cpe": "cpe:/a:intel:active_management_technology", "headers": { "Server": "Intel\\(R\\) Active Management Technology(?: ([\\d.]+))?\\;version:\\1" }, @@ -5027,17 +5774,26 @@ "cats": [ 10 ], - "icon": "Intercom.png", + "icon": "Intercom.svg", "js": { "Intercom": "" }, "script": "(?:api\\.intercom\\.io/api|static\\.intercomcdn\\.com/intercom\\.v1)", "website": "https://www.intercom.com" }, + "Intercom Articles": { + "cats": [ + 4 + ], + "html": "]+>We run on Intercom", + "icon": "Intercom.svg", + "website": "https://www.intercom.com/articles" + }, "Intershop": { "cats": [ 6 ], + "html": "]*href=\"https://www\\.irroba\\.com\\.br", + "icon": "irroba.svg", + "website": "https://www.irroba.com.br/" + }, + "Iubenda": { + "cats": [ + 67 + ], + "icon": "iubenda.png", + "script": [ + "iubenda\\.com/cookie-solution/confs/js/" + ], + "website": "https://www.iubenda.com/" + }, + "J2Store": { + "cats": [ + 6 + ], + "icon": "j2store.png", + "implies": "Joomla", + "js": { + "j2storeURL": "" + }, + "website": "https://www.j2store.org/" + }, "JAlbum": { "cats": [ 7 @@ -5135,7 +5908,7 @@ "js": { "JSChart": "" }, - "script": "jscharts.*\\.js", + "script": "jscharts.{0,32}\\.js", "website": "http://www.jscharts.com" }, "JSEcoin": { @@ -5194,7 +5967,7 @@ 18 ], "headers": { - "X-Powered-By": "Servlet(?:.([\\d.]+))?\\;version:\\1" + "X-Powered-By": "Servlet(?:\\/([\\d.]+))?\\;version:\\1" }, "icon": "Java.png", "implies": "Java", @@ -5234,10 +6007,19 @@ "implies": "Java", "website": "http://www.oracle.com/technetwork/java/javaee/jsp/index.html" }, + "Javadoc": { + "cats": [ + 4 + ], + "html": "", + "icon": "Java.png", + "website": "https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html" + }, "Jekyll": { "cats": [ 57 ], + "cpe": "cpe:/a:jekyllrb:jekyll", "html": [ "Powered by ]*>Jekyll]*\\s+href=[^>]*styles/kendo\\.common(?:\\.min)?\\.css[^>]*/>", "icon": "Kendo UI.png", @@ -5460,10 +6257,15 @@ "cookies": { "CMSPreferredCulture": "" }, + "cpe": "cpe:/a:kentico:kentico_cms", "icon": "Kentico CMS.png", + "js": { + "CMS.Application": "" + }, "meta": { "generator": "Kentico CMS ([\\d.R]+ \\(build [\\d.]+\\))\\;version:\\1" }, + "script": "/CMSPages/GetResource\\.ashx", "website": "http://www.kentico.com" }, "Kestrel": { @@ -5473,10 +6275,8 @@ "headers": { "Server": "^Kestrel" }, - "implies": [ - "Microsoft ASP.NET" - ], "icon": "kestrel.svg", + "implies": "Microsoft ASP.NET", "website": "https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel" }, "KeyCDN": { @@ -5494,6 +6294,7 @@ 29, 25 ], + "cpe": "cpe:/a:elasticsearch:kibana", "headers": { "kbn-name": "kibana", "kbn-version": "^([\\d.]+)$\\;version:\\1" @@ -5516,6 +6317,17 @@ "script": "kinetic(?:-v?([\\d.]+))?(?:\\.min)?\\.js\\;version:\\1", "website": "https://github.com/ericdrowell/KineticJS/" }, + "Kinsta": { + "cats": [ + 62 + ], + "headers": { + "x-kinsta-cache": "" + }, + "icon": "kinsta.svg", + "implies": "WordPress", + "website": "https://kinsta.com" + }, "Klarna Checkout": { "cats": [ 41, @@ -5577,8 +6389,9 @@ }, "Koha": { "cats": [ - 21 + 50 ], + "cpe": "cpe:/a:koha:koha", "html": [ "", "", "icon": "Kubernetes.svg", "website": "https://kubernetes.io/" @@ -5703,6 +6510,7 @@ "cats": [ 1 ], + "cpe": "cpe:/a:lepton-cms:lepton", "icon": "LEPTON.png", "implies": "PHP", "meta": { @@ -5710,15 +6518,24 @@ }, "website": "http://www.lepton-cms.org" }, - "LabVIEW": { + "LOU": { "cats": [ - 22 + 58 + ], + "icon": "LOU.png", + "script": "cdn\\.louassist\\.com*", + "website": "https://www.louassist.com" + }, + "Lagoon": { + "cats": [ + 62 ], "headers": { - "Server": "LabVIEW(?:/([\\d\\.]+))?\\;version:\\1" + "X-LAGOON": "", + "x-lagoon": "" }, - "icon": "LabVIEW.png", - "website": "http://ni.com/labview" + "icon": "Lagoon.png", + "website": "https://www.amazee.io/hosting" }, "Laravel": { "cats": [ @@ -5727,7 +6544,8 @@ "cookies": { "laravel_session": "" }, - "icon": "Laravel.png", + "cpe": "cpe:/a:laravel:laravel", + "icon": "Laravel.svg", "implies": "PHP", "js": { "Laravel": "" @@ -5745,13 +6563,6 @@ "script": "https?://connectormwi\\.laterpay\\.net/([0-9.]+)[a-zA-z-]*/live/[\\w-]+\\.js\\;version:\\1", "website": "https://www.laterpay.net/" }, - "Lazy.js": { - "cats": [ - 59 - ], - "script": "lazy(?:\\.browser)?(?:\\.min)?\\.js", - "website": "http://danieltao.com/lazy.js" - }, "Leaflet": { "cats": [ 35 @@ -5762,7 +6573,7 @@ "L.PosAnimation": "", "L.version": "^(.+)$\\;version:\\1\\;confidence:0" }, - "script": "leaflet.*\\.js", + "script": "leaflet.{0,32}\\.js", "website": "http://leafletjs.com" }, "Less": { @@ -5777,6 +6588,7 @@ "cats": [ 1 ], + "cpe": "cpe:/a:liferay:liferay_portal", "headers": { "Liferay-Portal": "[a-z\\s]+([\\d.]+)\\;version:\\1" }, @@ -5790,6 +6602,7 @@ "cats": [ 18 ], + "cpe": "cpe:/a:liftweb:lift", "headers": { "X-Lift-Version": "(.+)\\;version:\\1" }, @@ -5816,9 +6629,10 @@ "cats": [ 59 ], + "cpe": "cpe:/a:lightbox_photo_gallery_project:lightbox_photo_gallery", "html": "]*href=\"[^\"]+lightbox(?:\\.min)?\\.css", "icon": "Lightbox.png", - "script": "lightbox.*\\.js", + "script": "lightbox(?:-plus-jquery)?.{0,32}\\.js", "website": "http://lokeshdhakar.com/projects/lightbox2/" }, "Lightspeed eCom": { @@ -5831,27 +6645,6 @@ "url": "seoshop.webshopapp.com", "website": "http://www.lightspeedhq.com/products/ecommerce/" }, - "Lighty": { - "cats": [ - 18 - ], - "cookies": { - "lighty_version": "" - }, - "icon": "Lighty.png", - "implies": "PHP", - "website": "https://gitlab.com/lighty/framework" - }, - "LimeSurvey": { - "cats": [ - 19 - ], - "headers": { - "generator": "LimeSurvey" - }, - "icon": "LimeSurvey.png", - "website": "http://limesurvey.org/" - }, "LinkSmart": { "cats": [ 36 @@ -5873,6 +6666,16 @@ "script": "//platform\\.linkedin\\.com/in\\.js", "website": "http://linkedin.com" }, + "Liquid Web": { + "cats": [ + 62 + ], + "headers": { + "x-lw-cache": "" + }, + "icon": "liquidweb.svg", + "website": "https://www.liquidweb.com" + }, "List.js": { "cats": [ 59 @@ -5888,12 +6691,24 @@ "cats": [ 22 ], + "cpe": "cpe:/a:litespeedtech:litespeed_web_server", "headers": { "Server": "^LiteSpeed$" }, "icon": "LiteSpeed.svg", "website": "http://litespeedtech.com" }, + "Litespeed Cache": { + "cats": [ + 23 + ], + "headers": { + "x-litespeed-cache": "" + }, + "icon": "litespeed-cache.png", + "implies": "WordPress", + "website": "https://wordpress.org/plugins/litespeed-cache/" + }, "Lithium": { "cats": [ 1 @@ -5909,6 +6724,17 @@ }, "website": "https://www.lithium.com" }, + "Live Story": { + "cats": [ + 1 + ], + "icon": "LiveStory.png", + "js": { + "LSHelpers": "", + "LiveStory": "" + }, + "website": "https://www.livestory.nyc/" + }, "LiveAgent": { "cats": [ 52 @@ -5997,11 +6823,25 @@ "script": "/js/al/common\\.js\\?[0-9_]+", "website": "http://liveinternet.ru/rating/" }, + "Livewire": { + "cats": [ + 18, + 19 + ], + "html": "<[^>]{1,512}\\bwire:", + "icon": "Livewire.png", + "implies": "Laravel", + "js": { + "livewire": "" + }, + "script": "livewire(?:\\.min)?\\.js", + "website": "https://laravel-livewire.com" + }, "LocalFocus": { "cats": [ 61 ], - "html": "]+localfocus", + "html": "]+\\blocalfocus\\b", "icon": "LocalFocus.png", "implies": [ "Angular", @@ -6009,27 +6849,29 @@ ], "website": "https://www.localfocus.nl/en/" }, - "Locomotive": { + "LocomotiveCMS": { "cats": [ 1 ], "html": "]*/sites/[a-z\\d]{24}/theme/stylesheets", - "icon": "Locomotive.png", + "icon": "LocomotiveCMS.png", "implies": [ "Ruby on Rails", "MongoDB" ], - "website": "http://www.locomotivecms.com" + "website": "https://www.locomotivecms.com" }, "Lodash": { "cats": [ 59 ], + "cpe": "cpe:/a:lodash:lodash", "excludes": "Underscore.js", "icon": "Lo-dash.png", "js": { "_.VERSION": "^(.+)$\\;confidence:0\\;version:\\1", - "_.differenceBy": "" + "_.differenceBy": "", + "_.templateSettings.imports._.templateSettings.imports._.VERSION": "^(.+)$\\;version:\\1" }, "script": "lodash.*\\.js", "website": "http://www.lodash.com" @@ -6045,10 +6887,24 @@ "icon": "Logitech Media Server.png", "website": "http://www.mysqueezebox.com" }, + "Loja Integrada": { + "cats": [ + 6 + ], + "headers": { + "X-Powered-By": "vtex-integrated-store" + }, + "icon": "Loja Integrada.png", + "js": { + "window.LOJA_ID": "" + }, + "website": "https://lojaintegrada.com.br/" + }, "Lotus Domino": { "cats": [ 22 ], + "cpe": "cpe:/a:ibm:lotus_domino", "headers": { "Server": "Lotus-Domino" }, @@ -6056,18 +6912,11 @@ "implies": "Java", "website": "http://www-01.ibm.com/software/lotus/products/domino" }, - "LOU": { - "cats": [ - 58 - ], - "icon": "LOU.png", - "script": "cdn\\.louassist\\.com*", - "website": "https://www.louassist.com" - }, "Lua": { "cats": [ 27 ], + "cpe": "cpe:/a:lua:lua", "headers": { "X-Powered-By": "\\bLua(?: ([\\d.]+))?\\;version:\\1" }, @@ -6078,6 +6927,7 @@ "cats": [ 34 ], + "cpe": "cpe:/a:apache:lucene", "icon": "Lucene.png", "implies": "Java", "website": "http://lucene.apache.org/core/" @@ -6093,48 +6943,11 @@ }, "website": "https://www.luigisbox.com" }, - "M.R. Inc BoxyOS": { - "cats": [ - 28 - ], - "icon": "M.R. Inc.png", - "website": "http://mrincworld.com" - }, - "M.R. Inc SiteFrame": { - "cats": [ - 18 - ], - "headers": { - "Powered-By": "M\\.R\\. Inc SiteFrame" - }, - "icon": "M.R. Inc.png", - "website": "http://mrincworld.com" - }, - "M.R. Inc Webserver": { - "cats": [ - 22 - ], - "headers": { - "Server": "M\\.R\\. Inc Webserver" - }, - "icon": "M.R. Inc.png", - "implies": [ - "M.R. Inc BoxyOS" - ], - "website": "http://mrincworld.com" - }, - "MHonArc": { - "cats": [ - 50 - ], - "html": "\\;version:\\1", - "icon": "mhonarc.png", - "website": "http://www.mhonarc.at" - }, "MODX": { "cats": [ 1 ], + "cpe": "cpe:/a:modx:modx_revolution", "headers": { "X-Powered-By": "^MODX" }, @@ -6155,36 +6968,6 @@ }, "website": "http://modx.com" }, - "MYPAGE Platform": { - "cats": [ - 1, - 6 - ], - "cookies": { - "mypage_session": "" - }, - "headers": { - "CMS-Version": "^(.+)$\\;version:\\1\\;confidence:0" - }, - "icon": "mypage-platform.png", - "implies": "Laravel", - "website": "https://www.mypage.vn" - }, - "Botble CMS": { - "cats": [ - 1, - 6 - ], - "cookies": { - "botble_session": "" - }, - "headers": { - "CMS-Version": "^(.+)$\\;version:\\1\\;confidence:0" - }, - "icon": "Botble-CMS.png", - "implies": "Laravel", - "website": "https://botble.com" - }, "MadAdsMedia": { "cats": [ 36 @@ -6204,6 +6987,7 @@ "cookies": { "frontend": "\\;confidence:50" }, + "cpe": "cpe:/a:magento:magento", "html": [ " + diff --git a/src/drivers/webextension/html/options.html b/src/drivers/webextension/html/options.html index 7ec91299af9cd4e6cc0104640b7a7eaf859e8317..3dfc531d4f253b0e5c3d7aa6b3ff209b0b921983 100644 --- a/src/drivers/webextension/html/options.html +++ b/src/drivers/webextension/html/options.html @@ -1,65 +1,49 @@ - - + - Wappalyzer options + - + - - - - + - -
-
- -
-
+
+ + + -
-
-
-
+
+ +
+ +
+
+ + + + +
+ +
+
+ - + + + + - -
+ + + +
+ +
+
+ +
+
+ + + + + +   + + +   +
+
+ + diff --git a/src/drivers/webextension/images/github.png b/src/drivers/webextension/images/github.png deleted file mode 100644 index 037d0c33617bc314c9a772e9434801b70f870891..0000000000000000000000000000000000000000 Binary files a/src/drivers/webextension/images/github.png and /dev/null differ diff --git a/src/drivers/webextension/images/icon.svg b/src/drivers/webextension/images/icon.svg deleted file mode 100644 index dfcc9511e33675a7f853dcd5dea55a581b6cf6fc..0000000000000000000000000000000000000000 --- a/src/drivers/webextension/images/icon.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - Logo - Created with Sketch. - - - - - - - \ No newline at end of file diff --git a/src/drivers/webextension/images/icon_150.png b/src/drivers/webextension/images/icon_150.png deleted file mode 100644 index 7028f9c5e8ec561052b6e3d93e40cdcc47ad4586..0000000000000000000000000000000000000000 Binary files a/src/drivers/webextension/images/icon_150.png and /dev/null differ diff --git a/src/drivers/webextension/images/icon_44.png b/src/drivers/webextension/images/icon_44.png deleted file mode 100644 index 9a6321eaacd8e2de1029d9a698ac1c5255b791b1..0000000000000000000000000000000000000000 Binary files a/src/drivers/webextension/images/icon_44.png and /dev/null differ diff --git a/src/drivers/webextension/images/icon_50.png b/src/drivers/webextension/images/icon_50.png deleted file mode 100644 index 935b35b72739e4d4c002d490517f10202ebe587f..0000000000000000000000000000000000000000 Binary files a/src/drivers/webextension/images/icon_50.png and /dev/null differ diff --git a/src/drivers/webextension/images/icons b/src/drivers/webextension/images/icons deleted file mode 120000 index f7467b9a75c645ec0350f8a955600f253602d66b..0000000000000000000000000000000000000000 --- a/src/drivers/webextension/images/icons +++ /dev/null @@ -1 +0,0 @@ -../../../icons/ \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/1C-Bitrix.png b/src/drivers/webextension/images/icons/1C-Bitrix.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5fc411465b6dc2ed01ed331e11af87384c5d74 Binary files /dev/null and b/src/drivers/webextension/images/icons/1C-Bitrix.png differ diff --git a/src/drivers/webextension/images/icons/3dCart.png b/src/drivers/webextension/images/icons/3dCart.png new file mode 100644 index 0000000000000000000000000000000000000000..f929bb4ee7868aadb5dc65276761dd29d43307fa Binary files /dev/null and b/src/drivers/webextension/images/icons/3dCart.png differ diff --git a/src/drivers/webextension/images/icons/91app.png b/src/drivers/webextension/images/icons/91app.png new file mode 100644 index 0000000000000000000000000000000000000000..373397ef977b989d3feddc705e0cedf51566ae9a Binary files /dev/null and b/src/drivers/webextension/images/icons/91app.png differ 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/drivers/webextension/images/icons/ADPLAN.png b/src/drivers/webextension/images/icons/ADPLAN.png new file mode 100644 index 0000000000000000000000000000000000000000..c067886295535baf054b680be432330eeaae6969 Binary files /dev/null and b/src/drivers/webextension/images/icons/ADPLAN.png differ 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/drivers/webextension/images/icons/Accelerated-Mobile-Pages.svg b/src/drivers/webextension/images/icons/Accelerated-Mobile-Pages.svg new file mode 100644 index 0000000000000000000000000000000000000000..b9dad9255c333155231e79f7a41e41edf0e1b21f --- /dev/null +++ b/src/drivers/webextension/images/icons/Accelerated-Mobile-Pages.svg @@ -0,0 +1,2 @@ + + diff --git a/src/drivers/webextension/images/icons/Accessibe.png b/src/drivers/webextension/images/icons/Accessibe.png new file mode 100644 index 0000000000000000000000000000000000000000..77614df7d0a52944c951ec08f6852768d9686de1 Binary files /dev/null and b/src/drivers/webextension/images/icons/Accessibe.png differ 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/drivers/webextension/images/icons/AdOcean.png b/src/drivers/webextension/images/icons/AdOcean.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae2d7d6c55d8c480351d96c238c7348b78ceb75 Binary files /dev/null and b/src/drivers/webextension/images/icons/AdOcean.png differ 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/drivers/webextension/images/icons/Adally.png b/src/drivers/webextension/images/icons/Adally.png new file mode 100644 index 0000000000000000000000000000000000000000..f8372798f21a3f1f3afe3bb1e00480b3db640869 Binary files /dev/null and b/src/drivers/webextension/images/icons/Adally.png differ 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/drivers/webextension/images/icons/Adobe Analytics.svg b/src/drivers/webextension/images/icons/Adobe Analytics.svg new file mode 100644 index 0000000000000000000000000000000000000000..cb2827f2fdc7209b58cdc6c50f053de9222f6ef2 --- /dev/null +++ b/src/drivers/webextension/images/icons/Adobe Analytics.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file 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 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/drivers/webextension/images/icons/Adobe.svg b/src/drivers/webextension/images/icons/Adobe.svg new file mode 100644 index 0000000000000000000000000000000000000000..0843b200c0e35d8aefd54ace73de1450444298d0 --- /dev/null +++ b/src/drivers/webextension/images/icons/Adobe.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/AdonisJS.png b/src/drivers/webextension/images/icons/AdonisJS.png new file mode 100644 index 0000000000000000000000000000000000000000..71b65e89206416e61b8e373b29d0294ae36e8e72 Binary files /dev/null and b/src/drivers/webextension/images/icons/AdonisJS.png differ 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/drivers/webextension/images/icons/Airform.svg b/src/drivers/webextension/images/icons/Airform.svg new file mode 100644 index 0000000000000000000000000000000000000000..188efcda5cd5194bace9a6173d0f141a55e4af73 --- /dev/null +++ b/src/drivers/webextension/images/icons/Airform.svg @@ -0,0 +1 @@ + diff --git a/src/drivers/webextension/images/icons/Algolia.svg b/src/drivers/webextension/images/icons/Algolia.svg new file mode 100644 index 0000000000000000000000000000000000000000..c7ab0592848dfbd9b22eb772ecc3f517a82906b0 --- /dev/null +++ b/src/drivers/webextension/images/icons/Algolia.svg @@ -0,0 +1 @@ + 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/drivers/webextension/images/icons/Alpine.js.png b/src/drivers/webextension/images/icons/Alpine.js.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8df804ff69fcbdb1b83ea3e030a64418192692 Binary files /dev/null and b/src/drivers/webextension/images/icons/Alpine.js.png differ 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/drivers/webextension/images/icons/Amazon Pay.svg b/src/drivers/webextension/images/icons/Amazon Pay.svg new file mode 100644 index 0000000000000000000000000000000000000000..19f29d4ff7418ceeedeae170a92537f7f23b2bcb --- /dev/null +++ b/src/drivers/webextension/images/icons/Amazon Pay.svg @@ -0,0 +1,6 @@ + + + + + + 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/drivers/webextension/images/icons/Amazon.svg b/src/drivers/webextension/images/icons/Amazon.svg new file mode 100644 index 0000000000000000000000000000000000000000..77a47d3947ffba9c3c8b5511f081d18a98a384e8 --- /dev/null +++ b/src/drivers/webextension/images/icons/Amazon.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/drivers/webextension/images/icons/Amex.svg b/src/drivers/webextension/images/icons/Amex.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb04310ac56475e6deb3c49dfa63095174b38c32 --- /dev/null +++ b/src/drivers/webextension/images/icons/Amex.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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/drivers/webextension/images/icons/Anetwork.png b/src/drivers/webextension/images/icons/Anetwork.png new file mode 100644 index 0000000000000000000000000000000000000000..d0b5409d6ec9e168ea42a09e36e9c29d71ee176b Binary files /dev/null and b/src/drivers/webextension/images/icons/Anetwork.png differ 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/drivers/webextension/images/icons/Apache Traffic Server.png b/src/drivers/webextension/images/icons/Apache Traffic Server.png new file mode 100644 index 0000000000000000000000000000000000000000..8813eeb619ee45c10b78b9da58fe47adcbc1cc58 Binary files /dev/null and b/src/drivers/webextension/images/icons/Apache Traffic Server.png differ 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/drivers/webextension/images/icons/Apollo.svg b/src/drivers/webextension/images/icons/Apollo.svg new file mode 100644 index 0000000000000000000000000000000000000000..7e542bbf4a94cd981747d09ea9f810053d6b2fae --- /dev/null +++ b/src/drivers/webextension/images/icons/Apollo.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/AppDynamics.png b/src/drivers/webextension/images/icons/AppDynamics.png new file mode 100644 index 0000000000000000000000000000000000000000..1470b96fd7996a152bcfeafebf6504078de09bb4 Binary files /dev/null and b/src/drivers/webextension/images/icons/AppDynamics.png differ 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/drivers/webextension/images/icons/Apple.svg b/src/drivers/webextension/images/icons/Apple.svg new file mode 100644 index 0000000000000000000000000000000000000000..d0e888fea484d0c6b434a76928bee341ae7dd88a --- /dev/null +++ b/src/drivers/webextension/images/icons/Apple.svg @@ -0,0 +1,10 @@ + + + + + + + + + + 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/drivers/webextension/images/icons/ArvanCloud.png b/src/drivers/webextension/images/icons/ArvanCloud.png new file mode 100644 index 0000000000000000000000000000000000000000..9c53ead920e8732cc80982caeb80278721a93acb Binary files /dev/null and b/src/drivers/webextension/images/icons/ArvanCloud.png differ 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/drivers/webextension/images/icons/Atlassian Statuspage.svg b/src/drivers/webextension/images/icons/Atlassian Statuspage.svg new file mode 100644 index 0000000000000000000000000000000000000000..b651642d7339c17ae924252ffdb4c7e8d921e5fd --- /dev/null +++ b/src/drivers/webextension/images/icons/Atlassian Statuspage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/AudioEye.png b/src/drivers/webextension/images/icons/AudioEye.png new file mode 100644 index 0000000000000000000000000000000000000000..0708ecf1d69cbd006e35bb41c200c5c25c02254e Binary files /dev/null and b/src/drivers/webextension/images/icons/AudioEye.png differ 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/drivers/webextension/images/icons/Avasize.png b/src/drivers/webextension/images/icons/Avasize.png new file mode 100755 index 0000000000000000000000000000000000000000..753c8fccd1dcb57ebe10f211845dbd98a7569ea4 Binary files /dev/null and b/src/drivers/webextension/images/icons/Avasize.png differ 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/drivers/webextension/images/icons/Babel.svg b/src/drivers/webextension/images/icons/Babel.svg new file mode 100644 index 0000000000000000000000000000000000000000..c4c0069546d5f7588ae538b6b90073130d60fba0 --- /dev/null +++ b/src/drivers/webextension/images/icons/Babel.svg @@ -0,0 +1 @@ +Minimal Babel Logo 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/drivers/webextension/images/icons/Baidu Tongji.png b/src/drivers/webextension/images/icons/Baidu Tongji.png new file mode 100644 index 0000000000000000000000000000000000000000..be459bfdcf619e8bd3e44650e8f030bca58d9b86 Binary files /dev/null and b/src/drivers/webextension/images/icons/Baidu Tongji.png differ 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/drivers/webextension/images/icons/Bigcommerce.png b/src/drivers/webextension/images/icons/Bigcommerce.png new file mode 100644 index 0000000000000000000000000000000000000000..521e9f6e8c8ec44639bd8674539091a25c4a15e3 Binary files /dev/null and b/src/drivers/webextension/images/icons/Bigcommerce.png differ 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/drivers/webextension/images/icons/Blazor.png b/src/drivers/webextension/images/icons/Blazor.png new file mode 100644 index 0000000000000000000000000000000000000000..08283f19a1472b7d61ef5c3f654cfdf659ab1996 Binary files /dev/null and b/src/drivers/webextension/images/icons/Blazor.png differ diff --git a/src/drivers/webextension/images/icons/Blessing Skin.png b/src/drivers/webextension/images/icons/Blessing Skin.png new file mode 100644 index 0000000000000000000000000000000000000000..c59be77924ca9d4473c026fba989759b129f35e9 Binary files /dev/null and b/src/drivers/webextension/images/icons/Blessing Skin.png differ 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/drivers/webextension/images/icons/Bloomreach.png b/src/drivers/webextension/images/icons/Bloomreach.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d2b8d9bedb70bb288c5111a9e5753a7072b88d Binary files /dev/null and b/src/drivers/webextension/images/icons/Bloomreach.png differ 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/drivers/webextension/images/icons/Bootstrap.png b/src/drivers/webextension/images/icons/Bootstrap.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2650aab3fb41680c574308ce47ec78e6bcf1d7 Binary files /dev/null and b/src/drivers/webextension/images/icons/Bootstrap.png differ diff --git a/src/drivers/webextension/images/icons/Botble-CMS.png b/src/drivers/webextension/images/icons/Botble-CMS.png new file mode 100755 index 0000000000000000000000000000000000000000..c22f9c412e33bd894fb60be49141bff4d94fbbf1 Binary files /dev/null and b/src/drivers/webextension/images/icons/Botble-CMS.png differ 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/drivers/webextension/images/icons/CDN77.png b/src/drivers/webextension/images/icons/CDN77.png new file mode 100644 index 0000000000000000000000000000000000000000..6facf1697bdaa76824e3f28962eec80cc731f036 Binary files /dev/null and b/src/drivers/webextension/images/icons/CDN77.png differ 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/drivers/webextension/images/icons/Cafe24.png b/src/drivers/webextension/images/icons/Cafe24.png new file mode 100644 index 0000000000000000000000000000000000000000..e2181f584766a43870a48f964aff72af35eafe8f Binary files /dev/null and b/src/drivers/webextension/images/icons/Cafe24.png differ 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/drivers/webextension/images/icons/Cart-generic.svg b/src/drivers/webextension/images/icons/Cart-generic.svg new file mode 100644 index 0000000000000000000000000000000000000000..3c3b4ab7577a485e84a237363fb8b5e0ce67158d --- /dev/null +++ b/src/drivers/webextension/images/icons/Cart-generic.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file 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/drivers/webextension/images/icons/Cecil.png b/src/drivers/webextension/images/icons/Cecil.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd592ccc1ab30500fdc45153425ed9a139938ab Binary files /dev/null and b/src/drivers/webextension/images/icons/Cecil.png differ 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/drivers/webextension/images/icons/Ceres.svg b/src/drivers/webextension/images/icons/Ceres.svg new file mode 100644 index 0000000000000000000000000000000000000000..62b4af872c77c7ee4653b67df2d079036e0a623b --- /dev/null +++ b/src/drivers/webextension/images/icons/Ceres.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/drivers/webextension/images/icons/Chorus.png b/src/drivers/webextension/images/icons/Chorus.png new file mode 100644 index 0000000000000000000000000000000000000000..008f9118593e0e9ecefe74adfeb21ca0e6a20e60 Binary files /dev/null and b/src/drivers/webextension/images/icons/Chorus.png differ 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/drivers/webextension/images/icons/ClickFunnels.png b/src/drivers/webextension/images/icons/ClickFunnels.png new file mode 100644 index 0000000000000000000000000000000000000000..2645bb6339bf6cf6b9369f21ec280f10e8e7419f Binary files /dev/null and b/src/drivers/webextension/images/icons/ClickFunnels.png differ 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/drivers/webextension/images/icons/CloudSuite.svg b/src/drivers/webextension/images/icons/CloudSuite.svg new file mode 100644 index 0000000000000000000000000000000000000000..44b0b02d47ad0407302a4b85a02afae1705b7e2a --- /dev/null +++ b/src/drivers/webextension/images/icons/CloudSuite.svg @@ -0,0 +1,13 @@ + + + + cloudsuite-logo-rgb + Created with Sketch. + + + + + + + + \ No newline at end of file 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/drivers/webextension/images/icons/Combeenation.png b/src/drivers/webextension/images/icons/Combeenation.png new file mode 100644 index 0000000000000000000000000000000000000000..547bdfa0f5d17f12ae2e8c98963ff581d07ecc03 Binary files /dev/null and b/src/drivers/webextension/images/icons/Combeenation.png differ 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/drivers/webextension/images/icons/CookieHub.png b/src/drivers/webextension/images/icons/CookieHub.png new file mode 100644 index 0000000000000000000000000000000000000000..99c96da7b6d2d7be121a7bc8648de0f06bc88bec Binary files /dev/null and b/src/drivers/webextension/images/icons/CookieHub.png differ diff --git a/src/drivers/webextension/images/icons/CookieScript.png b/src/drivers/webextension/images/icons/CookieScript.png new file mode 100644 index 0000000000000000000000000000000000000000..0c5b0e925c3a98fd359febc74495e7a824cdd955 Binary files /dev/null and b/src/drivers/webextension/images/icons/CookieScript.png differ diff --git a/src/drivers/webextension/images/icons/Cookiebot.svg b/src/drivers/webextension/images/icons/Cookiebot.svg new file mode 100644 index 0000000000000000000000000000000000000000..c6acb47bdb80faa801bbc6676d4d956eb83ca92f --- /dev/null +++ b/src/drivers/webextension/images/icons/Cookiebot.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/Countly.png b/src/drivers/webextension/images/icons/Countly.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3c193608097c77fa2baf641544281288c16742 Binary files /dev/null and b/src/drivers/webextension/images/icons/Countly.png differ 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/drivers/webextension/images/icons/Craft CMS.svg b/src/drivers/webextension/images/icons/Craft CMS.svg new file mode 100644 index 0000000000000000000000000000000000000000..7e83d400a0b1333016d6d62daf6bd75f9b904912 --- /dev/null +++ b/src/drivers/webextension/images/icons/Craft CMS.svg @@ -0,0 +1,12 @@ + + + + + + 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/drivers/webextension/images/icons/CrossBox.png b/src/drivers/webextension/images/icons/CrossBox.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd838e64c5e8d61dfac8f4305d0e59ceba86a7c Binary files /dev/null and b/src/drivers/webextension/images/icons/CrossBox.png differ diff --git a/src/drivers/webextension/images/icons/Crownpeak.png b/src/drivers/webextension/images/icons/Crownpeak.png new file mode 100644 index 0000000000000000000000000000000000000000..4b80de9df468ec606f501c4f57451c515e7935a4 Binary files /dev/null and b/src/drivers/webextension/images/icons/Crownpeak.png differ 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/drivers/webextension/images/icons/DataPower.png b/src/drivers/webextension/images/icons/DataPower.png new file mode 100644 index 0000000000000000000000000000000000000000..f722c239e51f8e3ac5cf8769721589bc6c83f3e4 Binary files /dev/null and b/src/drivers/webextension/images/icons/DataPower.png differ 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/drivers/webextension/images/icons/DerakCloud.png b/src/drivers/webextension/images/icons/DerakCloud.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4fdf3498828a9c90043a201c24b1ba69bb7850 Binary files /dev/null and b/src/drivers/webextension/images/icons/DerakCloud.png differ 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/drivers/webextension/images/icons/Drupal.svg b/src/drivers/webextension/images/icons/Drupal.svg new file mode 100644 index 0000000000000000000000000000000000000000..1f2b53388140f81c10c8ed00b5b54f5c4e77bc5e --- /dev/null +++ b/src/drivers/webextension/images/icons/Drupal.svg @@ -0,0 +1,3 @@ + + + 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/drivers/webextension/images/icons/EKM.png b/src/drivers/webextension/images/icons/EKM.png new file mode 100644 index 0000000000000000000000000000000000000000..c5673dbe2cf36ee618e0f8cb68d0fdb9f2564a52 Binary files /dev/null and b/src/drivers/webextension/images/icons/EKM.png differ 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/drivers/webextension/images/icons/EasyEngine.png b/src/drivers/webextension/images/icons/EasyEngine.png new file mode 100644 index 0000000000000000000000000000000000000000..9d861c3206e670c9f9e2a87c58f7972bccada6ba Binary files /dev/null and b/src/drivers/webextension/images/icons/EasyEngine.png differ 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/drivers/webextension/images/icons/Elementor.png b/src/drivers/webextension/images/icons/Elementor.png new file mode 100644 index 0000000000000000000000000000000000000000..817059c9f6a8db45f5e655ee3a4fd319e703d9d5 Binary files /dev/null and b/src/drivers/webextension/images/icons/Elementor.png differ 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/drivers/webextension/images/icons/EqualWeb.png b/src/drivers/webextension/images/icons/EqualWeb.png new file mode 100644 index 0000000000000000000000000000000000000000..6a942d08cbaff4ccf6fecee28c373aba7095e869 Binary files /dev/null and b/src/drivers/webextension/images/icons/EqualWeb.png differ 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/drivers/webextension/images/icons/ExpertRec.png b/src/drivers/webextension/images/icons/ExpertRec.png new file mode 100644 index 0000000000000000000000000000000000000000..2d15f2845c5c0a0d0ab37251ac3fa6f6528fc68f Binary files /dev/null and b/src/drivers/webextension/images/icons/ExpertRec.png differ diff --git a/src/drivers/webextension/images/icons/Express.png b/src/drivers/webextension/images/icons/Express.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f9ad582d94dad9a902fd343c23f4f8e297cf72 Binary files /dev/null and b/src/drivers/webextension/images/icons/Express.png differ 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/drivers/webextension/images/icons/F5.png b/src/drivers/webextension/images/icons/F5.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb5a0d2ae6ee26e2c523f408a961c8cb09dd945 Binary files /dev/null and b/src/drivers/webextension/images/icons/F5.png differ 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/drivers/webextension/images/icons/Facil-iti.png b/src/drivers/webextension/images/icons/Facil-iti.png new file mode 100644 index 0000000000000000000000000000000000000000..8e1091214c4b05cd4169af172f502804112951b9 Binary files /dev/null and b/src/drivers/webextension/images/icons/Facil-iti.png differ 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/drivers/webextension/images/icons/FaraPy.png b/src/drivers/webextension/images/icons/FaraPy.png new file mode 100644 index 0000000000000000000000000000000000000000..62d38b1f14505c64424e00482fb5ce0507a7a721 Binary files /dev/null and b/src/drivers/webextension/images/icons/FaraPy.png differ diff --git a/src/drivers/webextension/images/icons/Fastcommerce.png b/src/drivers/webextension/images/icons/Fastcommerce.png new file mode 100644 index 0000000000000000000000000000000000000000..03b85cca53855d4521224ceb0ec6f4cb6c4772aa Binary files /dev/null and b/src/drivers/webextension/images/icons/Fastcommerce.png differ 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/drivers/webextension/images/icons/Fbits.png b/src/drivers/webextension/images/icons/Fbits.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e5e1215fd67481516d0d572686bf9a34946bf5 Binary files /dev/null and b/src/drivers/webextension/images/icons/Fbits.png differ 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/drivers/webextension/images/icons/Flat UI.png b/src/drivers/webextension/images/icons/Flat UI.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1f8661864894ce8d7bf06a44ebdb66d4e519c6 Binary files /dev/null and b/src/drivers/webextension/images/icons/Flat UI.png differ 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/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/drivers/webextension/images/icons/ForoshGostar.svg b/src/drivers/webextension/images/icons/ForoshGostar.svg new file mode 100644 index 0000000000000000000000000000000000000000..c97a6fa7be158f19ed388a8c56be193fc8905c23 --- /dev/null +++ b/src/drivers/webextension/images/icons/ForoshGostar.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/Gemius.png b/src/drivers/webextension/images/icons/Gemius.png new file mode 100644 index 0000000000000000000000000000000000000000..80fc23415a875b8e0ddd6f08be3e1208a8521037 Binary files /dev/null and b/src/drivers/webextension/images/icons/Gemius.png differ diff --git a/src/drivers/webextension/images/icons/GeneXus.png b/src/drivers/webextension/images/icons/GeneXus.png new file mode 100644 index 0000000000000000000000000000000000000000..574790d54bd7e6e04369820e1945c9658505d35a Binary files /dev/null and b/src/drivers/webextension/images/icons/GeneXus.png differ 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/drivers/webextension/images/icons/Globale.png b/src/drivers/webextension/images/icons/Globale.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6147a8ab02a158b98c1e22479b53488d68bf6e Binary files /dev/null and b/src/drivers/webextension/images/icons/Globale.png differ 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/drivers/webextension/images/icons/GoCache.png b/src/drivers/webextension/images/icons/GoCache.png new file mode 100644 index 0000000000000000000000000000000000000000..7f8c1a5f010fd0fe18128aec7e202789e5baf0fe Binary files /dev/null and b/src/drivers/webextension/images/icons/GoCache.png differ diff --git a/src/icons/GoJS.png b/src/drivers/webextension/images/icons/GoJS.png similarity index 61% rename from src/icons/GoJS.png rename to src/drivers/webextension/images/icons/GoJS.png index 5a91ade5468c9605aa169b6dd095499979ae846c..3f585e48e4c384705d263c2e9d2f0991029a52cf 100644 Binary files a/src/icons/GoJS.png and b/src/drivers/webextension/images/icons/GoJS.png differ 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/drivers/webextension/images/icons/Google Maps.png b/src/drivers/webextension/images/icons/Google Maps.png new file mode 100644 index 0000000000000000000000000000000000000000..bda281d741c8ccbb08292bc5c21bdce8e18eb690 Binary files /dev/null and b/src/drivers/webextension/images/icons/Google Maps.png differ 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/drivers/webextension/images/icons/Google Sites.png b/src/drivers/webextension/images/icons/Google Sites.png new file mode 100644 index 0000000000000000000000000000000000000000..69259cb681068558ece73d03256698eafa89f6f8 Binary files /dev/null and b/src/drivers/webextension/images/icons/Google Sites.png differ 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/drivers/webextension/images/icons/GrandNode.svg b/src/drivers/webextension/images/icons/GrandNode.svg new file mode 100644 index 0000000000000000000000000000000000000000..7b9fd2d6f0d641654faf7ad930ebbe98b393fa5b --- /dev/null +++ b/src/drivers/webextension/images/icons/GrandNode.svg @@ -0,0 +1,26 @@ + + image/svg+xml + + + background + + + + Layer 1 + + + + + + + + + + + + + + + + + \ No newline at end of file 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/drivers/webextension/images/icons/Haravan.png b/src/drivers/webextension/images/icons/Haravan.png new file mode 100644 index 0000000000000000000000000000000000000000..b44cdbb2fba7a71d270a4b88bf3d0bcb88d02364 Binary files /dev/null and b/src/drivers/webextension/images/icons/Haravan.png differ 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/drivers/webextension/images/icons/HikeOrders.png b/src/drivers/webextension/images/icons/HikeOrders.png new file mode 100644 index 0000000000000000000000000000000000000000..06550bc0fc71f3aa9d70cfee35edf3d2f43e2e21 Binary files /dev/null and b/src/drivers/webextension/images/icons/HikeOrders.png differ 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/drivers/webextension/images/icons/Imperva.svg b/src/drivers/webextension/images/icons/Imperva.svg new file mode 100644 index 0000000000000000000000000000000000000000..d00aa052f785d3b5916def6df4a1292853da30c6 --- /dev/null +++ b/src/drivers/webextension/images/icons/Imperva.svg @@ -0,0 +1,16 @@ + + + Group + + + + + + + + + + + + + \ No newline at end of file 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/drivers/webextension/images/icons/Instabot.png b/src/drivers/webextension/images/icons/Instabot.png new file mode 100644 index 0000000000000000000000000000000000000000..34aab6f311a2d181b1469f83f8e52d3affc4591e Binary files /dev/null and b/src/drivers/webextension/images/icons/Instabot.png differ 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/drivers/webextension/images/icons/Intercom.svg b/src/drivers/webextension/images/icons/Intercom.svg new file mode 100644 index 0000000000000000000000000000000000000000..ebdeacc0576ee1069371233d56ee56e49eb505fe --- /dev/null +++ b/src/drivers/webextension/images/icons/Intercom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/Intershop.png b/src/drivers/webextension/images/icons/Intershop.png new file mode 100644 index 0000000000000000000000000000000000000000..c32a6169a73931d763c8580898d4fe60beaf5d42 Binary files /dev/null and b/src/drivers/webextension/images/icons/Intershop.png differ 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/drivers/webextension/images/icons/Ionicons.png b/src/drivers/webextension/images/icons/Ionicons.png new file mode 100644 index 0000000000000000000000000000000000000000..e1959bfe584c50e89315e9b559b698b1ff1c269f Binary files /dev/null and b/src/drivers/webextension/images/icons/Ionicons.png differ diff --git a/src/drivers/webextension/images/icons/Ionos-by-1and1-logo.svg b/src/drivers/webextension/images/icons/Ionos-by-1and1-logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..60d87ec914801aa0ac2d999525845740fbee75e6 --- /dev/null +++ b/src/drivers/webextension/images/icons/Ionos-by-1and1-logo.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/Jibres.svg b/src/drivers/webextension/images/icons/Jibres.svg new file mode 100644 index 0000000000000000000000000000000000000000..7dfe4ca8b62b834609b142d39336095870bd4a47 --- /dev/null +++ b/src/drivers/webextension/images/icons/Jibres.svg @@ -0,0 +1 @@ +Jibres-Logo-icon-zero \ No newline at end of file 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 0000000000000000000000000000000000000000..3531cc2fb70b60beb564c3cf4154f4ed307e236a 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/drivers/webextension/images/icons/KeyCDN.png b/src/drivers/webextension/images/icons/KeyCDN.png new file mode 100644 index 0000000000000000000000000000000000000000..eb027cf0aaa3dede6b766e81613dc45a21e08e57 Binary files /dev/null and b/src/drivers/webextension/images/icons/KeyCDN.png differ 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/drivers/webextension/images/icons/LOU.png b/src/drivers/webextension/images/icons/LOU.png new file mode 100644 index 0000000000000000000000000000000000000000..cacbee77a6450a6d6a77c56137b253a4b69d97fe Binary files /dev/null and b/src/drivers/webextension/images/icons/LOU.png differ diff --git a/src/drivers/webextension/images/icons/Lagoon.png b/src/drivers/webextension/images/icons/Lagoon.png new file mode 100644 index 0000000000000000000000000000000000000000..79a6acc980a701d7937e76912239753b1aa23887 Binary files /dev/null and b/src/drivers/webextension/images/icons/Lagoon.png differ diff --git a/src/drivers/webextension/images/icons/Laravel.svg b/src/drivers/webextension/images/icons/Laravel.svg new file mode 100644 index 0000000000000000000000000000000000000000..917d020779edbb4075408674250889688f216510 --- /dev/null +++ b/src/drivers/webextension/images/icons/Laravel.svg @@ -0,0 +1,31 @@ + +Laravel logoimage/svg+xmlLaravel logo + + + \ No newline at end of file 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/drivers/webextension/images/icons/LiveStory.png b/src/drivers/webextension/images/icons/LiveStory.png new file mode 100644 index 0000000000000000000000000000000000000000..6bb152254fb3f5683083b770361879904e590c2f Binary files /dev/null and b/src/drivers/webextension/images/icons/LiveStory.png differ 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 0000000000000000000000000000000000000000..b91486cc7bb48ee2ea22fb9f6c6554dded240495 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/drivers/webextension/images/icons/LocalFocus.png b/src/drivers/webextension/images/icons/LocalFocus.png new file mode 100644 index 0000000000000000000000000000000000000000..0043b86458797dc240f453cfae1df2577386a3e6 Binary files /dev/null and b/src/drivers/webextension/images/icons/LocalFocus.png differ diff --git a/src/icons/ArvanCloud.png b/src/drivers/webextension/images/icons/LocomotiveCMS.png similarity index 83% rename from src/icons/ArvanCloud.png rename to src/drivers/webextension/images/icons/LocomotiveCMS.png index debf6aea98efd487c699b450f0ca13f96745f273..3bf4c3f46fcbfd1b131a74da756ad6298024a253 100644 Binary files a/src/icons/ArvanCloud.png and b/src/drivers/webextension/images/icons/LocomotiveCMS.png differ 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/drivers/webextension/images/icons/Loja Integrada.png b/src/drivers/webextension/images/icons/Loja Integrada.png new file mode 100644 index 0000000000000000000000000000000000000000..7bdb1b0639ffe6e166418c2829c2046f5b8c8315 Binary files /dev/null and b/src/drivers/webextension/images/icons/Loja Integrada.png differ 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/drivers/webextension/images/icons/Make-Sense.png b/src/drivers/webextension/images/icons/Make-Sense.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b532e4b4eef7c6a830fb587bf32a0caaf304e8 Binary files /dev/null and b/src/drivers/webextension/images/icons/Make-Sense.png differ diff --git a/src/drivers/webextension/images/icons/MakeShopKorea.png b/src/drivers/webextension/images/icons/MakeShopKorea.png new file mode 100644 index 0000000000000000000000000000000000000000..89fbc952828ff7a04c0e27d3d9d2fcdc9a3bb8dc Binary files /dev/null and b/src/drivers/webextension/images/icons/MakeShopKorea.png differ 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/drivers/webextension/images/icons/Mastercard.svg b/src/drivers/webextension/images/icons/Mastercard.svg new file mode 100644 index 0000000000000000000000000000000000000000..70ca0964be76d2654e5ce14fbb71175f0ada3f63 --- /dev/null +++ b/src/drivers/webextension/images/icons/Mastercard.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + 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/drivers/webextension/images/icons/Matomo.png b/src/drivers/webextension/images/icons/Matomo.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ff2fa1a2a2d54ff9b6235c1a7b87fbc3a2868b Binary files /dev/null and b/src/drivers/webextension/images/icons/Matomo.png differ 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/drivers/webextension/images/icons/Maxemail.svg b/src/drivers/webextension/images/icons/Maxemail.svg new file mode 100755 index 0000000000000000000000000000000000000000..01b298ab1e19159915d76a569663b1c37c925c2a --- /dev/null +++ b/src/drivers/webextension/images/icons/Maxemail.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/MemberStack.png b/src/drivers/webextension/images/icons/MemberStack.png new file mode 100644 index 0000000000000000000000000000000000000000..74f99f1500f7d3437f03e143e5680c0b11cc5448 Binary files /dev/null and b/src/drivers/webextension/images/icons/MemberStack.png differ 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/drivers/webextension/images/icons/Microsoft.png b/src/drivers/webextension/images/icons/Microsoft.png new file mode 100644 index 0000000000000000000000000000000000000000..8643c5f80c47e6b12b9fbdce7bb888b1983a6a8f Binary files /dev/null and b/src/drivers/webextension/images/icons/Microsoft.png differ 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/drivers/webextension/images/icons/MobX.svg b/src/drivers/webextension/images/icons/MobX.svg new file mode 100644 index 0000000000000000000000000000000000000000..2dbedb8571ab3a037bd7c9ae6fbe4a6adf0acc8e --- /dev/null +++ b/src/drivers/webextension/images/icons/MobX.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/NextGEN Gallery.png b/src/drivers/webextension/images/icons/NextGEN Gallery.png new file mode 100644 index 0000000000000000000000000000000000000000..fdc7074b88cf7d1566e4402aaeca862554c1f8be Binary files /dev/null and b/src/drivers/webextension/images/icons/NextGEN Gallery.png differ 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/drivers/webextension/images/icons/OneTrust.png b/src/drivers/webextension/images/icons/OneTrust.png new file mode 100644 index 0000000000000000000000000000000000000000..da57f65e576ca6964d969000afaac954e70dfb7a Binary files /dev/null and b/src/drivers/webextension/images/icons/OneTrust.png differ diff --git a/src/drivers/webextension/images/icons/Onshop.svg b/src/drivers/webextension/images/icons/Onshop.svg new file mode 100644 index 0000000000000000000000000000000000000000..902b25caab9747f72a55a6125d35d4d1fafbaebb --- /dev/null +++ b/src/drivers/webextension/images/icons/Onshop.svg @@ -0,0 +1,27 @@ + + + + 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/drivers/webextension/images/icons/OpenUI5.png b/src/drivers/webextension/images/icons/OpenUI5.png new file mode 100644 index 0000000000000000000000000000000000000000..be273753a771b2bd66a4d380090ca7fa5e0a757a Binary files /dev/null and b/src/drivers/webextension/images/icons/OpenUI5.png differ 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/drivers/webextension/images/icons/PHP-Fusion.png b/src/drivers/webextension/images/icons/PHP-Fusion.png new file mode 100644 index 0000000000000000000000000000000000000000..f8959a4c8514aec4fdc99f37775fd194a679d172 Binary files /dev/null and b/src/drivers/webextension/images/icons/PHP-Fusion.png differ diff --git a/src/drivers/webextension/images/icons/PHP-Nuke.png b/src/drivers/webextension/images/icons/PHP-Nuke.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd21c23be45e6a5338dd1b7d30a8ae4f8d2b65c Binary files /dev/null and b/src/drivers/webextension/images/icons/PHP-Nuke.png differ 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/drivers/webextension/images/icons/Pagevamp.png b/src/drivers/webextension/images/icons/Pagevamp.png new file mode 100644 index 0000000000000000000000000000000000000000..809b88ac13af199d95aa2d9b5121c86feeffbf3f Binary files /dev/null and b/src/drivers/webextension/images/icons/Pagevamp.png differ diff --git a/src/drivers/webextension/images/icons/Parcel.png b/src/drivers/webextension/images/icons/Parcel.png new file mode 100644 index 0000000000000000000000000000000000000000..616435d24f174c667a5129b292abdcf567e8cf8f Binary files /dev/null and b/src/drivers/webextension/images/icons/Parcel.png differ 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/drivers/webextension/images/icons/PhotoShelter.png b/src/drivers/webextension/images/icons/PhotoShelter.png new file mode 100644 index 0000000000000000000000000000000000000000..2a8c5e5247f63131550f8d70131738cbb7587729 Binary files /dev/null and b/src/drivers/webextension/images/icons/PhotoShelter.png differ 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/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 0000000000000000000000000000000000000000..0bb620cdb610cb27f8ef7e603fb6b5a021035324 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/drivers/webextension/images/icons/Prebid.png b/src/drivers/webextension/images/icons/Prebid.png new file mode 100644 index 0000000000000000000000000000000000000000..24e55655a1c93115eeb3513ad72023195d6d8ce7 Binary files /dev/null and b/src/drivers/webextension/images/icons/Prebid.png differ 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 0000000000000000000000000000000000000000..9cbbc08147626fc9dbf2561f628554ae907ac3fc --- /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/drivers/webextension/images/icons/Pushnami.svg b/src/drivers/webextension/images/icons/Pushnami.svg new file mode 100755 index 0000000000000000000000000000000000000000..88b2ec3842f49052bf53aae22e1e72e79a8e0c53 --- /dev/null +++ b/src/drivers/webextension/images/icons/Pushnami.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/drivers/webextension/images/icons/Quantcast.png b/src/drivers/webextension/images/icons/Quantcast.png new file mode 100644 index 0000000000000000000000000000000000000000..fdd3c70ad0528124830451843777d8f12dfa1bab Binary files /dev/null and b/src/drivers/webextension/images/icons/Quantcast.png differ 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/drivers/webextension/images/icons/RakutenDigitalCommerce.png b/src/drivers/webextension/images/icons/RakutenDigitalCommerce.png new file mode 100644 index 0000000000000000000000000000000000000000..6f10f0ceebfd28d5c6a3a059185ca9a4ae67ef44 Binary files /dev/null and b/src/drivers/webextension/images/icons/RakutenDigitalCommerce.png differ 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/drivers/webextension/images/icons/RebelMouse.svg b/src/drivers/webextension/images/icons/RebelMouse.svg new file mode 100644 index 0000000000000000000000000000000000000000..9805953699d7dcca46d5f988b037b5c2cdd79737 --- /dev/null +++ b/src/drivers/webextension/images/icons/RebelMouse.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Recite Me.png b/src/drivers/webextension/images/icons/Recite Me.png new file mode 100644 index 0000000000000000000000000000000000000000..b6f6aa69db6bae89b52eb4f897783a1182b4065e Binary files /dev/null and b/src/drivers/webextension/images/icons/Recite Me.png differ diff --git a/src/drivers/webextension/images/icons/Recurly.png b/src/drivers/webextension/images/icons/Recurly.png new file mode 100644 index 0000000000000000000000000000000000000000..dadff5ddf1b70fede825414b66a8c8e7d46eb16b Binary files /dev/null and b/src/drivers/webextension/images/icons/Recurly.png differ diff --git a/src/drivers/webextension/images/icons/Red Hat.svg b/src/drivers/webextension/images/icons/Red Hat.svg new file mode 100644 index 0000000000000000000000000000000000000000..5082779f1d907eb11f831bd48e3b634e0fb72b7b --- /dev/null +++ b/src/drivers/webextension/images/icons/Red Hat.svg @@ -0,0 +1,41 @@ + + + + + + image/svg+xml + + RedHat Logo + + + + + + + RedHat Logo + + + diff --git a/src/drivers/webextension/images/icons/Redaxscript.svg b/src/drivers/webextension/images/icons/Redaxscript.svg new file mode 100644 index 0000000000000000000000000000000000000000..847d91f4939eb99eee12fd5211bcac44ee88427f --- /dev/null +++ b/src/drivers/webextension/images/icons/Redaxscript.svg @@ -0,0 +1,3 @@ + + + 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/drivers/webextension/images/icons/Redis.svg b/src/drivers/webextension/images/icons/Redis.svg new file mode 100644 index 0000000000000000000000000000000000000000..b7019d61713259e1ae17422bdcaac6d93546066e --- /dev/null +++ b/src/drivers/webextension/images/icons/Redis.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/RedisObjectCache.svg b/src/drivers/webextension/images/icons/RedisObjectCache.svg new file mode 100644 index 0000000000000000000000000000000000000000..b7019d61713259e1ae17422bdcaac6d93546066e --- /dev/null +++ b/src/drivers/webextension/images/icons/RedisObjectCache.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + 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/drivers/webextension/images/icons/Saber.svg b/src/drivers/webextension/images/icons/Saber.svg new file mode 100644 index 0000000000000000000000000000000000000000..a75b6b09061e9a0b8a0c6e0aabd044531abc4be9 --- /dev/null +++ b/src/drivers/webextension/images/icons/Saber.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/Scenari.png b/src/drivers/webextension/images/icons/Scenari.png new file mode 100644 index 0000000000000000000000000000000000000000..d1572a21ef01143d359edbd12cf9aef845563c25 Binary files /dev/null and b/src/drivers/webextension/images/icons/Scenari.png differ 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/drivers/webextension/images/icons/Shiny.png b/src/drivers/webextension/images/icons/Shiny.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea097729c42ef35fdef3eab68fb5c0720f0ba7d Binary files /dev/null and b/src/drivers/webextension/images/icons/Shiny.png differ 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/drivers/webextension/images/icons/Shopcada.png b/src/drivers/webextension/images/icons/Shopcada.png new file mode 100644 index 0000000000000000000000000000000000000000..0b793d9c924d12e076dbff6d915a9ecc2e323b69 Binary files /dev/null and b/src/drivers/webextension/images/icons/Shopcada.png differ 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/drivers/webextension/images/icons/Shopfa.svg b/src/drivers/webextension/images/icons/Shopfa.svg new file mode 100644 index 0000000000000000000000000000000000000000..5ba9389a1557c8e35824120b4ac400e6e4c2be4e --- /dev/null +++ b/src/drivers/webextension/images/icons/Shopfa.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/Shopware.svg b/src/drivers/webextension/images/icons/Shopware.svg new file mode 100644 index 0000000000000000000000000000000000000000..6b4a848bc5b43e8bea4d7e7e2d93a04d673a19d6 --- /dev/null +++ b/src/drivers/webextension/images/icons/Shopware.svg @@ -0,0 +1,10 @@ + + + + Artboard + Created with Sketch. + + + + + \ No newline at end of file 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/drivers/webextension/images/icons/SimpleAnalytics.svg b/src/drivers/webextension/images/icons/SimpleAnalytics.svg new file mode 100644 index 0000000000000000000000000000000000000000..772ac7923ec6cedec3c530547ed0bf332e89d792 --- /dev/null +++ b/src/drivers/webextension/images/icons/SimpleAnalytics.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/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/drivers/webextension/images/icons/Siteglide.svg b/src/drivers/webextension/images/icons/Siteglide.svg new file mode 100644 index 0000000000000000000000000000000000000000..113d8a863e1b22723bdb32ca82f8140ae549b477 --- /dev/null +++ b/src/drivers/webextension/images/icons/Siteglide.svg @@ -0,0 +1,12 @@ + + + + Artboard 3 + Created with Sketch. + + + + + + + \ No newline at end of file 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/drivers/webextension/images/icons/SlickStack.png b/src/drivers/webextension/images/icons/SlickStack.png new file mode 100644 index 0000000000000000000000000000000000000000..ed055754616625f7092b1426e9aa2d0db168fbef Binary files /dev/null and b/src/drivers/webextension/images/icons/SlickStack.png differ 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.biz.png similarity index 100% rename from src/icons/Smartstore.png rename to src/drivers/webextension/images/icons/Smartstore.biz.png diff --git a/src/drivers/webextension/images/icons/Smartstore.png b/src/drivers/webextension/images/icons/Smartstore.png new file mode 100644 index 0000000000000000000000000000000000000000..91a23148505bc83788f74e75dbbdcb3ff84d2fdc Binary files /dev/null and b/src/drivers/webextension/images/icons/Smartstore.png differ 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/drivers/webextension/images/icons/Socket.IO.svg b/src/drivers/webextension/images/icons/Socket.IO.svg new file mode 100644 index 0000000000000000000000000000000000000000..21d042b6a58aa911abcd9c87fcd4f36df0449746 --- /dev/null +++ b/src/drivers/webextension/images/icons/Socket.IO.svg @@ -0,0 +1,16 @@ + + + + logo full + Created with Sketch. + + + + + diff --git a/src/drivers/webextension/images/icons/SolidPixels.png b/src/drivers/webextension/images/icons/SolidPixels.png new file mode 100644 index 0000000000000000000000000000000000000000..b26327541fcdb75bd3737c689c1e05b751e25161 Binary files /dev/null and b/src/drivers/webextension/images/icons/SolidPixels.png differ 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/drivers/webextension/images/icons/Spring.png b/src/drivers/webextension/images/icons/Spring.png new file mode 100644 index 0000000000000000000000000000000000000000..2681e19e4823e51ee08779c83b28b7ec21129421 Binary files /dev/null and b/src/drivers/webextension/images/icons/Spring.png differ diff --git a/src/drivers/webextension/images/icons/Sqreen.png b/src/drivers/webextension/images/icons/Sqreen.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e6acca5d0d41224e450167b8a2b20b48cb1cfb Binary files /dev/null and b/src/drivers/webextension/images/icons/Sqreen.png differ 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/drivers/webextension/images/icons/Strapi.png b/src/drivers/webextension/images/icons/Strapi.png new file mode 100644 index 0000000000000000000000000000000000000000..8abd8b03ab34d4dde42909331d8854090e738ead Binary files /dev/null and b/src/drivers/webextension/images/icons/Strapi.png differ diff --git a/src/drivers/webextension/images/icons/Strikingly.png b/src/drivers/webextension/images/icons/Strikingly.png new file mode 100644 index 0000000000000000000000000000000000000000..a50cecb31bfb5ffb1206d7d67382f0e1a0ef8104 Binary files /dev/null and b/src/drivers/webextension/images/icons/Strikingly.png differ 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/drivers/webextension/images/icons/SweetAlert2.png b/src/drivers/webextension/images/icons/SweetAlert2.png new file mode 100644 index 0000000000000000000000000000000000000000..afdb2d3c2ad85a6117b9d61475d2157c4c98dc92 Binary files /dev/null and b/src/drivers/webextension/images/icons/SweetAlert2.png differ diff --git a/src/drivers/webextension/images/icons/Swell.svg b/src/drivers/webextension/images/icons/Swell.svg new file mode 100644 index 0000000000000000000000000000000000000000..a118ee64b00ed9eabe9b17e995adf9c3b5f54cc3 --- /dev/null +++ b/src/drivers/webextension/images/icons/Swell.svg @@ -0,0 +1,20 @@ + + + + + + + + + + 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/drivers/webextension/images/icons/Symfony.svg b/src/drivers/webextension/images/icons/Symfony.svg new file mode 100644 index 0000000000000000000000000000000000000000..673baf202dda086f304ed59c858ea6616d505514 --- /dev/null +++ b/src/drivers/webextension/images/icons/Symfony.svg @@ -0,0 +1,39 @@ + + + Symfony logo + + + + image/svg+xml + + Symfony logo + + + + + + + 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/drivers/webextension/images/icons/Taggbox.svg b/src/drivers/webextension/images/icons/Taggbox.svg new file mode 100644 index 0000000000000000000000000000000000000000..96c9ff0651d15d7dc933b574f419b352f7210cfc --- /dev/null +++ b/src/drivers/webextension/images/icons/Taggbox.svg @@ -0,0 +1 @@ +Taggbox-T \ No newline at end of file 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/drivers/webextension/images/icons/Tamago.png b/src/drivers/webextension/images/icons/Tamago.png new file mode 100644 index 0000000000000000000000000000000000000000..c15b06a569a7ca5ad47a84319824a97c2cc1955d Binary files /dev/null and b/src/drivers/webextension/images/icons/Tamago.png differ 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/drivers/webextension/images/icons/Tebex.png b/src/drivers/webextension/images/icons/Tebex.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe7b5ecb51a54068557351aac7c9d68680b499c Binary files /dev/null and b/src/drivers/webextension/images/icons/Tebex.png differ 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/drivers/webextension/images/icons/TencentWaterproofWall.png b/src/drivers/webextension/images/icons/TencentWaterproofWall.png new file mode 100644 index 0000000000000000000000000000000000000000..1a43c29c5cd85269b39c123a0585d5b19881eda4 Binary files /dev/null and b/src/drivers/webextension/images/icons/TencentWaterproofWall.png differ 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/drivers/webextension/images/icons/Texthelp.png b/src/drivers/webextension/images/icons/Texthelp.png new file mode 100644 index 0000000000000000000000000000000000000000..3232e1d76cc8bcabe37c3673761d9bf6fdda8bde Binary files /dev/null and b/src/drivers/webextension/images/icons/Texthelp.png differ 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/drivers/webextension/images/icons/TheHutGroup.png b/src/drivers/webextension/images/icons/TheHutGroup.png new file mode 100644 index 0000000000000000000000000000000000000000..9847bb7b78e996bcd188467cb07fd502deba5288 Binary files /dev/null and b/src/drivers/webextension/images/icons/TheHutGroup.png differ 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/drivers/webextension/images/icons/Ticimax.png b/src/drivers/webextension/images/icons/Ticimax.png new file mode 100644 index 0000000000000000000000000000000000000000..be9d037535e2e4f35498d007f4daa7016239feab Binary files /dev/null and b/src/drivers/webextension/images/icons/Ticimax.png differ 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/drivers/webextension/images/icons/TotalCode.png b/src/drivers/webextension/images/icons/TotalCode.png new file mode 100644 index 0000000000000000000000000000000000000000..27867f94a1f127a790e029e380d336ab8a484732 Binary files /dev/null and b/src/drivers/webextension/images/icons/TotalCode.png differ 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/drivers/webextension/images/icons/TrustArc.svg b/src/drivers/webextension/images/icons/TrustArc.svg new file mode 100644 index 0000000000000000000000000000000000000000..27f47cfcadd579458324439726b2b116c3d6ca55 --- /dev/null +++ b/src/drivers/webextension/images/icons/TrustArc.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/Tsoft.png b/src/drivers/webextension/images/icons/Tsoft.png new file mode 100644 index 0000000000000000000000000000000000000000..df5c8c31fd0d4f09b05ac729faa958eafe94c54f Binary files /dev/null and b/src/drivers/webextension/images/icons/Tsoft.png differ 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/drivers/webextension/images/icons/Uniconsent.png b/src/drivers/webextension/images/icons/Uniconsent.png new file mode 100644 index 0000000000000000000000000000000000000000..216bcda6398ec4fdddee4852618c54dfa04458b3 Binary files /dev/null and b/src/drivers/webextension/images/icons/Uniconsent.png differ 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/drivers/webextension/images/icons/UsableNet.png b/src/drivers/webextension/images/icons/UsableNet.png new file mode 100644 index 0000000000000000000000000000000000000000..178b352c87cee4b230684d5d8128ecba14f02272 Binary files /dev/null and b/src/drivers/webextension/images/icons/UsableNet.png differ diff --git a/src/drivers/webextension/images/icons/User1st.png b/src/drivers/webextension/images/icons/User1st.png new file mode 100644 index 0000000000000000000000000000000000000000..35c4c9d4f2a882529ccc1a8f63b234c76626ce10 Binary files /dev/null and b/src/drivers/webextension/images/icons/User1st.png differ 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/drivers/webextension/images/icons/UserWay.png b/src/drivers/webextension/images/icons/UserWay.png new file mode 100644 index 0000000000000000000000000000000000000000..1f36a488c470bd600ab96e50183d9431973416b5 Binary files /dev/null and b/src/drivers/webextension/images/icons/UserWay.png differ 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/drivers/webextension/images/icons/Venmo.svg b/src/drivers/webextension/images/icons/Venmo.svg new file mode 100644 index 0000000000000000000000000000000000000000..b976e651012bcc768c2cbf94edcfc7e7c3140ebf --- /dev/null +++ b/src/drivers/webextension/images/icons/Venmo.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/drivers/webextension/images/icons/VideoJS.svg b/src/drivers/webextension/images/icons/VideoJS.svg new file mode 100644 index 0000000000000000000000000000000000000000..135d2c6eda23074fd359043d99fbee98dddfd256 --- /dev/null +++ b/src/drivers/webextension/images/icons/VideoJS.svg @@ -0,0 +1,54 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/Visa.svg b/src/drivers/webextension/images/icons/Visa.svg new file mode 100644 index 0000000000000000000000000000000000000000..22f76beefce3b2c83aa6bb60858412b29604e8fa --- /dev/null +++ b/src/drivers/webextension/images/icons/Visa.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/VuePress.svg b/src/drivers/webextension/images/icons/VuePress.svg new file mode 100644 index 0000000000000000000000000000000000000000..1730e2a9d45d3af68438df8c1fafba3ac8fa1c9a --- /dev/null +++ b/src/drivers/webextension/images/icons/VuePress.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 0000000000000000000000000000000000000000..a7ff20fb66aa76d057487d70513953db0df53809 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/drivers/webextension/images/icons/WebsiteCreator.png b/src/drivers/webextension/images/icons/WebsiteCreator.png new file mode 100644 index 0000000000000000000000000000000000000000..54527eac170215473ee077ad8cc4c98012ca4a3d Binary files /dev/null and b/src/drivers/webextension/images/icons/WebsiteCreator.png differ 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/drivers/webextension/images/icons/Weglot.png b/src/drivers/webextension/images/icons/Weglot.png new file mode 100644 index 0000000000000000000000000000000000000000..20c6aa34ec317e95202d615d1488489f00901962 Binary files /dev/null and b/src/drivers/webextension/images/icons/Weglot.png differ 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/drivers/webextension/images/icons/WindowsServer.png b/src/drivers/webextension/images/icons/WindowsServer.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2190b57b31144d11fcfc65913cfdbd41a8090a Binary files /dev/null and b/src/drivers/webextension/images/icons/WindowsServer.png differ 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/drivers/webextension/images/icons/Woltlab Community Framework.png b/src/drivers/webextension/images/icons/Woltlab Community Framework.png new file mode 100644 index 0000000000000000000000000000000000000000..90471a320062dde1b207b495bdd69277b87c5e49 Binary files /dev/null and b/src/drivers/webextension/images/icons/Woltlab Community Framework.png differ diff --git a/src/drivers/webextension/images/icons/WooCommerce.png b/src/drivers/webextension/images/icons/WooCommerce.png new file mode 100644 index 0000000000000000000000000000000000000000..5e2607c4fcde1e2400d05e55fc3b205333ef809a Binary files /dev/null and b/src/drivers/webextension/images/icons/WooCommerce.png differ 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/drivers/webextension/images/icons/XpressEngine.png b/src/drivers/webextension/images/icons/XpressEngine.png new file mode 100644 index 0000000000000000000000000000000000000000..72937886c7072c90f523eb1921b8d847b0cebfb2 Binary files /dev/null and b/src/drivers/webextension/images/icons/XpressEngine.png differ diff --git a/src/drivers/webextension/images/icons/Xtremepush.svg b/src/drivers/webextension/images/icons/Xtremepush.svg new file mode 100755 index 0000000000000000000000000000000000000000..858f28eae25e83660f6363974d81432018d7edcd --- /dev/null +++ b/src/drivers/webextension/images/icons/Xtremepush.svg @@ -0,0 +1,12 @@ + + + + + + + + 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/drivers/webextension/images/icons/ZURB Foundation.png b/src/drivers/webextension/images/icons/ZURB Foundation.png new file mode 100644 index 0000000000000000000000000000000000000000..700895b6b780246ea700f64b7037d1de005602c2 Binary files /dev/null and b/src/drivers/webextension/images/icons/ZURB Foundation.png differ 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/drivers/webextension/images/icons/Zendesk.png b/src/drivers/webextension/images/icons/Zendesk.png new file mode 100644 index 0000000000000000000000000000000000000000..5a08fd621ddd8b011e4eacc1fbd1f29fd0eef22f Binary files /dev/null and b/src/drivers/webextension/images/icons/Zendesk.png differ 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/drivers/webextension/images/icons/Zimbra.png b/src/drivers/webextension/images/icons/Zimbra.png new file mode 100644 index 0000000000000000000000000000000000000000..f81873b391daa697ad66b6786a9042c65ddbbb2d Binary files /dev/null and b/src/drivers/webextension/images/icons/Zimbra.png differ 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/drivers/webextension/images/icons/Zipkin.png b/src/drivers/webextension/images/icons/Zipkin.png new file mode 100644 index 0000000000000000000000000000000000000000..91ed93fd2663bc2b76727389fb12795fdbd2cab3 Binary files /dev/null and b/src/drivers/webextension/images/icons/Zipkin.png differ 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/drivers/webextension/images/icons/acquia-cloud.png b/src/drivers/webextension/images/icons/acquia-cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..22218a41331e0219e805dd4c59e124c5dd161010 Binary files /dev/null and b/src/drivers/webextension/images/icons/acquia-cloud.png differ 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/drivers/webextension/images/icons/adobedtm.png b/src/drivers/webextension/images/icons/adobedtm.png new file mode 100644 index 0000000000000000000000000000000000000000..58a1b1411207834b175f0bec1611a9d0134cb673 Binary files /dev/null and b/src/drivers/webextension/images/icons/adobedtm.png differ 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/drivers/webextension/images/icons/afterpay.png b/src/drivers/webextension/images/icons/afterpay.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8add7d4c373838da4faa93bd8535177adde426 Binary files /dev/null and b/src/drivers/webextension/images/icons/afterpay.png differ 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/drivers/webextension/images/icons/all-in-One-SEO-Pack.png b/src/drivers/webextension/images/icons/all-in-One-SEO-Pack.png new file mode 100644 index 0000000000000000000000000000000000000000..93c84c98bcc1d56c263c1f1b59e37baaf73949d5 Binary files /dev/null and b/src/drivers/webextension/images/icons/all-in-One-SEO-Pack.png differ 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/drivers/webextension/images/icons/amex.png b/src/drivers/webextension/images/icons/amex.png new file mode 100644 index 0000000000000000000000000000000000000000..4567329c6801f7add9013ffc3f9f6b91228ad65e Binary files /dev/null and b/src/drivers/webextension/images/icons/amex.png differ diff --git a/src/drivers/webextension/images/icons/amplitude.png b/src/drivers/webextension/images/icons/amplitude.png new file mode 100644 index 0000000000000000000000000000000000000000..45c475e73d16862efdc908b8c787a3f5941cbcb4 Binary files /dev/null and b/src/drivers/webextension/images/icons/amplitude.png differ 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/drivers/webextension/images/icons/arcgis_icon.png b/src/drivers/webextension/images/icons/arcgis_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..12c6a3a072db30e121e6e3a26adc0a75656eb74b Binary files /dev/null and b/src/drivers/webextension/images/icons/arcgis_icon.png differ 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/drivers/webextension/images/icons/automattic.png b/src/drivers/webextension/images/icons/automattic.png new file mode 100644 index 0000000000000000000000000000000000000000..95fe4da7b4b7f59e37fbf62ca2ad6e9db9636708 Binary files /dev/null and b/src/drivers/webextension/images/icons/automattic.png differ 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/drivers/webextension/images/icons/aws-elb.png b/src/drivers/webextension/images/icons/aws-elb.png new file mode 100644 index 0000000000000000000000000000000000000000..d527693378b93c6604079bf1bcdf4b79cb26db8c Binary files /dev/null and b/src/drivers/webextension/images/icons/aws-elb.png differ 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/drivers/webextension/images/icons/bigcartel.png b/src/drivers/webextension/images/icons/bigcartel.png new file mode 100644 index 0000000000000000000000000000000000000000..1f49fb31b1f5f333a447a3dde80de93c71d074fc Binary files /dev/null and b/src/drivers/webextension/images/icons/bigcartel.png differ diff --git a/src/drivers/webextension/images/icons/bizweb.png b/src/drivers/webextension/images/icons/bizweb.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba6fb89be878a6003f5e56878cd1a1f6d68005b Binary files /dev/null and b/src/drivers/webextension/images/icons/bizweb.png differ diff --git a/src/drivers/webextension/images/icons/bokeh.png b/src/drivers/webextension/images/icons/bokeh.png new file mode 100644 index 0000000000000000000000000000000000000000..86c712e105684df2b0df5fbb49ad8cf05bee7b44 Binary files /dev/null and b/src/drivers/webextension/images/icons/bokeh.png differ diff --git a/src/drivers/webextension/images/icons/boom.svg b/src/drivers/webextension/images/icons/boom.svg new file mode 100644 index 0000000000000000000000000000000000000000..18dac4f2b520e85492d205a2593e67512034ebe5 --- /dev/null +++ b/src/drivers/webextension/images/icons/boom.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/borderfree.png b/src/drivers/webextension/images/icons/borderfree.png new file mode 100644 index 0000000000000000000000000000000000000000..532b684b3653ba85175232274ada3e039df2eda5 Binary files /dev/null and b/src/drivers/webextension/images/icons/borderfree.png differ diff --git a/src/drivers/webextension/images/icons/bubble.png b/src/drivers/webextension/images/icons/bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..dc45cb620c4d8418f7802fd0ed22b413144ee886 Binary files /dev/null and b/src/drivers/webextension/images/icons/bubble.png differ 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/drivers/webextension/images/icons/ccvshop.png b/src/drivers/webextension/images/icons/ccvshop.png new file mode 100644 index 0000000000000000000000000000000000000000..30d3dd01b0874929a51f55e184a64f5164aa778e Binary files /dev/null and b/src/drivers/webextension/images/icons/ccvshop.png differ diff --git a/src/drivers/webextension/images/icons/centminmod.png b/src/drivers/webextension/images/icons/centminmod.png new file mode 100644 index 0000000000000000000000000000000000000000..988f8230a0fa1aef15fb93cb37286b45e85e7f11 Binary files /dev/null and b/src/drivers/webextension/images/icons/centminmod.png differ 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/drivers/webextension/images/icons/chevereto.png b/src/drivers/webextension/images/icons/chevereto.png new file mode 100644 index 0000000000000000000000000000000000000000..5d00efe4194ee101e2594867c0749adba7480c44 Binary files /dev/null and b/src/drivers/webextension/images/icons/chevereto.png differ diff --git a/src/drivers/webextension/images/icons/civic.png b/src/drivers/webextension/images/icons/civic.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3fc1def49b7ab1b5b8a88de2764ab44767f9c1 Binary files /dev/null and b/src/drivers/webextension/images/icons/civic.png differ 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/drivers/webextension/images/icons/cnzz.png b/src/drivers/webextension/images/icons/cnzz.png new file mode 100644 index 0000000000000000000000000000000000000000..00e269b06404cf2f9155d916f6769ceec3b0d3c2 Binary files /dev/null and b/src/drivers/webextension/images/icons/cnzz.png differ diff --git a/src/drivers/webextension/images/icons/coaster-cms.png b/src/drivers/webextension/images/icons/coaster-cms.png new file mode 100644 index 0000000000000000000000000000000000000000..b9a3e2846893c87a5cbefdc98e68446dfbe5c737 Binary files /dev/null and b/src/drivers/webextension/images/icons/coaster-cms.png differ 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/drivers/webextension/images/icons/coinimp.png b/src/drivers/webextension/images/icons/coinimp.png new file mode 100644 index 0000000000000000000000000000000000000000..61961a3fe87d2efd92739289dc969d48e08560a2 Binary files /dev/null and b/src/drivers/webextension/images/icons/coinimp.png differ diff --git a/src/drivers/webextension/images/icons/colormeshop.png b/src/drivers/webextension/images/icons/colormeshop.png new file mode 100644 index 0000000000000000000000000000000000000000..7764c9202d7a3d998ce560775ebb30e8a3c6502d Binary files /dev/null and b/src/drivers/webextension/images/icons/colormeshop.png differ 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/drivers/webextension/images/icons/cookieyes.png b/src/drivers/webextension/images/icons/cookieyes.png new file mode 100644 index 0000000000000000000000000000000000000000..a4cfda3c8366fece71f5fbe097f8d0d51d73fd0c Binary files /dev/null and b/src/drivers/webextension/images/icons/cookieyes.png differ diff --git a/src/drivers/webextension/images/icons/cybersource.png b/src/drivers/webextension/images/icons/cybersource.png new file mode 100644 index 0000000000000000000000000000000000000000..8852f77dfea8c5941ae5efea3d347fc5728ee878 Binary files /dev/null and b/src/drivers/webextension/images/icons/cybersource.png differ diff --git a/src/drivers/webextension/images/icons/datadome.png b/src/drivers/webextension/images/icons/datadome.png new file mode 100644 index 0000000000000000000000000000000000000000..76ec66a2985d10c923549e83c899370970bbbe98 Binary files /dev/null and b/src/drivers/webextension/images/icons/datadome.png differ diff --git a/src/drivers/webextension/images/icons/datocms.svg b/src/drivers/webextension/images/icons/datocms.svg new file mode 100644 index 0000000000000000000000000000000000000000..efc30b36cb2f77b4f517b1a9fc4fbdb8d47a74f6 --- /dev/null +++ b/src/drivers/webextension/images/icons/datocms.svg @@ -0,0 +1,24 @@ + + + + Artboard + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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/drivers/webextension/images/icons/decimal.js.png b/src/drivers/webextension/images/icons/decimal.js.png new file mode 100644 index 0000000000000000000000000000000000000000..83d90d8eee94f10171ca892271e01c6efc7bdf1f Binary files /dev/null and b/src/drivers/webextension/images/icons/decimal.js.png differ diff --git a/src/drivers/webextension/images/icons/deepminer.png b/src/drivers/webextension/images/icons/deepminer.png new file mode 100644 index 0000000000000000000000000000000000000000..83d671bfbf29405ed9972f461ca615befa84c5c0 Binary files /dev/null and b/src/drivers/webextension/images/icons/deepminer.png differ 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/drivers/webextension/images/icons/didomi.png b/src/drivers/webextension/images/icons/didomi.png new file mode 100644 index 0000000000000000000000000000000000000000..4e942c61b5dbb134d2cbe4aeb7461262c485a39e Binary files /dev/null and b/src/drivers/webextension/images/icons/didomi.png differ 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/drivers/webextension/images/icons/duda.png b/src/drivers/webextension/images/icons/duda.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb42be8deed9a829b64eb446f3bd7032f0f1b16 Binary files /dev/null and b/src/drivers/webextension/images/icons/duda.png differ 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/drivers/webextension/images/icons/eZ.svg b/src/drivers/webextension/images/icons/eZ.svg new file mode 100644 index 0000000000000000000000000000000000000000..481d1f14620c16962a0793ab28c56375fc1cbd5b --- /dev/null +++ b/src/drivers/webextension/images/icons/eZ.svg @@ -0,0 +1,59 @@ + + + eZ logo + + + + image/svg+xml + + eZ logo + + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/ecwid.svg b/src/drivers/webextension/images/icons/ecwid.svg new file mode 100644 index 0000000000000000000000000000000000000000..283cda0895e5092a346411739417e1f786a861ad --- /dev/null +++ b/src/drivers/webextension/images/icons/ecwid.svg @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/elm.svg b/src/drivers/webextension/images/icons/elm.svg new file mode 100644 index 0000000000000000000000000000000000000000..f812c50bd70480735e25e3fe84e93bb53259beab --- /dev/null +++ b/src/drivers/webextension/images/icons/elm.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file 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/drivers/webextension/images/icons/ensighten.png b/src/drivers/webextension/images/icons/ensighten.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce08d3d24914be1646219d0083c8ede7a45831b Binary files /dev/null and b/src/drivers/webextension/images/icons/ensighten.png differ diff --git a/src/drivers/webextension/images/icons/epages.png b/src/drivers/webextension/images/icons/epages.png new file mode 100644 index 0000000000000000000000000000000000000000..e703840a47db3fdbbbdd6db8e07a5910ba96c334 Binary files /dev/null and b/src/drivers/webextension/images/icons/epages.png differ 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/drivers/webextension/images/icons/eucookie.png b/src/drivers/webextension/images/icons/eucookie.png new file mode 100644 index 0000000000000000000000000000000000000000..d495dfbdeb7dac29bb1c96512852f03ffd85e228 Binary files /dev/null and b/src/drivers/webextension/images/icons/eucookie.png differ diff --git a/src/drivers/webextension/images/icons/eway.png b/src/drivers/webextension/images/icons/eway.png new file mode 100644 index 0000000000000000000000000000000000000000..15966b3a9863b213fa7226c354d9b9f42b4d8b5d Binary files /dev/null and b/src/drivers/webextension/images/icons/eway.png differ diff --git a/src/drivers/webextension/images/icons/experiencedCMS_Logo.png b/src/drivers/webextension/images/icons/experiencedCMS_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9775cdac9ec676f2e56423a0f3467e8a7dc2f77b Binary files /dev/null and b/src/drivers/webextension/images/icons/experiencedCMS_Logo.png differ diff --git a/src/drivers/webextension/images/icons/fastspring.png b/src/drivers/webextension/images/icons/fastspring.png new file mode 100644 index 0000000000000000000000000000000000000000..bae765b28624461a3ebd22a2685d3c8da6b5f3ef Binary files /dev/null and b/src/drivers/webextension/images/icons/fastspring.png differ diff --git a/src/drivers/webextension/images/icons/fatzebra.png b/src/drivers/webextension/images/icons/fatzebra.png new file mode 100644 index 0000000000000000000000000000000000000000..62a045e432f1530859db2d1b78734a086fcc9583 Binary files /dev/null and b/src/drivers/webextension/images/icons/fatzebra.png differ diff --git a/src/drivers/webextension/images/icons/flarum.png b/src/drivers/webextension/images/icons/flarum.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bfe12e41821a6858845362b26c08dd1daaeda7 Binary files /dev/null and b/src/drivers/webextension/images/icons/flarum.png differ diff --git a/src/drivers/webextension/images/icons/flow.png b/src/drivers/webextension/images/icons/flow.png new file mode 100644 index 0000000000000000000000000000000000000000..bda3be6cc22c2464281dd09a67ba2f422697c05d Binary files /dev/null and b/src/drivers/webextension/images/icons/flow.png differ diff --git a/src/drivers/webextension/images/icons/flywheel.svg b/src/drivers/webextension/images/icons/flywheel.svg new file mode 100644 index 0000000000000000000000000000000000000000..2676989a441ecad67ad76f4c503c864611bae560 --- /dev/null +++ b/src/drivers/webextension/images/icons/flywheel.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/font-awesome.svg b/src/drivers/webextension/images/icons/font-awesome.svg new file mode 100644 index 0000000000000000000000000000000000000000..8c1d44528ba17062ae179a1a3e20fe86aa0e304e --- /dev/null +++ b/src/drivers/webextension/images/icons/font-awesome.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/drivers/webextension/images/icons/freshchat.png b/src/drivers/webextension/images/icons/freshchat.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c84f6836373e118e79f1005fe65cbe40efcfea Binary files /dev/null and b/src/drivers/webextension/images/icons/freshchat.png differ diff --git a/src/drivers/webextension/images/icons/freshmarketer.png b/src/drivers/webextension/images/icons/freshmarketer.png new file mode 100644 index 0000000000000000000000000000000000000000..877ecc62c33f73828face807419f6f15212daecf Binary files /dev/null and b/src/drivers/webextension/images/icons/freshmarketer.png differ diff --git a/src/drivers/webextension/images/icons/futureshop.png b/src/drivers/webextension/images/icons/futureshop.png new file mode 100644 index 0000000000000000000000000000000000000000..06a366a6f428dfd03590d2f23229d584439db012 Binary files /dev/null and b/src/drivers/webextension/images/icons/futureshop.png differ diff --git a/src/drivers/webextension/images/icons/gRPC.png b/src/drivers/webextension/images/icons/gRPC.png new file mode 100644 index 0000000000000000000000000000000000000000..c35182c02bf146be335b8f968ee6865e538e82d3 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/drivers/webextension/images/icons/godaddy.svg b/src/drivers/webextension/images/icons/godaddy.svg new file mode 100644 index 0000000000000000000000000000000000000000..b6eef1c755dd188898ab6d09b0f17d8249376a86 --- /dev/null +++ b/src/drivers/webextension/images/icons/godaddy.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/govuk.png b/src/drivers/webextension/images/icons/govuk.png new file mode 100644 index 0000000000000000000000000000000000000000..f38d9a36f50bf22db4aada9c5d27296af780364d Binary files /dev/null and b/src/drivers/webextension/images/icons/govuk.png differ 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/hcaptcha-symbol-256.png b/src/drivers/webextension/images/icons/hcaptcha-symbol-256.png new file mode 100644 index 0000000000000000000000000000000000000000..ee526dde49b8528f31421445d9c762ae4ef732eb Binary files /dev/null and b/src/drivers/webextension/images/icons/hcaptcha-symbol-256.png differ diff --git a/src/drivers/webextension/images/icons/heroku.svg b/src/drivers/webextension/images/icons/heroku.svg new file mode 100644 index 0000000000000000000000000000000000000000..8d02649e6b7629db913913dd0d25dff92628f991 --- /dev/null +++ b/src/drivers/webextension/images/icons/heroku.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/hinza_advanced_cms.svg b/src/drivers/webextension/images/icons/hinza_advanced_cms.svg new file mode 100644 index 0000000000000000000000000000000000000000..169ee81a9dd2c9677decdbbabef1a004b5526e91 --- /dev/null +++ b/src/drivers/webextension/images/icons/hinza_advanced_cms.svg @@ -0,0 +1,3 @@ + + + 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/drivers/webextension/images/icons/iEXExchanger.png b/src/drivers/webextension/images/icons/iEXExchanger.png new file mode 100644 index 0000000000000000000000000000000000000000..7fdf0e14572cf95de4ef6832441abfdedc6ba8ed Binary files /dev/null and b/src/drivers/webextension/images/icons/iEXExchanger.png differ 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/drivers/webextension/images/icons/iWeb.png b/src/drivers/webextension/images/icons/iWeb.png new file mode 100644 index 0000000000000000000000000000000000000000..cd43e8e050816400b9ae64f73885ed3fe20221c1 Binary files /dev/null and b/src/drivers/webextension/images/icons/iWeb.png differ diff --git a/src/drivers/webextension/images/icons/idosellshop.png b/src/drivers/webextension/images/icons/idosellshop.png new file mode 100644 index 0000000000000000000000000000000000000000..75579c8d65163b072f8cfc03a8214a0c1f28cba0 Binary files /dev/null and b/src/drivers/webextension/images/icons/idosellshop.png differ 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/drivers/webextension/images/icons/inspectlet.png b/src/drivers/webextension/images/icons/inspectlet.png new file mode 100644 index 0000000000000000000000000000000000000000..96cd21550caac2a3f94b523fc5b1ac2ec62ea295 Binary files /dev/null and b/src/drivers/webextension/images/icons/inspectlet.png differ 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/drivers/webextension/images/icons/ionic.png b/src/drivers/webextension/images/icons/ionic.png new file mode 100644 index 0000000000000000000000000000000000000000..43d8ed8d6992cfffdb13a2d1514439f8468ab2ab Binary files /dev/null and b/src/drivers/webextension/images/icons/ionic.png differ 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/drivers/webextension/images/icons/irroba.svg b/src/drivers/webextension/images/icons/irroba.svg new file mode 100644 index 0000000000000000000000000000000000000000..34b6922311d8add3b58d3cec18d1df046a2c3ada --- /dev/null +++ b/src/drivers/webextension/images/icons/irroba.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/drivers/webextension/images/icons/iubenda.png b/src/drivers/webextension/images/icons/iubenda.png new file mode 100644 index 0000000000000000000000000000000000000000..f782516704cb4a98c2f3b170b8eb93eea9860eb1 Binary files /dev/null and b/src/drivers/webextension/images/icons/iubenda.png differ diff --git a/src/drivers/webextension/images/icons/j2store.png b/src/drivers/webextension/images/icons/j2store.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d577e5636e5943b8f7104214e7c8b1bed32b9f Binary files /dev/null and b/src/drivers/webextension/images/icons/j2store.png differ diff --git a/src/drivers/webextension/images/icons/jComponent.png b/src/drivers/webextension/images/icons/jComponent.png new file mode 100644 index 0000000000000000000000000000000000000000..55d31bbbb36095dde01c5342c3af63cfbc9e8bee Binary files /dev/null and b/src/drivers/webextension/images/icons/jComponent.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/drivers/webextension/images/icons/jsdelivr-icon.svg b/src/drivers/webextension/images/icons/jsdelivr-icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..b44681bf3b23ddd359e8e5f20ff1a6d8cc80fc5e --- /dev/null +++ b/src/drivers/webextension/images/icons/jsdelivr-icon.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/drivers/webextension/images/icons/kinsta.svg b/src/drivers/webextension/images/icons/kinsta.svg new file mode 100644 index 0000000000000000000000000000000000000000..971e27db0e6a6600a9d23952705c80323aa93e5b --- /dev/null +++ b/src/drivers/webextension/images/icons/kinsta.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/koha.png b/src/drivers/webextension/images/icons/koha.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c040cb675098878afec0e721a8e4e24889c2bb Binary files /dev/null and b/src/drivers/webextension/images/icons/koha.png differ diff --git a/src/drivers/webextension/images/icons/kolors4u.png b/src/drivers/webextension/images/icons/kolors4u.png new file mode 100644 index 0000000000000000000000000000000000000000..618d5ec187b8bf05c78b5d56cd22e9e4350cb4d6 Binary files /dev/null and b/src/drivers/webextension/images/icons/kolors4u.png differ diff --git a/src/drivers/webextension/images/icons/laterpay.png b/src/drivers/webextension/images/icons/laterpay.png new file mode 100644 index 0000000000000000000000000000000000000000..c48373e21493c79c37298f7b9bde1f0f8e073b30 Binary files /dev/null and b/src/drivers/webextension/images/icons/laterpay.png differ 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/drivers/webextension/images/icons/liquidweb.svg b/src/drivers/webextension/images/icons/liquidweb.svg new file mode 100644 index 0000000000000000000000000000000000000000..bfa137903fe875949bc85ee09eb76bef2d076561 --- /dev/null +++ b/src/drivers/webextension/images/icons/liquidweb.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/litespeed-cache.png b/src/drivers/webextension/images/icons/litespeed-cache.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa3af334e352668b555d15b35d73530011c56b1 Binary files /dev/null and b/src/drivers/webextension/images/icons/litespeed-cache.png differ 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/drivers/webextension/images/icons/melis-platform.svg b/src/drivers/webextension/images/icons/melis-platform.svg new file mode 100644 index 0000000000000000000000000000000000000000..103ae55c643cde74dd66e211a26bcbfb711c5352 --- /dev/null +++ b/src/drivers/webextension/images/icons/melis-platform.svg @@ -0,0 +1,37 @@ + + + + diff --git a/src/drivers/webextension/images/icons/metomic.png b/src/drivers/webextension/images/icons/metomic.png new file mode 100644 index 0000000000000000000000000000000000000000..59e1eff85c163c6b79b9c4c0a3a5e1a64510f43b Binary files /dev/null and b/src/drivers/webextension/images/icons/metomic.png differ 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/drivers/webextension/images/icons/miva.png b/src/drivers/webextension/images/icons/miva.png new file mode 100644 index 0000000000000000000000000000000000000000..6d134206f9223b57bf0dbb34abc3fd370c72511c Binary files /dev/null and b/src/drivers/webextension/images/icons/miva.png differ 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/drivers/webextension/images/icons/mobirise.png b/src/drivers/webextension/images/icons/mobirise.png new file mode 100644 index 0000000000000000000000000000000000000000..31c167e300f4f38e8549b3aedc58f009207219f8 Binary files /dev/null and b/src/drivers/webextension/images/icons/mobirise.png differ 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/drivers/webextension/images/icons/mouseflow.png b/src/drivers/webextension/images/icons/mouseflow.png new file mode 100644 index 0000000000000000000000000000000000000000..80a1c067f77eaec00d206e8f5e5c9f682d391fb8 Binary files /dev/null and b/src/drivers/webextension/images/icons/mouseflow.png differ diff --git a/src/drivers/webextension/images/icons/mycashflow.png b/src/drivers/webextension/images/icons/mycashflow.png new file mode 100644 index 0000000000000000000000000000000000000000..50a8b455f5d0b3ae84d5d0dd2d8e9407021993c1 Binary files /dev/null and b/src/drivers/webextension/images/icons/mycashflow.png differ diff --git a/src/drivers/webextension/images/icons/myfoodlink.png b/src/drivers/webextension/images/icons/myfoodlink.png new file mode 100644 index 0000000000000000000000000000000000000000..76094b00e13ad56ba3bb51d62b35656a744e12cd Binary files /dev/null and b/src/drivers/webextension/images/icons/myfoodlink.png differ diff --git a/src/drivers/webextension/images/icons/nepso.svg b/src/drivers/webextension/images/icons/nepso.svg new file mode 100644 index 0000000000000000000000000000000000000000..abb7c0cb1461b8385cc81fcc5792faa6216a76a5 --- /dev/null +++ b/src/drivers/webextension/images/icons/nepso.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/nivsoft.png b/src/drivers/webextension/images/icons/nivsoft.png new file mode 100644 index 0000000000000000000000000000000000000000..8194dab0a83f8f5bbbd4a0a1b71c9d4723a9916d Binary files /dev/null and b/src/drivers/webextension/images/icons/nivsoft.png differ 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 0000000000000000000000000000000000000000..9def18ea749e4426e5c932ce69b0df22aa3d2f3d 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/drivers/webextension/images/icons/openpay.png b/src/drivers/webextension/images/icons/openpay.png new file mode 100644 index 0000000000000000000000000000000000000000..88417f89fb2fea95b9515a75a1c0899fc70da04f Binary files /dev/null and b/src/drivers/webextension/images/icons/openpay.png differ 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/drivers/webextension/images/icons/osano.png b/src/drivers/webextension/images/icons/osano.png new file mode 100644 index 0000000000000000000000000000000000000000..4a230890c18592e6f09fef6325a93af335fc1d2e Binary files /dev/null and b/src/drivers/webextension/images/icons/osano.png differ diff --git a/src/drivers/webextension/images/icons/otrs.png b/src/drivers/webextension/images/icons/otrs.png new file mode 100644 index 0000000000000000000000000000000000000000..57a8c4ae88920461d209e40896a6e370c38e7a33 Binary files /dev/null and b/src/drivers/webextension/images/icons/otrs.png differ 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/drivers/webextension/images/icons/pagefly.png b/src/drivers/webextension/images/icons/pagefly.png new file mode 100644 index 0000000000000000000000000000000000000000..20917217f27a688ea5d9b30bb8529e35aa252638 Binary files /dev/null and b/src/drivers/webextension/images/icons/pagefly.png differ diff --git a/src/drivers/webextension/images/icons/pagely.svg b/src/drivers/webextension/images/icons/pagely.svg new file mode 100644 index 0000000000000000000000000000000000000000..410712e657c2f3b9e26b77fd49ccded8ca302104 --- /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/drivers/webextension/images/icons/pelican.png b/src/drivers/webextension/images/icons/pelican.png new file mode 100644 index 0000000000000000000000000000000000000000..44b8da8d53de10830aa8ff91048eaa3df4972752 Binary files /dev/null and b/src/drivers/webextension/images/icons/pelican.png differ 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/drivers/webextension/images/icons/perimeterx.svg b/src/drivers/webextension/images/icons/perimeterx.svg new file mode 100644 index 0000000000000000000000000000000000000000..f8c76bb9ef211d6dae5667ba2cdc89fdf4a8905c --- /dev/null +++ b/src/drivers/webextension/images/icons/perimeterx.svg @@ -0,0 +1,43 @@ + + + + PerimeterX + Perimeterx Logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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/drivers/webextension/images/icons/pinoox.png b/src/drivers/webextension/images/icons/pinoox.png new file mode 100644 index 0000000000000000000000000000000000000000..9974e06c425e295352163d772694cf78b90251f2 Binary files /dev/null and b/src/drivers/webextension/images/icons/pinoox.png differ diff --git a/src/drivers/webextension/images/icons/pinpayments.png b/src/drivers/webextension/images/icons/pinpayments.png new file mode 100644 index 0000000000000000000000000000000000000000..f66ec715d606289dea303085e7a55562ca6511fb Binary files /dev/null and b/src/drivers/webextension/images/icons/pinpayments.png differ 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/drivers/webextension/images/icons/plentymarkets.svg b/src/drivers/webextension/images/icons/plentymarkets.svg new file mode 100644 index 0000000000000000000000000000000000000000..c16da38ffaf8a416ca76829ebb415a76a7ec505b --- /dev/null +++ b/src/drivers/webextension/images/icons/plentymarkets.svg @@ -0,0 +1 @@ + \ No newline at end of file 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 0000000000000000000000000000000000000000..617750c62d4ad6bc78ad82ed5dfa50d522b760a2 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/drivers/webextension/images/icons/projesoft.png b/src/drivers/webextension/images/icons/projesoft.png new file mode 100644 index 0000000000000000000000000000000000000000..2a89a2b2d4fdaa33b4dd09fe17a335cf9e342045 Binary files /dev/null and b/src/drivers/webextension/images/icons/projesoft.png differ 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/drivers/webextension/images/icons/redoc.png b/src/drivers/webextension/images/icons/redoc.png new file mode 100644 index 0000000000000000000000000000000000000000..15c0e5c1ca18e29fe2aaf8f3a960d9d69bd58f87 Binary files /dev/null and b/src/drivers/webextension/images/icons/redoc.png differ diff --git a/src/drivers/webextension/images/icons/revslider.png b/src/drivers/webextension/images/icons/revslider.png new file mode 100644 index 0000000000000000000000000000000000000000..25e7aebb96ff8b7a7f4f2ac0547de1caf161acd2 Binary files /dev/null and b/src/drivers/webextension/images/icons/revslider.png differ diff --git a/src/drivers/webextension/images/icons/riskified.png b/src/drivers/webextension/images/icons/riskified.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c09ab6b95b41a367729502e27a21a211582b56 Binary files /dev/null and b/src/drivers/webextension/images/icons/riskified.png differ 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/drivers/webextension/images/icons/salecycle.svg b/src/drivers/webextension/images/icons/salecycle.svg new file mode 100644 index 0000000000000000000000000000000000000000..c1670dc0edd03b40f8d18632678e3b14d8255f10 --- /dev/null +++ b/src/drivers/webextension/images/icons/salecycle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/salesfloor.png b/src/drivers/webextension/images/icons/salesfloor.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d348562cf14121745900fe353aae8733756251 Binary files /dev/null and b/src/drivers/webextension/images/icons/salesfloor.png differ diff --git a/src/drivers/webextension/images/icons/sazito-phoenix.png b/src/drivers/webextension/images/icons/sazito-phoenix.png new file mode 100644 index 0000000000000000000000000000000000000000..4c60b3eb7865b3ebb86b7fb2b1926f4ef4cb2356 Binary files /dev/null and b/src/drivers/webextension/images/icons/sazito-phoenix.png differ 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/drivers/webextension/images/icons/sectionio.svg b/src/drivers/webextension/images/icons/sectionio.svg new file mode 100644 index 0000000000000000000000000000000000000000..f840642dd3b01500cc6f14f0310265bc1fa5f067 --- /dev/null +++ b/src/drivers/webextension/images/icons/sectionio.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/seersco.png b/src/drivers/webextension/images/icons/seersco.png new file mode 100644 index 0000000000000000000000000000000000000000..d17176314be94195060ea596e477bc63578754b4 Binary files /dev/null and b/src/drivers/webextension/images/icons/seersco.png differ diff --git a/src/drivers/webextension/images/icons/seravo.svg b/src/drivers/webextension/images/icons/seravo.svg new file mode 100644 index 0000000000000000000000000000000000000000..0f946fed7b728063f69a9f3680570829ff9d5f96 --- /dev/null +++ b/src/drivers/webextension/images/icons/seravo.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/shopline.png b/src/drivers/webextension/images/icons/shopline.png new file mode 100644 index 0000000000000000000000000000000000000000..0a33610873a81d6fba591cafcad39a8adf5815b8 Binary files /dev/null and b/src/drivers/webextension/images/icons/shopline.png differ diff --git a/src/drivers/webextension/images/icons/signal.png b/src/drivers/webextension/images/icons/signal.png new file mode 100644 index 0000000000000000000000000000000000000000..ef94ad6cd0b467fa1269ab64e420d897786bab99 Binary files /dev/null and b/src/drivers/webextension/images/icons/signal.png differ diff --git a/src/drivers/webextension/images/icons/simbel.svg b/src/drivers/webextension/images/icons/simbel.svg new file mode 100644 index 0000000000000000000000000000000000000000..3cba9e85b72366f1c165e861eb450534883c53b4 --- /dev/null +++ b/src/drivers/webextension/images/icons/simbel.svg @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/siteground.svg b/src/drivers/webextension/images/icons/siteground.svg new file mode 100644 index 0000000000000000000000000000000000000000..cba0c15f3fe381297e1cfa2aa9d72a9511eeea49 --- /dev/null +++ b/src/drivers/webextension/images/icons/siteground.svg @@ -0,0 +1,9 @@ + + + + + + + + + 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 0000000000000000000000000000000000000000..88f781bbafa9be835f5ff138d047ad09e79078a8 --- /dev/null +++ b/src/drivers/webextension/images/icons/splitbee.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/drivers/webextension/images/icons/splitit.png b/src/drivers/webextension/images/icons/splitit.png new file mode 100644 index 0000000000000000000000000000000000000000..37a1b259a515a6c82a0fd17ae07ec9b368315de6 Binary files /dev/null and b/src/drivers/webextension/images/icons/splitit.png differ 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/drivers/webextension/images/icons/styled-components.png b/src/drivers/webextension/images/icons/styled-components.png new file mode 100644 index 0000000000000000000000000000000000000000..bbc569d8927097da3bea57f33e3d3b6da48865a9 Binary files /dev/null and b/src/drivers/webextension/images/icons/styled-components.png differ diff --git a/src/drivers/webextension/images/icons/sucuri.png b/src/drivers/webextension/images/icons/sucuri.png new file mode 100644 index 0000000000000000000000000000000000000000..8378d8cd9a353637fbe37b7a479692e564155d9f Binary files /dev/null and b/src/drivers/webextension/images/icons/sucuri.png differ diff --git a/src/drivers/webextension/images/icons/svbtle.png b/src/drivers/webextension/images/icons/svbtle.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef6b8a16ffec195cfe0c6386920fc145001ccd0 Binary files /dev/null and b/src/drivers/webextension/images/icons/svbtle.png differ 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/drivers/webextension/images/icons/swiper.svg b/src/drivers/webextension/images/icons/swiper.svg new file mode 100644 index 0000000000000000000000000000000000000000..63d5a4a32fb440d3c9462bdea2b161520bda9802 --- /dev/null +++ b/src/drivers/webextension/images/icons/swiper.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/drivers/webextension/images/icons/sympa.png b/src/drivers/webextension/images/icons/sympa.png new file mode 100644 index 0000000000000000000000000000000000000000..f783db293c3eb2cd9706d0d22300137ff9fb8020 Binary files /dev/null and b/src/drivers/webextension/images/icons/sympa.png differ 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/drivers/webextension/images/icons/tagcommander.png b/src/drivers/webextension/images/icons/tagcommander.png new file mode 100644 index 0000000000000000000000000000000000000000..3ebfbe2b2738c0d625a9d32bb245baac7690db8a Binary files /dev/null and b/src/drivers/webextension/images/icons/tagcommander.png differ 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/drivers/webextension/images/icons/tajs.png b/src/drivers/webextension/images/icons/tajs.png new file mode 100644 index 0000000000000000000000000000000000000000..7b71d803b371be2934efd23285d7870ae6ece9db Binary files /dev/null and b/src/drivers/webextension/images/icons/tajs.png differ diff --git a/src/drivers/webextension/images/icons/termly.svg b/src/drivers/webextension/images/icons/termly.svg new file mode 100644 index 0000000000000000000000000000000000000000..8fabdfc7ede1ba9064e7863896ef47795aa11359 --- /dev/null +++ b/src/drivers/webextension/images/icons/termly.svg @@ -0,0 +1,7 @@ + + + \ No newline at end of file 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/drivers/webextension/images/icons/tnsi.png b/src/drivers/webextension/images/icons/tnsi.png new file mode 100644 index 0000000000000000000000000000000000000000..d05a1878dea488eb50fd469cda2bd92e4abba329 Binary files /dev/null and b/src/drivers/webextension/images/icons/tnsi.png differ diff --git a/src/drivers/webextension/images/icons/total.js.png b/src/drivers/webextension/images/icons/total.js.png new file mode 100644 index 0000000000000000000000000000000000000000..a792fdf0fc6c98048831c31fd0e492259dc97818 Binary files /dev/null and b/src/drivers/webextension/images/icons/total.js.png differ diff --git a/src/drivers/webextension/images/icons/transifex.png b/src/drivers/webextension/images/icons/transifex.png new file mode 100644 index 0000000000000000000000000000000000000000..0d377d8dba61b9f695d177abf50fa78697103f31 Binary files /dev/null and b/src/drivers/webextension/images/icons/transifex.png differ 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/drivers/webextension/images/icons/tray.png b/src/drivers/webextension/images/icons/tray.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2ee05fbda685e9fa489f004ef8ae09c65a934e Binary files /dev/null and b/src/drivers/webextension/images/icons/tray.png differ 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/drivers/webextension/images/icons/varbase.png b/src/drivers/webextension/images/icons/varbase.png new file mode 100644 index 0000000000000000000000000000000000000000..5374d8e88964e9b3f9df408e27abf507c23b7c31 Binary files /dev/null and b/src/drivers/webextension/images/icons/varbase.png differ diff --git a/src/drivers/webextension/images/icons/vercel.svg b/src/drivers/webextension/images/icons/vercel.svg new file mode 100644 index 0000000000000000000000000000000000000000..552a450b42163012b7e6ab7cf56ef57100df307a --- /dev/null +++ b/src/drivers/webextension/images/icons/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file 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/drivers/webextension/images/icons/vigbo.png b/src/drivers/webextension/images/icons/vigbo.png new file mode 100644 index 0000000000000000000000000000000000000000..97900eaaea55d2b462b0941582359ff26a878056 Binary files /dev/null and b/src/drivers/webextension/images/icons/vigbo.png differ diff --git a/src/drivers/webextension/images/icons/visa.png b/src/drivers/webextension/images/icons/visa.png new file mode 100644 index 0000000000000000000000000000000000000000..5d8698c790379501fa5d238ab7b4ff4bfeb82161 Binary files /dev/null and b/src/drivers/webextension/images/icons/visa.png differ diff --git a/src/drivers/webextension/images/icons/vue.svg b/src/drivers/webextension/images/icons/vue.svg new file mode 100644 index 0000000000000000000000000000000000000000..71c1cfb9afa00a7c8579ca505fb3f5ddcafee7be --- /dev/null +++ b/src/drivers/webextension/images/icons/vue.svg @@ -0,0 +1,4 @@ + + + + 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/drivers/webextension/images/icons/webAR.svg b/src/drivers/webextension/images/icons/webAR.svg new file mode 100644 index 0000000000000000000000000000000000000000..7fac0a5af12975d9ae4c2dc77ca93d781adb2cd4 --- /dev/null +++ b/src/drivers/webextension/images/icons/webAR.svg @@ -0,0 +1,4 @@ + + + + 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/drivers/webextension/images/icons/webdev.png b/src/drivers/webextension/images/icons/webdev.png new file mode 100644 index 0000000000000000000000000000000000000000..fe13b235f91413b0325965dd130ba644de9d4dba Binary files /dev/null and b/src/drivers/webextension/images/icons/webdev.png differ 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/drivers/webextension/images/icons/webmine.png b/src/drivers/webextension/images/icons/webmine.png new file mode 100644 index 0000000000000000000000000000000000000000..ee927c3a23133d0a8a67e1802bbef92143a216c3 Binary files /dev/null and b/src/drivers/webextension/images/icons/webmine.png differ 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/drivers/webextension/images/icons/websocket.png b/src/drivers/webextension/images/icons/websocket.png new file mode 100644 index 0000000000000000000000000000000000000000..b3edb9fca506692a84c0bc9ba3945456fcb9800f Binary files /dev/null and b/src/drivers/webextension/images/icons/websocket.png differ diff --git a/src/drivers/webextension/images/icons/welcart.png b/src/drivers/webextension/images/icons/welcart.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ce90eafb9c9b66028391e80088b7181816354d Binary files /dev/null and b/src/drivers/webextension/images/icons/welcart.png differ 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/drivers/webextension/images/icons/wpvip.svg b/src/drivers/webextension/images/icons/wpvip.svg new file mode 100644 index 0000000000000000000000000000000000000000..788a4fcbe8b37ec3d0451d42ad5598604dc91aa7 --- /dev/null +++ b/src/drivers/webextension/images/icons/wpvip.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/icons/xeora.png b/src/drivers/webextension/images/icons/xeora.png new file mode 100644 index 0000000000000000000000000000000000000000..761a4ba411b0f9c1395c48016415d46f8050db9e Binary files /dev/null and b/src/drivers/webextension/images/icons/xeora.png differ diff --git a/src/drivers/webextension/images/icons/xonic.png b/src/drivers/webextension/images/icons/xonic.png new file mode 100644 index 0000000000000000000000000000000000000000..59bf40fc5236f125498cb8bc5cdbf76419b0e1f4 Binary files /dev/null and b/src/drivers/webextension/images/icons/xonic.png differ 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/drivers/webextension/images/icons/xwiki.png b/src/drivers/webextension/images/icons/xwiki.png new file mode 100644 index 0000000000000000000000000000000000000000..2443a81a264e0c21783dda9e0d9d80b9a38d0cd8 Binary files /dev/null and b/src/drivers/webextension/images/icons/xwiki.png differ 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/drivers/webextension/images/icons/yepcomm.png b/src/drivers/webextension/images/icons/yepcomm.png new file mode 100644 index 0000000000000000000000000000000000000000..fc16c293b6bc5c4de6d27ae056165fd786dbffc1 Binary files /dev/null and b/src/drivers/webextension/images/icons/yepcomm.png differ diff --git a/src/drivers/webextension/images/icons/zip_pay.svg b/src/drivers/webextension/images/icons/zip_pay.svg new file mode 100644 index 0000000000000000000000000000000000000000..23c929c37180bf2a7ec74b4078bad09da6f9259b --- /dev/null +++ b/src/drivers/webextension/images/icons/zip_pay.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/drivers/webextension/images/logo-purple.svg b/src/drivers/webextension/images/logo-purple.svg new file mode 100644 index 0000000000000000000000000000000000000000..e5e67bb21574055cca8cb326d628cbb152820011 --- /dev/null +++ b/src/drivers/webextension/images/logo-purple.svg @@ -0,0 +1,29 @@ + + + + Logo + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/src/drivers/webextension/images/pin-active.svg b/src/drivers/webextension/images/pin-active.svg deleted file mode 100644 index 12462f304feba10fa41fd864fcd8d9bd17493b41..0000000000000000000000000000000000000000 --- a/src/drivers/webextension/images/pin-active.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/src/drivers/webextension/images/pin.svg b/src/drivers/webextension/images/pin.svg deleted file mode 100644 index 20e42e6d06adb1648f0b756166a6952a4ac3125b..0000000000000000000000000000000000000000 --- a/src/drivers/webextension/images/pin.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/src/drivers/webextension/images/twitter.png b/src/drivers/webextension/images/twitter.png deleted file mode 100644 index e20284ddf2ce763c5a010720c901f29c7900a2db..0000000000000000000000000000000000000000 Binary files a/src/drivers/webextension/images/twitter.png and /dev/null differ diff --git a/src/drivers/webextension/js/content.js b/src/drivers/webextension/js/content.js index 82713d79bba9f041d3170746b8a072469422570a..853ae36ae65acfa743c782bd3d68e40736e4f003 100644 --- a/src/drivers/webextension/js/content.js +++ b/src/drivers/webextension/js/content.js @@ -1,87 +1,145 @@ -/** global: browser */ -/** global: XMLSerializer */ - -/* global browser */ +'use strict' /* eslint-env browser */ +/* globals chrome */ + +const Content = { + /** + * Initialise content script + */ + async init() { + if (await Content.driver('isDisabledDomain', location.href)) { + return + } -const port = browser.runtime.connect({ - name: 'content.js', -}); - -if (typeof browser !== 'undefined' && typeof document.body !== 'undefined') { - try { - port.postMessage({ id: 'init' }); - - // HTML - let html = new XMLSerializer().serializeToString(document); + await new Promise((resolve) => setTimeout(resolve, 1000)) - const chunks = []; - const maxCols = 2000; - const maxRows = 3000; - const rows = html.length / maxCols; + try { + // HTML + let html = new XMLSerializer().serializeToString(document) - let i; + // Discard the middle portion of HTML to avoid performance degradation on large pages + const chunks = [] + const maxCols = 2000 + const maxRows = 3000 + const rows = html.length / maxCols - for (i = 0; i < rows; i += 1) { - if (i < maxRows / 2 || i > rows - maxRows / 2) { - chunks.push(html.slice(i * maxCols, (i + 1) * maxCols)); + for (let i = 0; i < rows; i += 1) { + if (i < maxRows / 2 || i > rows - maxRows / 2) { + chunks.push(html.slice(i * maxCols, (i + 1) * maxCols)) + } } - } - - html = chunks.join('\n'); - - // Scripts - const scripts = Array.prototype.slice - .apply(document.scripts) - .filter(script => script.src) - .map(script => script.src) - .filter(script => script.indexOf('data:text/javascript;') !== 0); - - port.postMessage({ id: 'analyze', subject: { html, scripts } }); - // JavaScript variables - const script = document.createElement('script'); + html = chunks.join('\n') + + // Determine language based on the HTML lang attribute or content + const language = + document.documentElement.getAttribute('lang') || + document.documentElement.getAttribute('xml:lang') || + (await new Promise((resolve) => + chrome.i18n.detectLanguage + ? chrome.i18n.detectLanguage(html, ({ languages }) => + resolve( + languages + .filter(({ percentage }) => percentage >= 75) + .map(({ language: lang }) => lang)[0] + ) + ) + : resolve() + )) + + // Script tags + const scripts = Array.from(document.scripts) + .filter(({ src }) => src) + .map(({ src }) => src) + .filter((script) => script.indexOf('data:text/javascript;') !== 0) + + // Meta tags + const meta = Array.from(document.querySelectorAll('meta')).reduce( + (metas, meta) => { + const key = meta.getAttribute('name') || meta.getAttribute('property') + + if (key) { + metas[key.toLowerCase()] = [meta.getAttribute('content')] + } + + return metas + }, + {} + ) + + Content.driver('onContentLoad', [ + location.href, + { html, scripts, meta }, + language + ]) + + Content.onGetTechnologies(await Content.driver('getTechnologies')) + } catch (error) { + Content.driver('error', error) + } + }, + + driver(func, args) { + return new Promise((resolve, reject) => { + chrome.runtime.sendMessage( + { + source: 'content.js', + func, + args: args ? (Array.isArray(args) ? args : [args]) : [] + }, + (response) => { + chrome.runtime.lastError + ? reject(new Error(chrome.runtime.lastError.message)) + : resolve(response) + } + ) + }) + }, + + /** + * Callback for getTechnologies + * @param {Array} technologies + */ + onGetTechnologies(technologies = []) { + // Inject a script tag into the page to access methods of the window object + const script = document.createElement('script') script.onload = () => { - const onMessage = (event) => { - if (event.data.id !== 'js') { - return; + const onMessage = ({ data }) => { + if (!data.wappalyzer || !data.wappalyzer.js) { + return } - window.removeEventListener('message', onMessage); + window.removeEventListener('message', onMessage) - port.postMessage({ id: 'analyze', subject: { js: event.data.js } }); + chrome.runtime.sendMessage({ + source: 'content.js', + func: 'analyzeJs', + args: [location.href.split('#')[0], data.wappalyzer.js] + }) - script.remove(); - }; + script.remove() + } - window.addEventListener('message', onMessage); + window.addEventListener('message', onMessage) - port.postMessage({ id: 'get_js_patterns' }); - }; + window.postMessage({ + wappalyzer: { + technologies: technologies + .filter(({ js }) => Object.keys(js).length) + .map(({ name, js }) => ({ name, chains: Object.keys(js) })) + } + }) + } - script.setAttribute('src', browser.extension.getURL('js/inject.js')); + script.setAttribute('src', chrome.extension.getURL('js/inject.js')) - document.body.appendChild(script); - } catch (error) { - port.postMessage({ id: 'log', subject: error }); + document.body.appendChild(script) } } -port.onMessage.addListener((message) => { - switch (message.id) { - case 'get_js_patterns': - postMessage({ - id: 'patterns', - patterns: message.response.patterns, - }, window.location.href); - - break; - default: - // Do nothing - } -}); - -// https://stackoverflow.com/a/44774834 -// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/executeScript#Return_value -undefined; // eslint-disable-line no-unused-expressions +if (/complete|interactive|loaded/.test(document.readyState)) { + Content.init() +} else { + document.addEventListener('DOMContentLoaded', Content.init) +} diff --git a/src/drivers/webextension/js/driver.js b/src/drivers/webextension/js/driver.js index 327d31717434c5d557e947f2b26ebbda086cecfe..7a338358b4b391f4b6082966307b586468ebc724 100644 --- a/src/drivers/webextension/js/driver.js +++ b/src/drivers/webextension/js/driver.js @@ -1,394 +1,619 @@ -/** - * WebExtension driver - */ - +'use strict' /* eslint-env browser */ -/* global browser, chrome, fetch, Wappalyzer */ - -/** global: browser */ -/** global: chrome */ -/** global: fetch */ -/** global: Wappalyzer */ - -const wappalyzer = new Wappalyzer(); - -const tabCache = {}; -const robotsTxtQueue = {}; - -let categoryOrder = []; +/* globals chrome, Wappalyzer, Utils */ + +const { + setTechnologies, + setCategories, + analyze, + analyzeManyToMany, + resolve +} = Wappalyzer +const { agent, promisify, getOption, setOption, open } = Utils + +const expiry = 1000 * 60 * 60 * 24 + +const Driver = { + lastPing: Date.now(), + + /** + * Initialise driver + */ + async init() { + await Driver.loadTechnologies() + + const hostnameCache = await getOption('hostnames', {}) + + Driver.cache = { + hostnames: Object.keys(hostnameCache).reduce( + (cache, hostname) => ({ + ...cache, + [hostname]: { + ...hostnameCache[hostname], + detections: hostnameCache[hostname].detections.map( + ({ + technology: name, + pattern: { regex, confidence }, + version + }) => ({ + technology: Wappalyzer.technologies.find( + ({ name: _name }) => name === _name + ), + pattern: { + regex: new RegExp(regex, 'i'), + confidence + }, + version + }) + ) + } + }), + {} + ), + tabs: {}, + robots: await getOption('robots', {}), + ads: await getOption('ads', []) + } -browser.tabs.onRemoved.addListener((tabId) => { - tabCache[tabId] = null; -}); + chrome.browserAction.setBadgeBackgroundColor({ color: '#6B39BD' }, () => {}) -function userAgent() { - const url = chrome.extension.getURL('/'); + chrome.webRequest.onCompleted.addListener( + Driver.onWebRequestComplete, + { urls: ['http://*/*', 'https://*/*'], types: ['main_frame'] }, + ['responseHeaders'] + ) - if (url.match(/^chrome-/)) { - return 'chrome'; - } + chrome.tabs.onRemoved.addListener((id) => (Driver.cache.tabs[id] = null)) - if (url.match(/^moz-/)) { - return 'firefox'; - } + // Enable messaging between scripts + chrome.runtime.onMessage.addListener(Driver.onMessage) - if (url.match(/^ms-browser-/)) { - return 'edge'; - } -} + const { version } = chrome.runtime.getManifest() + const previous = await getOption('version') + const upgradeMessage = await getOption('upgradeMessage', true) -/** - * Get a value from localStorage - */ -function getOption(name, defaultValue = null) { - return new Promise(async (resolve, reject) => { - let value = defaultValue; + if (previous === null) { + open('https://www.wappalyzer.com/installed') + } else if (version !== previous && upgradeMessage) { + // open(`https://www.wappalyzer.com/upgraded?v${version}`, false) + } + await setOption('version', version) + }, + + /** + * Log debug messages to the console + * @param {String} message + * @param {String} source + * @param {String} type + */ + log(message, source = 'driver', type = 'log') { + // eslint-disable-next-line no-console + console[type](`wappalyzer | ${source} |`, message) + }, + + /** + * Log errors to the console + * @param {String} error + * @param {String} source + */ + error(error, source = 'driver') { + Driver.log(error, source, 'error') + }, + + /** + * Load technologies and categories into memory + */ + async loadTechnologies() { try { - const option = await browser.storage.local.get(name); + const { apps: technologies, categories } = await ( + await fetch(chrome.extension.getURL('apps.json')) + ).json() - if (option[name] !== undefined) { - value = option[name]; - } + setTechnologies(technologies) + setCategories(categories) } catch (error) { - wappalyzer.log(error.message, 'driver', 'error'); - - return reject(error.message); + Driver.error(error) } - - return resolve(value); - }); -} - -/** - * Set a value in localStorage - */ -function setOption(name, value) { - return new Promise(async (resolve, reject) => { + }, + + /** + * Perform a HTTP POST request + * @param {String} url + * @param {String} body + */ + post(url, body) { try { - await browser.storage.local.set({ [name]: value }); + return fetch(url, { + method: 'POST', + body: JSON.stringify(body) + }) } catch (error) { - wappalyzer.log(error.message, 'driver', 'error'); - - return reject(error.message); + throw new Error(error.message || error.toString()) + } + }, + + /** + * Analyse JavaScript variables + * @param {String} url + * @param {Array} js + */ + async analyzeJs(url, js) { + await Driver.onDetect( + url, + Array.prototype.concat.apply( + [], + js.map(({ name, chain, value }) => + analyzeManyToMany( + Wappalyzer.technologies.find(({ name: _name }) => name === _name), + 'js', + { [chain]: [value] } + ) + ) + ) + ) + }, + + /** + * Enable scripts to call Driver functions through messaging + * @param {Object} message + * @param {Object} sender + * @param {Function} callback + */ + onMessage({ source, func, args }, sender, callback) { + if (!func) { + return } - return resolve(); - }); -} - -/** - * Open a tab - */ -function openTab(args) { - browser.tabs.create({ - url: args.url, - active: args.background === undefined || !args.background, - }); -} + Driver.log({ source, func, args }) -/** - * Make a POST request - */ -async function post(url, body) { - try { - const response = await fetch(url, { - method: 'POST', - body: JSON.stringify(body), - }); - - wappalyzer.log(`POST ${url}: ${response.status}`, 'driver'); - } catch (error) { - wappalyzer.log(`POST ${url}: ${error}`, 'driver', 'error'); - } -} + if (!Driver[func]) { + Driver.error(new Error(`Method does not exist: Driver.${func}`)) -// Capture response headers -browser.webRequest.onCompleted.addListener(async (request) => { - const headers = {}; + return + } - if (request.responseHeaders) { - const url = wappalyzer.parseUrl(request.url); + Promise.resolve(Driver[func].call(Driver[func], ...(args || []))) + .then(callback) + .catch(Driver.error) - let tab; + return !!callback + }, - try { - [tab] = await browser.tabs.query({ url: [url.href] }); - } catch (error) { - wappalyzer.log(error, 'driver', 'error'); + /** + * Analyse response headers + * @param {Object} request + */ + async onWebRequestComplete(request) { + if (await Driver.isDisabledDomain(request.url)) { + return } - if (tab) { - request.responseHeaders.forEach((header) => { - const name = header.name.toLowerCase(); + if (request.responseHeaders) { + const headers = {} - headers[name] = headers[name] || []; - - headers[name].push((header.value || header.binaryValue || '').toString()); - }); - - if (headers['content-type'] && /\/x?html/.test(headers['content-type'][0])) { - wappalyzer.analyze(url, { headers }, { tab }); + try { + const [tab] = await promisify(chrome.tabs, 'query', { + url: [request.url] + }) + + if (tab) { + request.responseHeaders.forEach((header) => { + const name = header.name.toLowerCase() + + headers[name] = headers[name] || [] + + headers[name].push( + (header.value || header.binaryValue || '').toString() + ) + }) + + if ( + headers['content-type'] && + /\/x?html/.test(headers['content-type'][0]) + ) { + await Driver.onDetect(request.url, analyze({ headers })) + } + } + } catch (error) { + Driver.error(error) } } - } -}, { urls: ['http://*/*', 'https://*/*'], types: ['main_frame'] }, ['responseHeaders']); - -browser.runtime.onConnect.addListener((port) => { - port.onMessage.addListener(async (message) => { - if (message.id === undefined) { - return; - } - - if (message.id !== 'log') { - wappalyzer.log(`Message from ${port.name}: ${message.id}`, 'driver'); + }, + + /** + * Process return values from content.js + * @param {String} url + * @param {Object} items + * @param {String} language + */ + async onContentLoad(url, items, language) { + try { + const { hostname } = new URL(url) + + items.cookies = ( + await promisify(chrome.cookies, 'getAll', { + domain: `.${hostname}` + }) + ).reduce( + (cookies, { name, value }) => ({ + ...cookies, + [name]: [value] + }), + {} + ) + + await Driver.onDetect(url, analyze({ url, ...items }), language, true) + } catch (error) { + Driver.error(error) } + }, + + /** + * Get all technologies + */ + getTechnologies() { + return Wappalyzer.technologies + }, + + /** + * Check if Wappalyzer has been disabled for the domain + */ + async isDisabledDomain(url) { + try { + const { hostname } = new URL(url) - const pinnedCategory = await getOption('pinnedCategory'); - - const url = wappalyzer.parseUrl(port.sender.tab ? port.sender.tab.url : ''); - - const cookies = await browser.cookies.getAll({ domain: `.${url.hostname}` }); - - let response; - - switch (message.id) { - case 'log': - wappalyzer.log(message.subject, message.source); - - break; - case 'init': - wappalyzer.analyze(url, { cookies }, { tab: port.sender.tab }); - - break; - case 'analyze': - wappalyzer.analyze(url, message.subject, { tab: port.sender.tab }); - - await setOption('hostnameCache', wappalyzer.hostnameCache); - - break; - case 'ad_log': - wappalyzer.cacheDetectedAds(message.subject); - - break; - case 'get_apps': - response = { - tabCache: tabCache[message.tab.id], - apps: wappalyzer.apps, - categories: wappalyzer.categories, - pinnedCategory, - termsAccepted: userAgent() === 'chrome' || await getOption('termsAccepted', false), - }; - - break; - case 'set_option': - await setOption(message.key, message.value); - - break; - case 'get_js_patterns': - response = { - patterns: wappalyzer.jsPatterns, - }; - - break; - default: - // Do nothing + return (await getOption('disabledDomains', [])).includes(hostname) + } catch (error) { + return false } - - if (response) { - port.postMessage({ - id: message.id, - response, - }); + }, + + /** + * Callback for detections + * @param {String} url + * @param {Array} detections + * @param {String} language + * @param {Boolean} incrementHits + */ + async onDetect(url, detections = [], language, incrementHits = false) { + if (!detections.length) { + return } - }); -}); - -wappalyzer.driver.document = document; -/** - * Log messages to console - */ -wappalyzer.driver.log = (message, source, type) => { - const log = ['warn', 'error'].indexOf(type) !== -1 ? type : 'log'; + const { protocol, hostname } = new URL(url) + + // Cache detections + const cache = (Driver.cache.hostnames[hostname] = { + ...(Driver.cache.hostnames[hostname] || { + url: `${protocol}//${hostname}`, + detections: [], + hits: incrementHits ? 0 : 1 + }), + dateTime: Date.now() + }) + + // Remove duplicates + cache.detections = cache.detections + .concat(detections) + .filter(({ technology }) => technology) + + cache.detections.filter( + ({ technology: { name }, pattern: { regex } }, index) => + cache.detections.findIndex( + ({ technology: { name: _name }, pattern: { regex: _regex } }) => + name === _name && (!regex || regex.toString() === _regex.toString()) + ) === index + ) + + cache.hits += incrementHits ? 1 : 0 + cache.language = cache.language || language + + // Expire cache + Driver.cache.hostnames = Object.keys(Driver.cache.hostnames).reduce( + (hostnames, hostname) => { + const cache = Driver.cache.hostnames[hostname] + + if (cache.dateTime > Date.now() - expiry) { + hostnames[hostname] = cache + } - console[log](`[wappalyzer ${type}]`, `[${source}]`, message); // eslint-disable-line no-console -}; + return hostnames + }, + {} + ) + + await setOption( + 'hostnames', + Object.keys(Driver.cache.hostnames).reduce( + (cache, hostname) => ({ + ...cache, + [hostname]: { + ...Driver.cache.hostnames[hostname], + detections: Driver.cache.hostnames[hostname].detections + .filter(({ technology }) => technology) + .map( + ({ + technology: { name: technology }, + pattern: { regex, confidence }, + version + }) => ({ + technology, + pattern: { + regex: regex.source, + confidence + }, + version + }) + ) + } + }), + {} + ) + ) -/** - * Display apps - */ -wappalyzer.driver.displayApps = async (detected, meta, context) => { - const { tab } = context; + const resolved = resolve(Driver.cache.hostnames[hostname].detections) - if (tab === undefined) { - return; - } + await Driver.setIcon(url, resolved) - tabCache[tab.id] = tabCache[tab.id] || { - detected: [], - }; + const tabs = await promisify(chrome.tabs, 'query', { url }) - tabCache[tab.id].detected = detected; + tabs.forEach(({ id }) => (Driver.cache.tabs[id] = resolved)) - const pinnedCategory = await getOption('pinnedCategory'); - const dynamicIcon = await getOption('dynamicIcon', true); + Driver.log({ hostname, technologies: resolved }) - let found = false; + await Driver.ping() + }, - // Find the main application to display - [pinnedCategory].concat(categoryOrder).forEach((match) => { - Object.keys(detected).forEach((appName) => { - const app = detected[appName]; + /** + * Callback for onAd listener + * @param {Object} ad + */ + async onAd(ad) { + Driver.cache.ads.push(ad) - app.props.cats.forEach((category) => { - if (category === match && !found) { - let icon = app.props.icon && dynamicIcon ? app.props.icon : 'default.svg'; + await setOption('ads', Driver.cache.ads) + }, - if (/\.svg$/i.test(icon)) { - icon = `converted/${icon.replace(/\.svg$/, '.png')}`; - } + /** + * Update the extension icon + * @param {String} url + * @param {Object} technologies + */ + async setIcon(url, technologies = []) { + const dynamicIcon = await getOption('dynamicIcon', false) + const badge = await getOption('badge', true) - try { - browser.pageAction.setIcon({ - tabId: tab.id, - path: `../images/icons/${icon}`, - }); - } catch (e) { - // Firefox for Android does not support setIcon see https://bugzilla.mozilla.org/show_bug.cgi?id=1331746 - } + let icon = 'default.svg' - found = true; - } - }); - }); - }); - - 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]; - } + if (dynamicIcon) { + const pinnedCategory = parseInt(await getOption('pinnedCategory'), 10) - const tracking = await getOption('tracking', true); - const robotsTxtCache = await getOption('robotsTxtCache', {}); + const pinned = technologies.find(({ categories }) => + categories.some(({ id }) => id === pinnedCategory) + ) - robotsTxtQueue[host] = new Promise(async (resolve) => { - if (!tracking) { - return resolve([]); + ;({ icon } = pinned || technologies[0] || { icon }) } - if (host in robotsTxtCache) { - return resolve(robotsTxtCache[host]); + ;(await promisify(chrome.tabs, 'query', { url })).forEach( + ({ id: tabId }) => { + chrome.browserAction.setBadgeText( + { + tabId, + text: + badge && technologies.length ? technologies.length.toString() : '' + }, + () => {} + ) + + chrome.browserAction.setIcon( + { + tabId, + path: chrome.extension.getURL( + `../images/icons/${ + /\.svg$/i.test(icon) + ? `converted/${icon.replace(/\.svg$/, '.png')}` + : icon + }` + ) + }, + () => {} + ) + } + ) + }, + + /** + * Get the detected technologies for the current tab + */ + async getDetections() { + const [{ id, url }] = await promisify(chrome.tabs, 'query', { + active: true, + currentWindow: true + }) + + if (await Driver.isDisabledDomain(url)) { + await Driver.setIcon(url, []) + + return } - const timeout = setTimeout(() => resolve([]), 3000); + const resolved = Driver.cache.tabs[id] - let response; + await Driver.setIcon(url, resolved) - try { - response = await fetch(`http${secure ? 's' : ''}://${host}/robots.txt`, { redirect: 'follow' }); - } catch (error) { - wappalyzer.log(error, 'driver', 'error'); + return resolved + }, - return resolve([]); + /** + * Fetch the website's robots.txt rules + * @param {String} hostname + * @param {Boolean} secure + */ + async getRobots(hostname, secure = false) { + if (!(await getOption('tracking', true))) { + return } - clearTimeout(timeout); - - const robotsTxt = response.ok ? await response.text() : ''; - - robotsTxtCache[host] = Wappalyzer.parseRobotsTxt(robotsTxt); + if (typeof Driver.cache.robots[hostname] !== 'undefined') { + return Driver.cache.robots[hostname] + } - await setOption('robotsTxtCache', robotsTxtCache); + try { + Driver.cache.robots[hostname] = await Promise.race([ + new Promise(async (resolve) => { + const response = await fetch( + `http${secure ? 's' : ''}://${hostname}/robots.txt`, + { + redirect: 'follow', + mode: 'no-cors' + } + ) + + if (!response.ok) { + Driver.error(new Error(response.statusText)) + + resolve('') + } - delete robotsTxtQueue[host]; + let agent + + resolve( + (await response.text()).split('\n').reduce((disallows, line) => { + let matches = /^User-agent:\s*(.+)$/i.exec(line.trim()) + + if (matches) { + agent = matches[1].toLowerCase() + } else if (agent === '*' || agent === 'wappalyzer') { + matches = /^Disallow:\s*(.+)$/i.exec(line.trim()) + + if (matches) { + disallows.push(matches[1]) + } + } + + return disallows + }, []) + ) + }), + new Promise((resolve) => setTimeout(() => resolve(''), 5000)) + ]) + + Driver.cache.robots = Object.keys(Driver.cache.robots) + .slice(-50) + .reduce( + (cache, hostname) => ({ + ...cache, + [hostname]: Driver.cache.robots[hostname] + }), + {} + ) + + await setOption('robots', Driver.cache.robots) + + return Driver.cache.robots[hostname] + } catch (error) { + Driver.error(error) + } + }, - return resolve(robotsTxtCache[host]); - }); + /** + * Check if the website allows indexing of a URL + * @param {String} href + */ + async checkRobots(href) { + const url = new URL(href) - return robotsTxtQueue[host]; -}; + if (url.protocol !== 'http:' && url.protocol !== 'https:') { + throw new Error('Invalid protocol') + } -/** - * 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 robots = await Driver.getRobots( + url.hostname, + url.protocol === 'https:' + ) - if (tracking && termsAccepted) { - if (Object.keys(hostnameCache).length) { - post('https://api.wappalyzer.com/ping/v1/', hostnameCache); + if (robots.some((disallowed) => url.pathname.indexOf(disallowed) === 0)) { + throw new Error('Disallowed') } + }, + + /** + * Clear caches + */ + async clearCache() { + Driver.cache.hostnames = {} + Driver.cache.tabs = {} + + await setOption('hostnames', {}) + }, + + /** + * Anonymously send identified technologies to wappalyzer.com + * This function can be disabled in the extension settings + */ + async ping() { + const tracking = await getOption('tracking', true) + const termsAccepted = + agent === 'chrome' || (await getOption('termsAccepted', false)) + + if (tracking && termsAccepted) { + const hostnames = Object.keys(Driver.cache.hostnames).reduce( + (hostnames, hostname) => { + // eslint-disable-next-line standard/computed-property-even-spacing + const { url, language, detections, hits } = Driver.cache.hostnames[ + hostname + ] + + if ( + !/((local|dev(elop(ment)?)?|stag(e|ing)?|preprod|test(ing)?|demo(shop)?|admin|cache)[.-]|localhost|google|\/admin|\.local|\.test|\.dev|127\.|0\.)/.test( + hostname + ) && + hits >= 3 + ) { + hostnames[url] = hostnames[url] || { + applications: resolve(detections).reduce( + (technologies, { name, confidence, version }) => { + if (confidence === 100) { + technologies[name] = { + version, + hits + } + } + + return technologies + }, + {} + ), + meta: { + language + } + } + } - if (adCache.length) { - post('https://ad.wappalyzer.com/log/wp/', adCache); - } + return hostnames + }, + {} + ) - await setOption('robotsTxtCache', {}); - } -}; - -// Init -(async () => { - // Technologies - try { - const response = await fetch('../apps.json'); - const json = await response.json(); - - wappalyzer.apps = json.apps; - wappalyzer.categories = json.categories; - } catch (error) { - wappalyzer.log(`GET apps.json: ${error.message}`, 'driver', 'error'); - } + const count = Object.keys(hostnames).length - wappalyzer.parseJsPatterns(); - - categoryOrder = Object.keys(wappalyzer.categories) - .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); - - if (previousVersion === null) { - openTab({ - url: `${wappalyzer.config.websiteURL}installed`, - }); - } else if (version !== previousVersion && upgradeMessage) { - openTab({ - url: `${wappalyzer.config.websiteURL}upgraded?v${version}`, - background: true, - }); - } + if (count && (count >= 50 || Driver.lastPing < Date.now() - expiry)) { + await Driver.post('https://api.wappalyzer.com/ping/v2/', hostnames) - await setOption('version', version); + await setOption('hostnames', (Driver.cache.hostnames = {})) - // Hostname cache - wappalyzer.hostnameCache = await getOption('hostnameCache', {}); + Driver.lastPing = Date.now() + } - // Run content script on all tabs - try { - const tabs = await browser.tabs.query({ url: ['http://*/*', 'https://*/*'] }); + if (Driver.cache.ads.length > 50) { + await Driver.post('https://ad.wappalyzer.com/log/wp/', Driver.cache.ads) - tabs.forEach(async (tab) => { - try { - await browser.tabs.executeScript(tab.id, { - file: '../js/content.js', - }); - } catch (error) { - // + await setOption('ads', (Driver.cache.ads = [])) } - }); - } catch (error) { - wappalyzer.log(error, 'driver', 'error'); + } } -})(); +} + +Driver.init() diff --git a/src/drivers/webextension/js/inject.js b/src/drivers/webextension/js/inject.js index 3e9a6658fbf1c8e9919b766cefb1a424926a3ac6..8ae4bd77efd609973df111b0f51c402ca06f15c3 100644 --- a/src/drivers/webextension/js/inject.js +++ b/src/drivers/webextension/js/inject.js @@ -1,63 +1,50 @@ /* eslint-env browser */ -(() => { +;(function() { try { - const detectJs = (chain) => { - const properties = chain.split('.'); - - let value = properties.length ? window : null; - - for (let i = 0; i < properties.length; i++) { - const property = properties[i]; - - if (value && value.hasOwnProperty(property)) { - value = value[property]; - } else { - value = null; - - break; - } + const onMessage = ({ data }) => { + if (!data.wappalyzer) { + return } - return typeof value === 'string' || typeof value === 'number' ? value : !!value; - }; - - const onMessage = (event) => { - if (event.data.id !== 'patterns') { - return; - } - - removeEventListener('message', onMessage); - - const patterns = event.data.patterns || {}; - - const js = {}; - - for (const appName in patterns) { - if (patterns.hasOwnProperty(appName)) { - js[appName] = {}; - - for (const chain in patterns[appName]) { - if (patterns[appName].hasOwnProperty(chain)) { - js[appName][chain] = {}; - - for (const index in patterns[appName][chain]) { - const value = detectJs(chain); - - if (value && patterns[appName][chain].hasOwnProperty(index)) { - js[appName][chain][index] = value; - } + const { technologies } = data.wappalyzer || {} + + removeEventListener('message', onMessage) + + postMessage({ + wappalyzer: { + js: technologies.reduce((technologies, { name, chains }) => { + chains.forEach((chain) => { + const value = chain + .split('.') + .reduce( + (value, method) => + value && value.hasOwnProperty(method) + ? value[method] + : undefined, + window + ) + + if (value !== undefined) { + technologies.push({ + name, + chain, + value: + typeof value === 'string' || typeof value === 'number' + ? value + : !!value + }) } - } - } - } - } + }) - postMessage({ id: 'js', js }, window.location.href); - }; + return technologies + }, []) + } + }) + } - addEventListener('message', onMessage); + addEventListener('message', onMessage) } catch (e) { // Fail quietly } -})(); +})() diff --git a/src/drivers/webextension/js/lib/iframe.js b/src/drivers/webextension/js/lib/iframe.js index b50e63629fea817af17671d58bd2249be1fe53e8..d36e22baabf4e1a23eacceecfea0543babe1c2a0 100644 --- a/src/drivers/webextension/js/lib/iframe.js +++ b/src/drivers/webextension/js/lib/iframe.js @@ -1,1187 +1,1544 @@ -'use strict'; - -(function(win) { - -var exports = {}; +'use strict' +;(function(win) { + var exports = {} + + ;(function(exports) { + var utils = { + /** + * Normalize URL + * @param {String} url + */ + normalizeUrl: function(url) { + return this.hashUrl(url) || null + }, -(function(exports) { + /** + * Get referrer. + */ + getReferrer: function() { + return this.normalizeUrl(document.referrer) + }, - var port = browser.runtime.connect({name:"adparser"}); - var utils = { - normalizeUrl: function(url) { + /** + * Get current page URL. + */ + getPageUrl: function() { + return this.normalizeUrl(window.location.href) + }, - return this.hashUrl(url) || null; + /** + * Generated hashed URL. + * @param {String} url + */ + hashUrl: function(url) { + var a, result - }, + if (!url || url.indexOf('http') !== 0) { + return null + } - getReferrer: function() { - return this.normalizeUrl(document.referrer); - }, + a = document.createElement('a') + a.href = url - getPageUrl: function() { - return this.normalizeUrl(window.location.href); - }, - hashUrl: function(url) { - var a, - result; + result = a.protocol + '//' + a.hostname + '/' - if ( !url || url.indexOf('http') !== 0 ) { - return null; - } + if (a.pathname && a.pathname !== '/') { + result += this.hashCode(a.pathname) + } - a = document.createElement('a'); - a.href = url; + if (a.search) { + result += '?' + this.hashCode(a.search) + } - result = a.protocol + '//' + a.hostname + '/'; + if (a.hash) { + result += '#' + this.hashCode(a.hash) + } - if ( a.pathname && a.pathname !== '/' ) { - result += this.hashCode(a.pathname); - } + return result + }, - if ( a.search ) { - result += '?' + this.hashCode(a.search); - } + /** + * Generate random hash. + * @param {String} str + */ + hashCode: function(str) { + var hash = 0, + kar, + i + + if (str.length === 0) { + return hash + } - if ( a.hash ) { - result += '#' + this.hashCode(a.hash); - } + for (i = 0; i < str.length; i++) { + kar = str.charCodeAt(i) + hash = (hash << 5) - hash + kar + hash = hash & hash + } - return result; - }, + return hash + Math.pow(2, 32) + }, - hashCode: function(str) { - var hash = 0, - kar, - i; + /** + * Apply array function to non-array. + * @param {Object} a + */ + realArray: function(a) { + return Array.prototype.slice.apply(a) + }, - if ( str.length === 0 ) { - return hash; - } + /** + * Listener callback for onDocLoaded. + * @param {Object} doc + * @param {Function} callback + */ + onDocLoaded: function(doc, callback) { + if (doc.readyState === 'loading') { + doc.addEventListener('DOMContentLoaded', callback) + } else { + callback() + } + }, - for ( i = 0; i < str.length; i++ ) { - kar = str.charCodeAt(i); - hash = ((hash << 5) - hash) + kar; - hash = hash & hash; - } + SCRIPT_IN_WINDOW_TOP: window === window.top, - return hash + Math.pow(2, 32); - }, + /** + * Check for href Window object. + * @param {Object} win + */ + isFriendlyWindow: function(win) { + var href + try { + href = win.location.href + } catch (e) { + return false + } + return true + }, - realArray: function(a) { - return Array.prototype.slice.apply(a); - }, + /** + * Get default view from element. + * @param {Object} el + */ + elementWindow: function(el) { + return el.ownerDocument.defaultView + }, - onDocLoaded: function(doc, callback) { - if ( doc.readyState === 'loading' ) { - doc.addEventListener('DOMContentLoaded', callback); - } else { - callback(); - } - }, + /** + * Get viewport size. + * @param {Object} win + */ + viewport: function(win) { + return { width: win.innerWidth, height: win.innerHeight } + }, - SCRIPT_IN_WINDOW_TOP: window === window.top, + /** + * Parse query string parameters. + * @param {String} qs + */ + parseQS: function(qs) { + if (qs.indexOf('http') === 0) { + qs = qs.split('?')[1] + } + var i, kvs, key, val + var dict = {} + qs = qs.split('&') + for (i = 0; i < qs.length; i++) { + kvs = qs[i].split('=') + key = kvs[0] + val = kvs.slice(1).join('=') + try { + dict[key] = window.decodeURIComponent(val) + } catch (e) { + continue + } + } + return dict + }, - isFriendlyWindow: function(win) { + /** + * Send PostMessage response. + * @param {Object} message + * @param {String} event + * @param {String} responseMessage + */ + sendToBackground: function(message, event, responseMessage) { + chrome.runtime.sendMessage(message, (message) => { + if (message && typeof message.tracking_enabled !== 'undefined') { + if (message.tracking_enabled) { + utilCallback() + } else { + utilElseCallback() + } + } + }) + }, - var href; - try { - href = win.location.href; - } catch(e) { - return false; + /** + * Check if anonymous tracking is enabled. + * @param {Function} callback + * @param {Function} elseCallback + * @todo validate if utilCallback or utilElseCallback are being used. + */ + askIfTrackingEnabled: function(callback, elseCallback) { + utilCallback = callback + utilElseCallback = elseCallback + + this.sendToBackground( + 'is_tracking_enabled', + '', + 'tracking_enabled_response' + ) } - return true; - }, - - elementWindow: function(el) { - return el.ownerDocument.defaultView; - }, - - viewport: function(win) { - return {width: win.innerWidth, height: win.innerHeight}; - }, + } - parseQS: function(qs) { - if ( qs.indexOf('http') === 0 ) { - qs = qs.split('?')[1]; + utils.SCRIPT_IN_FRIENDLY_IFRAME = + !utils.SCRIPT_IN_WINDOW_TOP && utils.isFriendlyWindow(window.parent) + utils.SCRIPT_IN_HOSTILE_IFRAME = + !utils.SCRIPT_IN_WINDOW_TOP && !utils.SCRIPT_IN_FRIENDLY_IFRAME + + /** + * Generate new Logging object. + */ + function LogGenerator() { + this.msgNum = 0 + this.pageMeta = { + url: utils.getPageUrl(), + isHP: window.location.pathname === '/', + referrer: utils.getReferrer(), + rand: Math.floor(Math.random() * 10e12), + startTime: new Date().getTime() } - var i, kvs, key, val; - var dict = {}; - qs = qs.split('&'); - for ( i = 0; i < qs.length; i++ ) { - kvs = qs[i].split('='); - key = kvs[0]; - val = kvs.slice(1).join('='); - try { - dict[key] = window.decodeURIComponent(val); - } catch (e) { + } - continue; + LogGenerator.prototype = { + /** + * Log data. + * @param {String} event + * @param {Array} opt_assets + * @param {Array} opt_pageTags + */ + log: function(event, opt_assets, opt_pageTags) { + var opt_video_assets + if (event === 'video' || event === 'invalid-video') { + opt_video_assets = opt_assets || [] + opt_assets = [] + } else { + opt_video_assets = [] + opt_assets = opt_assets || [] } + var result = { + doc: this.pageMeta, + event: event, + video_assets: opt_video_assets, + assets: opt_assets, + version: '3', + mrev: '15a9f21-d', + msgNum: this.msgNum, + timestamp: new Date().getTime(), + pageVis: document.visibilityState, + pageFoc: document.hasFocus(), + pageTags: opt_pageTags || [] + } + this.msgNum++ + return result } - return dict; - }, - sendToBackground: function(message, event, responseMessage) { - if ( typeof browser !== 'undefined' || typeof chrome !== 'undefined' ) { - port.postMessage(message); - } else if ( window.self.port ) { - window.self.port.on(responseMessage, onResponse); - window.self.port.emit(event, message); - } - }, - - askIfTrackingEnabled: function(callback, elseCallback) { - utilCallback = callback; - utilElseCallback = elseCallback; - - this.sendToBackground( - 'is_tracking_enabled', - '', - 'tracking_enabled_response' - ); - } - }; - port.onMessage.addListener((message) => { - if ( message && message.tracking_enabled ) { + utils.LogGenerator = LogGenerator + + let utilCallback, utilElseCallback + + exports.utils = utils + })(exports) + ;(function(exports) { + var SizeMatcher = { + VALID_AD_SIZES: [ + [300, 50], + [320, 50], + [160, 600], + [300, 250], + [300, 600], + [300, 1050], + [336, 280], + [336, 850], + [468, 60], + [728, 90], + [728, 250], + [728, 270], + [970, 66], + [970, 90], + [970, 125], + [970, 250], + [970, 400], + [970, 415], + [1280, 100] + ], + + PX_SIZE_TOL: 10, + + /** + * Get ad size. + * @param {Int} width + * @param {Int} height + */ + getMatchedAdSize: function(width, height) { + if (!this.set) { + this.set = this._makeSizeSet() + } - utilCallback(); - } else { + return this.set[Math.round(width) + 'x' + Math.round(height)] + }, - utilElseCallback(); - } - }); - - utils.SCRIPT_IN_FRIENDLY_IFRAME = !utils.SCRIPT_IN_WINDOW_TOP && utils.isFriendlyWindow(window.parent); - utils.SCRIPT_IN_HOSTILE_IFRAME = !utils.SCRIPT_IN_WINDOW_TOP && !utils.SCRIPT_IN_FRIENDLY_IFRAME; - - function LogGenerator() { - this.msgNum = 0; - this.pageMeta = { - 'url': utils.getPageUrl(), - 'isHP': window.location.pathname === '/', - 'referrer': utils.getReferrer(), - 'rand': Math.floor(Math.random() * 10e12), - 'startTime': new Date().getTime() - }; - } + /** + * Check element size. + * @param {HTMLElement} el + */ + elementIsAdShaped: function(el) { + return !!this.getMatchedAdSizeForElement(el) + }, - LogGenerator.prototype = { - log: function(event, opt_assets, opt_pageTags) { - var opt_video_assets; - if ( event === 'video' || event === 'invalid-video' ) { - opt_video_assets = opt_assets || []; - opt_assets = []; - } else { - opt_video_assets = []; - opt_assets = opt_assets || []; - } - var result = { - doc: this.pageMeta, - event: event, - video_assets: opt_video_assets, - assets: opt_assets, - version: '3', - mrev: '15a9f21-d', - msgNum: this.msgNum, - timestamp: new Date().getTime(), - pageVis: document.visibilityState, - pageFoc: document.hasFocus(), - pageTags: opt_pageTags || [] - }; - this.msgNum++; - return result; - } - }; - - utils.LogGenerator = LogGenerator; - - let utilCallback, utilElseCallback; - - exports.utils = utils; -})(exports); - -(function(exports) { - - var SizeMatcher = { - VALID_AD_SIZES: [ - [300, 50], - [320, 50], - [160, 600], - [300, 250], - [300, 600], - [300, 1050], - [336, 280], - [336, 850], - [468, 60], - [728, 90], - [728, 250], - [728, 270], - [970, 66], - [970, 90], - [970, 125], - [970, 250], - [970, 400], - [970, 415], - [1280, 100] - ], - - PX_SIZE_TOL: 10, - - getMatchedAdSize: function(width, height) { - - if ( !this.set ) { - this.set = this._makeSizeSet(); - } + /** + * Get ad size. + * @param {HTMLElement} el + * @todo better description + */ + getMatchedAdSizeForElement: function(el) { + var rect = el.getBoundingClientRect() + return this.getMatchedAdSize(rect.width, rect.height) + }, - return this.set[Math.round(width) + 'x' + Math.round(height)]; - }, - - elementIsAdShaped: function(el) { - return !!this.getMatchedAdSizeForElement(el); - }, - - getMatchedAdSizeForElement: function(el) { - var rect = el.getBoundingClientRect(); - return this.getMatchedAdSize(rect.width, rect.height); - }, - - _makeSizeSet: function() { - var set = {}; - var i; - var xfuz; - var yfuz; - var size; - var width; - var height; - - for ( i = 0; i < this.VALID_AD_SIZES.length; i++ ) { - for ( xfuz = -this.PX_SIZE_TOL; xfuz <= this.PX_SIZE_TOL; xfuz++ ) { - for ( yfuz = -this.PX_SIZE_TOL; yfuz <= this.PX_SIZE_TOL; yfuz++ ) { - size = this.VALID_AD_SIZES[i]; - width = size[0] + xfuz; - height = size[1] + yfuz; - set[width + 'x' + height] = size; + /** + * Generate ad sizes. + */ + _makeSizeSet: function() { + var set = {} + var i + var xfuz + var yfuz + var size + var width + var height + + for (i = 0; i < this.VALID_AD_SIZES.length; i++) { + for (xfuz = -this.PX_SIZE_TOL; xfuz <= this.PX_SIZE_TOL; xfuz++) { + for (yfuz = -this.PX_SIZE_TOL; yfuz <= this.PX_SIZE_TOL; yfuz++) { + size = this.VALID_AD_SIZES[i] + width = size[0] + xfuz + height = size[1] + yfuz + set[width + 'x' + height] = size + } } } + return set } - return set; } - }; - var Throttler = { - MAX_SEARCHES_PER_WINDOW: 10, - MAX_SEARCHES_PER_ELEMENT: 2, + var Throttler = { + MAX_SEARCHES_PER_WINDOW: 10, + MAX_SEARCHES_PER_ELEMENT: 2, + + /** + * Count number of elements. + * @param {HTMLElement} el + */ + countSearch: (el) => { + if (typeof el.searches !== 'number') { + el.searches = 0 + } - countSearch: function(el) { - if ( typeof el.searches !== 'number' ) { - el.searches = 0; - } + el.searches += 1 + }, - el.searches += 1; - }, + /** + * + * @param {*} el + * @param {*} max + * + * @todo add description + */ + throttle: function(el, max) { + if (typeof el.searches === 'number' && el.searches >= max) { + return true + } + return false + }, - throttle: function(el, max) { - if ( typeof el.searches === 'number' && el.searches >= max ) { - return true; - } - return false; - }, + /** + * + * @param {*} el + * + * @todo add description + */ + throttleElement: function(el) { + return this.throttle(el, this.MAX_SEARCHES_PER_ELEMENT) + }, - throttleElement: function(el) { - return this.throttle(el, this.MAX_SEARCHES_PER_ELEMENT); - }, + /** + * + * @param {*} win + * + * @todo add description + */ + throttleWin: function(win) { + return this.throttle(win, this.MAX_SEARCHES_PER_WINDOW) + }, - throttleWin: function(win) { - return this.throttle(win, this.MAX_SEARCHES_PER_WINDOW); - }, + /** + * + * @param {*} el + * + * @todo add description + */ + getCount: function(el) { + return el.searches || 0 + } + } - getCount: function(el) { - return el.searches || 0; + /** + * Initialize window and document elements. + * @param {*} win + */ + function TopSearcher(win) { + this.win = win + this.doc = win.document } - }; - function TopSearcher(win) { - this.win = win; - this.doc = win.document; - } + /** + * Add search function. + */ + TopSearcher.prototype.search = function() { + var candidates = exports.utils.realArray( + this.doc.querySelectorAll('img, object, embed') + ), + html5Ad, + ads = [] + + ads = ads.concat( + candidates.filter(function(el) { + if (!el.mpAdFound && !Throttler.throttleElement(el)) { + Throttler.countSearch(el) + if ( + (el.tagName !== 'IMG' || isStandardImage(el)) && + SizeMatcher.elementIsAdShaped(el) + ) { + el.mpAdFound = true + return true + } + } + return false + }) + ) + + html5Ad = this._mainGetHTMLAd() + if (html5Ad) { + html5Ad.html5 = true + html5Ad.mpAdFound = true + ads.push(html5Ad) + } + + return ads + } - TopSearcher.prototype.search = function() { - var candidates = exports.utils.realArray(this.doc.querySelectorAll('img, object, embed')), - html5Ad, - ads = []; - - ads = ads.concat(candidates.filter(function(el) { - if ( !el.mpAdFound && !Throttler.throttleElement(el) ) { - Throttler.countSearch(el); - if ( (el.tagName !== 'IMG' || isStandardImage(el)) && SizeMatcher.elementIsAdShaped(el) ) { - el.mpAdFound = true; - return true; + /** + * @todo add description + */ + TopSearcher.prototype._mainGetHTMLAd = function() { + var styles = this.doc.querySelectorAll( + 'div > style, div > link[rel="stylesheet"]' + ), + i, + div + for (i = 0; i < styles.length; i++) { + div = styles[i].parentNode + if ( + !div.mpAdFound && + SizeMatcher.elementIsAdShaped(div) && + this._jumpedOut(div) + ) { + return div } } - return false; - })); - - html5Ad = this._mainGetHTMLAd(); - if ( html5Ad ) { - html5Ad.html5 = true; - html5Ad.mpAdFound = true; - ads.push(html5Ad); } - return ads; - }; + /** + * @todo add description + */ + TopSearcher.prototype._jumpedOut = function(el) { + var siblings, ifrs + siblings = exports.utils.realArray(el.parentNode.children) + ifrs = siblings.filter(function(el) { + return ( + el.tagName === 'IFRAME' && + el.offsetWidth === 0 && + el.offsetHeight === 0 + ) + }) + return ifrs.length > 0 + } - TopSearcher.prototype._mainGetHTMLAd = function() { - var styles = this.doc.querySelectorAll('div > style, div > link[rel="stylesheet"]'), - i, div; - for ( i = 0; i < styles.length; i++ ) { - div = styles[i].parentNode; - if ( !div.mpAdFound && SizeMatcher.elementIsAdShaped(div) && this._jumpedOut(div) ) { - return div; + /** + * + * @param {*} win + * + * @todo add description + */ + function IframeSearcher(win) { + this.MIN_AD_AREA = 14000 + this.MIN_WINDOW_PX = 10 + + this.win = win + this.doc = win.document + this.body = win.document.body + this.winClickTag = win.clickTag + this.adSizeMeta = this._getAdSizeMeta() + this.numElementsInBody = + (this.body && this.body.querySelectorAll('*').length) || 0 + + this.shouldSearchWindow = false + if ( + !this.win.mpAdFound && + this.body && + !Throttler.throttleWin(this.win) + ) { + this.winWidth = this.win.innerWidth + this.winHeight = this.win.innerHeight + if ( + this._meetsMinAdSize(this.winWidth, this.winHeight) && + !this._containsLargeIframes() + ) { + this.shouldSearchWindow = true + } } } - }; - - TopSearcher.prototype._jumpedOut = function(el) { - var siblings, ifrs; - siblings = exports.utils.realArray(el.parentNode.children); - ifrs = siblings.filter(function(el) { - return el.tagName === 'IFRAME' && el.offsetWidth === 0 && el.offsetHeight === 0; - }); - return ifrs.length > 0; - }; - - function IframeSearcher(win) { - this.MIN_AD_AREA = 14000; - this.MIN_WINDOW_PX = 10; - - this.win = win; - this.doc = win.document; - this.body = win.document.body; - this.winClickTag = win.clickTag; - this.adSizeMeta = this._getAdSizeMeta(); - this.numElementsInBody = (this.body && this.body.querySelectorAll('*').length) || 0; - - this.shouldSearchWindow = false; - if ( !this.win.mpAdFound && this.body && !Throttler.throttleWin(this.win) ) { - this.winWidth = this.win.innerWidth; - this.winHeight = this.win.innerHeight; - if ( this._meetsMinAdSize(this.winWidth, this.winHeight) && !this._containsLargeIframes() ) { - this.shouldSearchWindow = true; + + /** + * @todo add description + */ + IframeSearcher.prototype.search = function() { + var ad + + if (this.shouldSearchWindow) { + ad = this._search() + if (ad) { + ad.mpAdFound = true + win.mpAdFound = true + return ad + } + Throttler.countSearch(this.win) } + + return null } - } + /** + * @todo add description + */ + IframeSearcher.prototype._search = function() { + var _this = this, + stdCandidates, + html5Candidates, + stdEl, + html5El + + stdCandidates = this.body.querySelectorAll('img, object, embed') + + stdEl = getFirst(stdCandidates, function(el) { + if ( + !el.mpAdFound && + !Throttler.throttleElement(el) && + (el.tagName !== 'IMG' || isStandardImage(el)) && + _this._elementIsAtLeastAsBigAsWindow(el) + ) { + return true + } + Throttler.countSearch(el) + return false + }) - IframeSearcher.prototype.search = function() { - var ad; + if (stdEl) { + return stdEl + } - if ( this.shouldSearchWindow ) { - ad = this._search(); - if ( ad ) { - ad.mpAdFound = true; - win.mpAdFound = true; - return ad; + if (this._isHTML5Iframe()) { + html5Candidates = this.doc.querySelectorAll( + 'body, canvas, button, video, svg, div' + ) + html5El = getFirst(html5Candidates, function(el) { + if (_this._elementIsAtLeastAsBigAsWindow(el)) { + return true + } + Throttler.countSearch(el) + return false + }) } - Throttler.countSearch(this.win); - } - return null; - }; - - IframeSearcher.prototype._search = function() { - var _this = this, - stdCandidates, - html5Candidates, - stdEl, - html5El; - - stdCandidates = this.body.querySelectorAll('img, object, embed'); - - stdEl = getFirst(stdCandidates, function(el) { - if ( !el.mpAdFound && - !Throttler.throttleElement(el) && - (el.tagName !== 'IMG' || isStandardImage(el)) && - _this._elementIsAtLeastAsBigAsWindow(el)) - { - return true; + if (html5El) { + html5El.html5 = true + html5El.winClickTag = this.winClickTag + html5El.adSizeMeta = this.adSizeMeta + return html5El } - Throttler.countSearch(el); - return false; - }); - if ( stdEl ) { - return stdEl; + return null } - if ( this._isHTML5Iframe() ) { - html5Candidates = this.doc.querySelectorAll('body, canvas, button, video, svg, div'); - html5El = getFirst(html5Candidates, function(el) { - - if ( _this._elementIsAtLeastAsBigAsWindow(el) ) { - return true; - } - Throttler.countSearch(el); - return false; - }); - } + /** + * @todo add description + */ + IframeSearcher.prototype._isHTML5Iframe = function() { + if (this.winClickTag || this.adSizeMeta) { + return true + } - if ( html5El ) { - html5El.html5 = true; - html5El.winClickTag = this.winClickTag; - html5El.adSizeMeta = this.adSizeMeta; - return html5El; - } + if ( + this.doc.querySelectorAll('canvas', 'button', 'video', 'svg').length > 0 + ) { + return true + } - return null; - }; + if ( + this.numElementsInBody >= 5 && + Throttler.getCount(this.win) > 0 && + this.doc.querySelectorAll('div').length > 0 + ) { + return true + } - IframeSearcher.prototype._isHTML5Iframe = function() { - if ( this.winClickTag || this.adSizeMeta ) { - return true; + return false } - if ( this.doc.querySelectorAll('canvas', 'button', 'video', 'svg').length > 0 ) { - return true; - } + /** + * @todo add description + */ + IframeSearcher.prototype._elementIsAtLeastAsBigAsWindow = function(el) { + var rect = el.getBoundingClientRect(), + tol = 0.95 - if ( this.numElementsInBody >= 5 && Throttler.getCount(this.win) > 0 && this.doc.querySelectorAll('div').length > 0 ) { - return true; + return ( + rect.width >= tol * this.winWidth && rect.height >= tol * this.winHeight + ) } - return false; - }; - - IframeSearcher.prototype._elementIsAtLeastAsBigAsWindow = function(el) { - var rect = el.getBoundingClientRect(), - tol = 0.95; - - return rect.width >= (tol * this.winWidth) && rect.height >= (tol * this.winHeight); - }; - - IframeSearcher.prototype._meetsMinAdSize = function(width, height) { - return (width * height) >= this.MIN_AD_AREA; - }; + /** + * @todo add description + */ + IframeSearcher.prototype._meetsMinAdSize = function(width, height) { + return width * height >= this.MIN_AD_AREA + } - IframeSearcher.prototype._containsLargeIframes = function() { - var iframes = this.doc.querySelectorAll('iframe'); - var rect; - var i; - for ( i = 0; i < iframes.length; i++ ) { - rect = iframes[i].getBoundingClientRect(); - if ( rect.width > this.MIN_WINDOW_PX || rect.height > this.MIN_WINDOW_PX ) { - return true; + /** + * @todo add description + */ + IframeSearcher.prototype._containsLargeIframes = function() { + var iframes = this.doc.querySelectorAll('iframe') + var rect + var i + for (i = 0; i < iframes.length; i++) { + rect = iframes[i].getBoundingClientRect() + if ( + rect.width > this.MIN_WINDOW_PX || + rect.height > this.MIN_WINDOW_PX + ) { + return true + } } + return false } - return false; - }; - - IframeSearcher.prototype._getAdSizeMeta = function() { - var adSizeMeta = this.doc.querySelectorAll('meta[name="ad.size"]'); - if ( adSizeMeta.length > 0 ) { - return adSizeMeta[0].content; - } else { - return null; - } - }; - - function getFirst(arr, testFn) { - var i, el; - for ( i = 0; i < arr.length; i++ ) { - el = arr[i]; - if ( testFn(el) ) { - return el; + + /** + * @todo add description + */ + IframeSearcher.prototype._getAdSizeMeta = function() { + var adSizeMeta = this.doc.querySelectorAll('meta[name="ad.size"]') + if (adSizeMeta.length > 0) { + return adSizeMeta[0].content + } else { + return null } } - return null; - } - function isStandardImage(img) { - - return img.src && (img.parentNode.tagName === 'A' || img.getAttribute('onclick')); - } - - function getFriendlyIframes(win) { - var iframes = win.document.querySelectorAll('iframe'); - iframes = exports.utils.realArray(iframes); - var friendlyIframes = iframes.filter(function(ifr) { - return exports.utils.isFriendlyWindow(ifr.contentWindow); - }); - return friendlyIframes; - } - - function findAds(win) { - var i, - iframes, - searcher, - ad, - ads = []; - - if ( win === win.top ) { - searcher = new TopSearcher(win); - ads = ads.concat(searcher.search()); - } else { - searcher = new IframeSearcher(win); - ad = searcher.search(); - if ( ad ) { - ads.push(ad); + /** + * + * @param {*} arr + * @param {*} testFn + * + * @todo add description + */ + function getFirst(arr, testFn) { + var i, el + for (i = 0; i < arr.length; i++) { + el = arr[i] + if (testFn(el)) { + return el + } } + return null } - iframes = getFriendlyIframes(win); - for ( i = 0; i < iframes.length; i++ ) { - ads = ads.concat(findAds(iframes[i].contentWindow)); + /** + * Check for image attributes. + * @param {HTMLElement} img + */ + function isStandardImage(img) { + return ( + img.src && + (img.parentNode.tagName === 'A' || img.getAttribute('onclick')) + ) } - return ads; - } - - exports.adfinder = { - getMatchedAdSize: SizeMatcher.getMatchedAdSize.bind(SizeMatcher), - findAds: findAds - }; -})(exports); - -(function(exports) { - - var parser = { - TAGS_WITH_SRC_ATTR: { - 'IMG': true, - 'SCRIPT': true, - 'IFRAME': true, - 'EMBED': true - }, - - MAX_ATTR_LEN: 100, - - getUrl: function(el, params) { - var url; - - if ( this.TAGS_WITH_SRC_ATTR.hasOwnProperty(el.tagName) ) { - url = el.src; - - } else if ( el.tagName === 'OBJECT' ) { - url = el.data || (params && params.movie) || null; - - } else if ( el.tagName === 'A' ) { - url = el.href; - } + /** + * Extract iFrames from page. + * @param {Object} win + */ + function getFriendlyIframes(win) { + var iframes = win.document.querySelectorAll('iframe') + iframes = exports.utils.realArray(iframes) + var friendlyIframes = iframes.filter(function(ifr) { + return exports.utils.isFriendlyWindow(ifr.contentWindow) + }) + return friendlyIframes + } - if ( url && url.indexOf('http') === 0 ) { - return url; + /** + * + * @param {*} win + */ + function findAds(win) { + var i, + iframes, + searcher, + ad, + ads = [] + + if (win === win.top) { + searcher = new TopSearcher(win) + ads = ads.concat(searcher.search()) } else { - return null; + searcher = new IframeSearcher(win) + ad = searcher.search() + if (ad) { + ads.push(ad) + } } - }, - getParams: function(el) { - if ( el.tagName !== 'OBJECT' ) { - return null; + iframes = getFriendlyIframes(win) + for (i = 0; i < iframes.length; i++) { + ads = ads.concat(findAds(iframes[i].contentWindow)) } - var i, child; - var params = {}; - var children = el.children; - for ( i = 0; i < children.length; i++ ) { - child = children[i]; - if ( child.tagName === 'PARAM' && child.name ) { + return ads + } - params[child.name.toLowerCase()] = child.value; + exports.adfinder = { + getMatchedAdSize: SizeMatcher.getMatchedAdSize.bind(SizeMatcher), + findAds: findAds + } + })(exports) + ;(function(exports) { + var parser = { + TAGS_WITH_SRC_ATTR: { + IMG: true, + SCRIPT: true, + IFRAME: true, + EMBED: true + }, + + MAX_ATTR_LEN: 100, + + /** + * + * @param {*} el + * @param {*} params + * + * @todo add description + */ + getUrl: function(el, params) { + var url + + if (this.TAGS_WITH_SRC_ATTR.hasOwnProperty(el.tagName)) { + url = el.src + } else if (el.tagName === 'OBJECT') { + url = el.data || (params && params.movie) || null + } else if (el.tagName === 'A') { + url = el.href } - } - return params; - }, - - getPosition: function(el) { - var rect = el.getBoundingClientRect(); - var win = exports.utils.elementWindow(el); - - return { - width: Math.round(rect.width), - height: Math.round(rect.height), - left: Math.round(rect.left + win.pageXOffset), - top: Math.round(rect.top + win.pageYOffset) - }; - }, - - getFlashvars: function(el, params, url) { - var flashvars; - var urlQS = url && url.split('?')[1]; - - if ( el.tagName === 'EMBED' ) { - flashvars = el.getAttribute('flashvars') || urlQS; - - } else if ( el.tagName === 'OBJECT' ) { - flashvars = params.flashvars || el.getAttribute('flashvars') || urlQS; - } - return (flashvars && exports.utils.parseQS(flashvars)) || null; - }, + if (url && url.indexOf('http') === 0) { + return url + } else { + return null + } + }, - findClickThru: function(el, flashvars) { - var key; - if ( el.tagName === 'IMG' && el.parentElement.tagName === 'A' ) { - return el.parentElement.href; - } else if ( flashvars ) { - for ( key in flashvars ) { - if ( flashvars.hasOwnProperty(key) ) { + /** + * + * @param {*} el + * + * @todo add description + */ + getParams: function(el) { + if (el.tagName !== 'OBJECT') { + return null + } - if ( key.toLowerCase().indexOf('clicktag') === 0 ) { - return flashvars[key]; - } + var i, child + var params = {} + var children = el.children + for (i = 0; i < children.length; i++) { + child = children[i] + if (child.tagName === 'PARAM' && child.name) { + params[child.name.toLowerCase()] = child.value } } - } - return null; - }, - - getAttr: function(el, name) { - var val = el.getAttribute(name); - - if ( val && val.slice && val.toString ) { + return params + }, - return val.slice(0, this.MAX_ATTR_LEN).toString(); - } else { - return null; - } - }, + /** + * Get element position. + * @param {HTMLElement} el + */ + getPosition: function(el) { + var rect = el.getBoundingClientRect() + var win = exports.utils.elementWindow(el) + + return { + width: Math.round(rect.width), + height: Math.round(rect.height), + left: Math.round(rect.left + win.pageXOffset), + top: Math.round(rect.top + win.pageYOffset) + } + }, - putPropIfExists: function(obj, name, val) { - if ( val ) { - obj[name] = val; - } - }, - - putAttrIfExists: function(obj, el, name) { - var val = this.getAttr(el, name); - this.putPropIfExists(obj, name, val); - }, - - elementToJSON: function(el, opt_findClickThru) { - var pos = this.getPosition(el); - var params = this.getParams(el); - var url = this.getUrl(el, params); - var flashvars = this.getFlashvars(el, params, url); - var clickThru = opt_findClickThru && this.findClickThru(el, flashvars); - var json = { - tagName: el.tagName, - width: pos.width, - height: pos.height, - left: pos.left, - top: pos.top, - children: [] - }; - - if ( params ) { - - delete params.flashvars; - } + /** + * + * @param {*} el + * @param {*} params + * @param {*} url + * + * @todo add description + */ + getFlashvars: function(el, params, url) { + var flashvars + var urlQS = url && url.split('?')[1] + + if (el.tagName === 'EMBED') { + flashvars = el.getAttribute('flashvars') || urlQS + } else if (el.tagName === 'OBJECT') { + flashvars = params.flashvars || el.getAttribute('flashvars') || urlQS + } - this.putAttrIfExists(json, el, 'id'); - this.putAttrIfExists(json, el, 'class'); - this.putAttrIfExists(json, el, 'name'); + return (flashvars && exports.utils.parseQS(flashvars)) || null + }, - this.putPropIfExists(json, 'flashvars', flashvars); - this.putPropIfExists(json, 'url', url); - this.putPropIfExists(json, 'params', params); - this.putPropIfExists(json, 'clickThru', clickThru); + /** + * + * @param {*} el + * @param {*} flashvars + * + * @todo add description + */ + findClickThru: function(el, flashvars) { + var key + if (el.tagName === 'IMG' && el.parentElement.tagName === 'A') { + return el.parentElement.href + } else if (flashvars) { + for (key in flashvars) { + if (flashvars.hasOwnProperty(key)) { + if (key.toLowerCase().indexOf('clicktag') === 0) { + return flashvars[key] + } + } + } + } + return null + }, - return json; - } - }; + /** + * Get element attribute. + * @param {HTMLElement} el + * @param {String} name + */ + getAttr: function(el, name) { + var val = el.getAttribute(name) - exports.parser = { elementToJSON: parser.elementToJSON.bind(parser) }; -})(exports); + if (val && val.slice && val.toString) { + return val.slice(0, this.MAX_ATTR_LEN).toString() + } else { + return null + } + }, -(function(exports) { + /** + * + * @param {*} obj + * @param {*} name + * @param {*} val + * + * @todo add description + */ + putPropIfExists: function(obj, name, val) { + if (val) { + obj[name] = val + } + }, - var ContextManager = function(adData) { - this.adData = adData; - }; + /** + * + * @param {*} obj + * @param {*} el + * @param {*} name + * + * @todo add description + */ + putAttrIfExists: function(obj, el, name) { + var val = this.getAttr(el, name) + this.putPropIfExists(obj, name, val) + }, - ContextManager.prototype = { - CONTAINER_SIZE_TOL: 0.4, - ASPECT_RATIO_FOR_LEADERBOARDS: 2, + /** + * Convert Element to JSON + * @param {HTMLElement} el + * @param {Boolean} opt_findClickThru + */ + elementToJSON: function(el, opt_findClickThru) { + var pos = this.getPosition(el) + var params = this.getParams(el) + var url = this.getUrl(el, params) + var flashvars = this.getFlashvars(el, params, url) + var clickThru = opt_findClickThru && this.findClickThru(el, flashvars) + var json = { + tagName: el.tagName, + width: pos.width, + height: pos.height, + left: pos.left, + top: pos.top, + children: [] + } - isValidContainer: function(el, opt_curWin) { + if (params) { + delete params.flashvars + } - var cWidth = el.clientWidth; - var cHeight = el.clientHeight; + this.putAttrIfExists(json, el, 'id') + this.putAttrIfExists(json, el, 'class') + this.putAttrIfExists(json, el, 'name') - var adWidth = this.adData.width; - var adHeight = this.adData.height; + this.putPropIfExists(json, 'flashvars', flashvars) + this.putPropIfExists(json, 'url', url) + this.putPropIfExists(json, 'params', params) + this.putPropIfExists(json, 'clickThru', clickThru) - var winWidth = opt_curWin && opt_curWin.innerWidth; - var winHeight = opt_curWin && opt_curWin.innerHeight; - var similarWin = opt_curWin && this.withinTol(adWidth, winWidth) && this.withinTol(adHeight, winHeight); + return json + } + } - var similarSizeX = this.withinTol(adWidth, cWidth); - var similarSizeY = this.withinTol(adHeight, cHeight); - var adAspect = adWidth / adHeight; + exports.parser = { elementToJSON: parser.elementToJSON.bind(parser) } + })(exports) + + // Anonymous invocation. + ;(function(exports) { + /** + * Setter for ad data. + * @param {*} adData + */ + var ContextManager = function(adData) { + this.adData = adData + } - return similarWin || el.tagName === 'A' || (adAspect >= this.ASPECT_RATIO_FOR_LEADERBOARDS && similarSizeY) || (similarSizeX && similarSizeY); - }, + ContextManager.prototype = { + CONTAINER_SIZE_TOL: 0.4, + ASPECT_RATIO_FOR_LEADERBOARDS: 2, + + /** + * Check if iframe is valid. + * @param {HTMLElement} el + * @param {HTMLElement} opt_curWin + */ + isValidContainer: function(el, opt_curWin) { + var cWidth = el.clientWidth + var cHeight = el.clientHeight + + var adWidth = this.adData.width + var adHeight = this.adData.height + + var winWidth = opt_curWin && opt_curWin.innerWidth + var winHeight = opt_curWin && opt_curWin.innerHeight + var similarWin = + opt_curWin && + this.withinTol(adWidth, winWidth) && + this.withinTol(adHeight, winHeight) + + var similarSizeX = this.withinTol(adWidth, cWidth) + var similarSizeY = this.withinTol(adHeight, cHeight) + var adAspect = adWidth / adHeight + + return ( + similarWin || + el.tagName === 'A' || + (adAspect >= this.ASPECT_RATIO_FOR_LEADERBOARDS && similarSizeY) || + (similarSizeX && similarSizeY) + ) + }, - withinTol: function(adlen, conlen) { - var pct = (conlen - adlen) / adlen; + /** + * Check tolerance. + * @param {Int} adlen + * @param {Int} conlen + */ + withinTol: function(adlen, conlen) { + var pct = (conlen - adlen) / adlen - return pct <= this.CONTAINER_SIZE_TOL; - }, + return pct <= this.CONTAINER_SIZE_TOL + }, - serializeElements: function(el) { - if ( !el ) { - return; - } - var i; - var ifrWin; - var adId = this.adData.adId; - var elIsAd = false; + /** + * Serialize elements. + * @param {*} el + * @todo define parameter type. + */ + serializeElements: function(el) { + if (!el) { + return + } + var i + var ifrWin + var adId = this.adData.adId + var elIsAd = false - if ( adId && el[adId] && el[adId].isAd === true ) { - elIsAd = true; - } + if (adId && el[adId] && el[adId].isAd === true) { + elIsAd = true + } - var json = exports.parser.elementToJSON(el, elIsAd); - var childJSON; + var json = exports.parser.elementToJSON(el, elIsAd) + var childJSON - if ( elIsAd ) { - json.adId = adId; - this.adData.element = {}; + if (elIsAd) { + json.adId = adId + this.adData.element = {} - var keys = Object.keys(json); - for ( i = 0; i < keys.length; i++ ) { - var key = keys[i]; - if ( key !== 'children' && key !== 'contents' ) { - this.adData.element[key] = json[key]; + var keys = Object.keys(json) + for (i = 0; i < keys.length; i++) { + var key = keys[i] + if (key !== 'children' && key !== 'contents') { + this.adData.element[key] = json[key] + } } } - } - var children = exports.utils.realArray(el.children).filter(function(el) { - var param = el.tagName === 'PARAM'; - var inlineScript = el.tagName === 'SCRIPT' && !(el.src && el.src.indexOf('http') >= 0); - var noScript = el.tagName === 'NOSCRIPT'; - return !(param || inlineScript || noScript); - }); - - for ( i = 0; i < children.length; i++ ) { - childJSON = this.serializeElements(children[i]); - if ( childJSON ) { - json.children.push(childJSON); + var children = exports.utils + .realArray(el.children) + .filter(function(el) { + var param = el.tagName === 'PARAM' + var inlineScript = + el.tagName === 'SCRIPT' && + !(el.src && el.src.indexOf('http') >= 0) + var noScript = el.tagName === 'NOSCRIPT' + return !(param || inlineScript || noScript) + }) + + for (i = 0; i < children.length; i++) { + childJSON = this.serializeElements(children[i]) + if (childJSON) { + json.children.push(childJSON) + } } - } - - if ( el.tagName === 'IFRAME' ) { - ifrWin = el.contentWindow; - if ( adId && el[adId] && el[adId].needsWindow ) { - - json.contents = this.adData.serializedIframeContents; - el[adId].needsWindow = false; - delete this.adData.serializedIframeContents; - - } else if ( exports.utils.isFriendlyWindow(ifrWin) ) { - - childJSON = this.serializeElements(ifrWin.document.documentElement); - if ( childJSON ) { - json.contents = childJSON; + if (el.tagName === 'IFRAME') { + ifrWin = el.contentWindow + + if (adId && el[adId] && el[adId].needsWindow) { + json.contents = this.adData.serializedIframeContents + el[adId].needsWindow = false + delete this.adData.serializedIframeContents + } else if (exports.utils.isFriendlyWindow(ifrWin)) { + childJSON = this.serializeElements(ifrWin.document.documentElement) + if (childJSON) { + json.contents = childJSON + } } } - } - - if ( json.children.length > 0 || json.adId || json.tagName === 'IFRAME' || json.url ) { - return json; - } else { - return null; - } - }, - - captureHTML: function(containerEl) { - this.adData.context = this.serializeElements(containerEl); - }, - nodeCount: function(el) { - return el.getElementsByTagName('*').length + 1; - }, - - highestContainer: function(curWin, referenceElement) { - var curContainer = referenceElement; - var docEl = curWin.document.documentElement; - var parentContainer; - - if ( curWin !== curWin.top && this.isValidContainer(docEl, curWin) ) { - return docEl; - } - - while ( true ) { - parentContainer = curContainer.parentElement; - if ( parentContainer && this.isValidContainer(parentContainer) ) { - curContainer = parentContainer; + if ( + json.children.length > 0 || + json.adId || + json.tagName === 'IFRAME' || + json.url + ) { + return json } else { - return curContainer; + return null } - } - } - }; - - var tagfinder = { - - setPositions: function(adData, opt_el, opt_winPos) { - var el = opt_el || adData.context; - var winPos = opt_winPos || {left: 0, top: 0}; - var ifrPos; - - el.left += winPos.left; - el.top += winPos.top; - - if ( el.children ) { - el.children.forEach(function(child) { - this.setPositions(adData, child, winPos); - }, this); - } - - if ( el.contents ) { - ifrPos = {left: el.left, top: el.top}; - this.setPositions(adData, el.contents, ifrPos); - } + }, - if ( el.adId === adData.adId ) { - adData.element.left = el.left; - adData.element.top = el.top; - } - }, - - appendTags: function(adData, referenceElement) { - var mgr = new ContextManager(adData); - var curWin = exports.utils.elementWindow(referenceElement); - var highestContainer; - - while ( true ) { - highestContainer = mgr.highestContainer(curWin, referenceElement); - mgr.captureHTML(highestContainer); - if ( curWin === curWin.top ) { - break; - } else { + /** + * Get element containers. + * @param {*} containerEl + */ + captureHTML: function(containerEl) { + this.adData.context = this.serializeElements(containerEl) + }, - curWin.mpAdFound = true; + /** + * Get number of Nodes. + * @param {HTMLElement} el + */ + nodeCount: function(el) { + return el.getElementsByTagName('*').length + 1 + }, - mgr.adData.serializedIframeContents = mgr.adData.context; + /** + * + * @param {*} curWin + * @param {*} referenceElement + * + * @todo add description + */ + highestContainer: function(curWin, referenceElement) { + var curContainer = referenceElement + var docEl = curWin.document.documentElement + var parentContainer + + if (curWin !== curWin.top && this.isValidContainer(docEl, curWin)) { + return docEl + } - if ( exports.utils.isFriendlyWindow(curWin.parent) ) { - referenceElement = curWin.frameElement; - referenceElement[mgr.adData.adId] = {needsWindow: true}; - curWin = curWin.parent; + while (true) { + parentContainer = curContainer.parentElement + if (parentContainer && this.isValidContainer(parentContainer)) { + curContainer = parentContainer } else { - break; + return curContainer } } } - return { - referenceElement:referenceElement, - highestContainer: highestContainer - }; } - }; - - exports.tagfinder = tagfinder; -})(exports); - -(function(exports) { - var _onAdFound; - var _logGen = new exports.utils.LogGenerator(); - var _pageTags; - var INIT_MS_BW_SEARCHES = 2000; - var PAGE_TAG_RE = new RegExp('gpt|oascentral'); - var POST_MSG_ID = '1554456894-8541-12665-19466-15909'; - var AD_SERVER_RE = new RegExp('^(google_ads_iframe|oas_frame|atwAdFrame)'); - - function getPageTags(doc) { - var scripts = doc.getElementsByTagName('script'); - var pageTags = []; - scripts = exports.utils.realArray(scripts); - scripts.forEach(function(script) { - if ( PAGE_TAG_RE.exec(script.src) ) { - pageTags.push({'tagName': 'SCRIPT', 'url': script.src}); - } - }); - return pageTags; - } - - function messageAllParentFrames(adData) { - - adData.postMessageId = POST_MSG_ID; - - adData = JSON.stringify(adData); - - var win = window; - while ( win !== win.top ) { - win = win.parent; - win.postMessage(adData, '*'); - } - } - function appendTagsAndSendToParent(adData, referenceElement) { - var results = exports.tagfinder.appendTags(adData, referenceElement); - if ( exports.utils.SCRIPT_IN_HOSTILE_IFRAME ) { - messageAllParentFrames(adData); - - } else if ( exports.utils.SCRIPT_IN_WINDOW_TOP ) { - - exports.tagfinder.setPositions(adData); - - adData.matchedSize = exports.adfinder.getMatchedAdSize(adData.width, adData.height); - if ( !adData.matchedSize ) { + var tagfinder = { + /** + * + * @param {*} adData + * @param {*} opt_el + * @param {*} opt_winPos + * + * @todo add description + */ + setPositions: function(adData, opt_el, opt_winPos) { + var el = opt_el || adData.context + var winPos = opt_winPos || { left: 0, top: 0 } + var ifrPos + + el.left += winPos.left + el.top += winPos.top + + if (el.children) { + el.children.forEach(function(child) { + this.setPositions(adData, child, winPos) + }, this) + } - if ( AD_SERVER_RE.exec(results.referenceElement.id) ) { - adData.matchedSize = [adData.width, adData.height]; - adData.oddSize = true; - } else { + if (el.contents) { + ifrPos = { left: el.left, top: el.top } + this.setPositions(adData, el.contents, ifrPos) + } - return; + if (el.adId === adData.adId) { + adData.element.left = el.left + adData.element.top = el.top } - } - delete adData.width; - delete adData.height; - adData.curPageUrl = exports.utils.getPageUrl(); - _pageTags = _pageTags || getPageTags(document); - var log = _logGen.log('ad', [adData], _pageTags); + }, - if ( _onAdFound ) { + /** + * + * @param {*} adData + * @param {*} referenceElement + * + * @todo add description + */ + appendTags: (adData, referenceElement) => { + var mgr = new ContextManager(adData) + var curWin = exports.utils.elementWindow(referenceElement) + var highestContainer + + while (true) { + highestContainer = mgr.highestContainer(curWin, referenceElement) + mgr.captureHTML(highestContainer) + if (curWin === curWin.top) { + break + } else { + curWin.mpAdFound = true - _onAdFound(log, results.referenceElement); + mgr.adData.serializedIframeContents = mgr.adData.context + if (exports.utils.isFriendlyWindow(curWin.parent)) { + referenceElement = curWin.frameElement + referenceElement[mgr.adData.adId] = { needsWindow: true } + curWin = curWin.parent + } else { + break + } + } + } + return { + referenceElement: referenceElement, + highestContainer: highestContainer + } } } - } - function extractAdsWrapper() { - if ( exports.utils.SCRIPT_IN_WINDOW_TOP || document.readyState === 'complete' ) { - extractAds(); + exports.tagfinder = tagfinder + })(exports) + ;(function(exports) { + var _onAdFound + var _logGen = new exports.utils.LogGenerator() + var _pageTags + var INIT_MS_BW_SEARCHES = 2000 + var PAGE_TAG_RE = new RegExp('gpt|oascentral') + var POST_MSG_ID = '1554456894-8541-12665-19466-15909' + var AD_SERVER_RE = new RegExp('^(google_ads_iframe|oas_frame|atwAdFrame)') + + /** + * Get script tags from document. + * @param {Object} doc + */ + function getPageTags(doc) { + var scripts = doc.getElementsByTagName('script') + var pageTags = [] + scripts = exports.utils.realArray(scripts) + scripts.forEach(function(script) { + if (PAGE_TAG_RE.exec(script.src)) { + pageTags.push({ tagName: 'SCRIPT', url: script.src }) + } + }) + return pageTags } - setTimeout( - function() { extractAdsWrapper(); }, INIT_MS_BW_SEARCHES - ); - } - - function extractAds() { - var ads = exports.adfinder.findAds(window); - ads.forEach(function(ad) { - var startTime = new Date().getTime(); - var adId = startTime + '-' + Math.floor(Math.random() * 10e12); + /** + * Send message to parent iFrames. + * @param {String} adData + */ + function messageAllParentFrames(adData) { + adData.postMessageId = POST_MSG_ID - var adData = { - width: Math.round(ad.offsetWidth), - height: Math.round(ad.offsetHeight), - startTime: startTime, - adId: adId, - html5: ad.html5 || false - }; + adData = JSON.stringify(adData) - if ( ad.html5 ) { - adData.adSizeMeta = ad.adSizeMeta || null; - adData.winClickTag = ad.winClickTag || null; + var win = window + while (win !== win.top) { + win = win.parent + win.postMessage(adData, '*') } - - ad[adId] = { isAd: true }; - - appendTagsAndSendToParent(adData, ad); - }); - } - - function isChildWin(myWin, otherWin) { - var parentWin = otherWin.parent; - while ( parentWin !== otherWin ) { - if ( parentWin === myWin ) { - return true; - } - otherWin = parentWin; - parentWin = parentWin.parent; } - return false; - } - - function iframeFromWindow(win, winToMatch) { - var i, ifr, ifrWin, - iframes = win.document.querySelectorAll('iframe'); - for ( i = 0; i < iframes.length; i++ ) { - ifr = iframes[i]; - if ( ifr.contentWindow === winToMatch ) { - return ifr; + /** + * + * @param {String} adData + * @param {HTMLElement} referenceElement + * + * @todo update description + */ + function appendTagsAndSendToParent(adData, referenceElement) { + var results = exports.tagfinder.appendTags(adData, referenceElement) + if (exports.utils.SCRIPT_IN_HOSTILE_IFRAME) { + messageAllParentFrames(adData) + } else if (exports.utils.SCRIPT_IN_WINDOW_TOP) { + exports.tagfinder.setPositions(adData) + + adData.matchedSize = exports.adfinder.getMatchedAdSize( + adData.width, + adData.height + ) + if (!adData.matchedSize) { + if (AD_SERVER_RE.exec(results.referenceElement.id)) { + adData.matchedSize = [adData.width, adData.height] + adData.oddSize = true + } else { + return + } + } + delete adData.width + delete adData.height + adData.curPageUrl = exports.utils.getPageUrl() + _pageTags = _pageTags || getPageTags(document) + var log = _logGen.log('ad', [adData], _pageTags) + + if (_onAdFound) { + _onAdFound(log, results.referenceElement) + } } } - for ( i = 0; i < iframes.length; i++ ) { - ifrWin = iframes[i].contentWindow; - if ( exports.utils.isFriendlyWindow(ifrWin) ) { - ifr = iframeFromWindow(ifrWin, winToMatch); - if ( ifr ) { - return ifr; - } + /** + * SetTimeout wrapper for extracting ads. + */ + function extractAdsWrapper() { + if ( + exports.utils.SCRIPT_IN_WINDOW_TOP || + document.readyState === 'complete' + ) { + extractAds() } + setTimeout(function() { + extractAdsWrapper() + }, INIT_MS_BW_SEARCHES) } - } - function onPostMessage(event) { - var adData, - ifrWin = event.source, + /** + * Main function for extracting ads after loaded. + */ + function extractAds() { + var ads = exports.adfinder.findAds(window) + ads.forEach(function(ad) { + var startTime = new Date().getTime() + var adId = startTime + '-' + Math.floor(Math.random() * 10e12) + + var adData = { + width: Math.round(ad.offsetWidth), + height: Math.round(ad.offsetHeight), + startTime: startTime, + adId: adId, + html5: ad.html5 || false + } - myWin = window.document.defaultView, - ifrTag; + if (ad.html5) { + adData.adSizeMeta = ad.adSizeMeta || null + adData.winClickTag = ad.winClickTag || null + } - if ( typeof event.data === "string" && event.data.indexOf(POST_MSG_ID) != -1 ) { - try { + ad[adId] = { isAd: true } - adData = JSON.parse(event.data); - } catch (e) { + appendTagsAndSendToParent(adData, ad) + }) + } - return; + /** + * Check if window is child of parent. + * @param {Object} myWin + * @param {Object} otherWin + */ + function isChildWin(myWin, otherWin) { + var parentWin = otherWin.parent + while (parentWin !== otherWin) { + if (parentWin === myWin) { + return true + } + otherWin = parentWin + parentWin = parentWin.parent } + return false } - else - return; - - if ( adData.postMessageId === POST_MSG_ID ) { - delete adData.postMessageId; - - event.stopImmediatePropagation(); - - if ( isChildWin(myWin, ifrWin) ) { - if ( exports.utils.isFriendlyWindow(ifrWin) ) { - ifrTag = ifrWin.frameElement; - } else { - ifrTag = iframeFromWindow(myWin, ifrWin); + /** + * + * @param {*} win + * @param {*} winToMatch + * + * @todo update description + */ + function iframeFromWindow(win, winToMatch) { + var i, + ifr, + ifrWin, + iframes = win.document.querySelectorAll('iframe') + + for (i = 0; i < iframes.length; i++) { + ifr = iframes[i] + if (ifr.contentWindow === winToMatch) { + return ifr } + } - if ( ifrTag ) { - ifrTag[adData.adId] = {needsWindow: true}; - appendTagsAndSendToParent(adData, ifrTag); + for (i = 0; i < iframes.length; i++) { + ifrWin = iframes[i].contentWindow + if (exports.utils.isFriendlyWindow(ifrWin)) { + ifr = iframeFromWindow(ifrWin, winToMatch) + if (ifr) { + return ifr + } } } } - } - - function onVideoMessage(msg, sender, callback) { - var log; - if ( msg.event === 'new-video-ad' ) { - msg.assets.forEach(function(asset) { - }); - log = _logGen.log('video', msg.assets); - } else { - log = _logGen.log('invalid-video', msg.assets); - } + /** + * + * @param {*} event + * + * @todo update description + */ + function onPostMessage(event) { + var adData, + ifrWin = event.source, + myWin = window.document.defaultView, + ifrTag + + if ( + typeof event.data === 'string' && + event.data.indexOf(POST_MSG_ID) != -1 + ) { + try { + adData = JSON.parse(event.data) + } catch (e) { + return + } + } else return - msg.assets.forEach(function(a) {delete a.isVideo;}); - log.displayAdFound = msg.displayAdFound; - log.requests = msg.requests; - log.data = msg.event_data; + if (adData.postMessageId === POST_MSG_ID) { + delete adData.postMessageId - log.doc.finalPageUrl = log.doc.url; - log.doc.url = exports.utils.normalizeUrl(msg.origUrl); + event.stopImmediatePropagation() - _onAdFound(log); - } + if (isChildWin(myWin, ifrWin)) { + if (exports.utils.isFriendlyWindow(ifrWin)) { + ifrTag = ifrWin.frameElement + } else { + ifrTag = iframeFromWindow(myWin, ifrWin) + } - function addBackgroundListener(event, callback) { - if ( typeof browser !== 'undefined' || typeof chrome !== 'undefined' ) { - browser.runtime.onMessage.addListener(function(msg) { - if ( msg.event === event ) { - callback(msg); + if (ifrTag) { + ifrTag[adData.adId] = { needsWindow: true } + appendTagsAndSendToParent(adData, ifrTag) + } } - }); - } - else if (window.self.port) { - window.self.port.on(event, callback); + } } - } - exports.coordinator = { - addPostMessageListener: function() { - if ( !exports.utils.SCRIPT_IN_FRIENDLY_IFRAME ) { - window.addEventListener('message', onPostMessage, false); + /** + * + * @param {*} msg + * @param {*} sender + * @param {*} callback + * + * @todo update description + */ + function onVideoMessage(msg, sender, callback) { + var log + if (msg.event === 'new-video-ad') { + msg.assets.forEach(function(asset) {}) + log = _logGen.log('video', msg.assets) + } else { + log = _logGen.log('invalid-video', msg.assets) } - }, - blockedRobotsMsgGen: function(sendFcn, origUrl) { + msg.assets.forEach(function(a) { + delete a.isVideo + }) + log.displayAdFound = msg.displayAdFound + log.requests = msg.requests + log.data = msg.event_data - if ( origUrl.indexOf('google.com/_/chrome/newtab') === -1 ) { - var onBlockedRobotsMessage = function() { - var log; - log = _logGen.log('invalid-robotstxt', []); - log.doc.finalPageUrl = log.doc.url; - log.doc.url = exports.utils.normalizeUrl(origUrl); + log.doc.finalPageUrl = log.doc.url + log.doc.url = exports.utils.normalizeUrl(msg.origUrl) - sendFcn(log); - }; - return onBlockedRobotsMessage; - } else { - return function() {}; - } - }, + _onAdFound(log) + } - init: function(onAdFound) { + /** + * Add background listener. + * @param {String} event + * @param {Function} callback + */ + function addBackgroundListener(event, callback) { + chrome.runtime.onMessage.addListener(function(msg) { + if (msg.event === event) { + callback(msg) + } + }) + } - if ( exports.utils.SCRIPT_IN_FRIENDLY_IFRAME ) { - return false; - } + exports.coordinator = { + /** + * @todo update description + */ + addPostMessageListener: function() { + if (!exports.utils.SCRIPT_IN_FRIENDLY_IFRAME) { + window.addEventListener('message', onPostMessage, false) + } + }, - _onAdFound = onAdFound; - if ( exports.utils.SCRIPT_IN_WINDOW_TOP ) { - var log = _logGen.log('page'); - onAdFound(log); + /** + * + * @param {*} sendFcn + * @param {*} origUrl + * + * @todo update description + */ + blockedRobotsMsgGen: function(sendFcn, origUrl) { + if (origUrl.indexOf('google.com/_/chrome/newtab') === -1) { + var onBlockedRobotsMessage = function() { + var log + log = _logGen.log('invalid-robotstxt', []) + log.doc.finalPageUrl = log.doc.url + log.doc.url = exports.utils.normalizeUrl(origUrl) + + sendFcn(log) + } + return onBlockedRobotsMessage + } else { + return function() {} + } + }, - window.addEventListener('beforeunload', function(event) { - var log = _logGen.log('unload'); - log.timing = window.performance.timing; - onAdFound(log); - }); + /** + * + * @param {*} onAdFound + */ + init: function(onAdFound) { + if (exports.utils.SCRIPT_IN_FRIENDLY_IFRAME) { + return false + } - addBackgroundListener('new-video-ad', onVideoMessage); - addBackgroundListener('new-invalid-video-ad', onVideoMessage); + _onAdFound = onAdFound + if (exports.utils.SCRIPT_IN_WINDOW_TOP) { + var log = _logGen.log('page') + onAdFound(log) - } + window.addEventListener('beforeunload', function(event) { + var log = _logGen.log('unload') + log.timing = window.performance.timing + onAdFound(log) + }) - exports.utils.onDocLoaded(document, extractAdsWrapper); - } - }; - -})(exports); - -if ( exports.utils.SCRIPT_IN_WINDOW_TOP ) { - window.adparser = { - init: exports.coordinator.init, - addPostMessageListener: exports.coordinator.addPostMessageListener, - askIfTrackingEnabled: exports.utils.askIfTrackingEnabled, - blockedRobotsMsgGen: exports.coordinator.blockedRobotsMsgGen, - inWindowTop: exports.utils.SCRIPT_IN_WINDOW_TOP, - sendToBackground: exports.utils.sendToBackground - }; -} else { - exports.coordinator.addPostMessageListener(); - exports.utils.askIfTrackingEnabled( - function() { - exports.coordinator.init(function() {}); - }, - function() {} - ); -} -})(window); -(function(adparser, pageUrl) { - function onAdFound(log) { - adparser.sendToBackground({ id: 'ad_log', subject: log }, 'ad_log', '', function(){}); - } + addBackgroundListener('new-video-ad', onVideoMessage) + addBackgroundListener('new-invalid-video-ad', onVideoMessage) + } - if ( adparser && adparser.inWindowTop ) { - adparser.addPostMessageListener(); - adparser.askIfTrackingEnabled( + exports.utils.onDocLoaded(document, extractAdsWrapper) + } + } + })(exports) + + if (exports.utils.SCRIPT_IN_WINDOW_TOP) { + window.adparser = { + init: exports.coordinator.init, + addPostMessageListener: exports.coordinator.addPostMessageListener, + askIfTrackingEnabled: exports.utils.askIfTrackingEnabled, + blockedRobotsMsgGen: exports.coordinator.blockedRobotsMsgGen, + inWindowTop: exports.utils.SCRIPT_IN_WINDOW_TOP, + sendToBackground: exports.utils.sendToBackground + } + } else { + exports.coordinator.addPostMessageListener() + exports.utils.askIfTrackingEnabled( function() { - adparser.init(onAdFound); + exports.coordinator.init(function() {}) }, - adparser.blockedRobotsMsgGen(onAdFound, pageUrl) + function() {} + ) + } +})(window) +;(function(adparser, pageUrl) { + function onAdFound(log) { + adparser.sendToBackground( + { source: 'iframe.js', func: 'onAd', args: [log] }, + 'onAd', + '', + function() {} ) } -})(window.adparser, window.location.href); + + if (adparser && adparser.inWindowTop) { + adparser.addPostMessageListener() + adparser.askIfTrackingEnabled(function() { + adparser.init(onAdFound) + }, adparser.blockedRobotsMsgGen(onAdFound, pageUrl)) + } +})(window.adparser, window.location.href) diff --git a/src/drivers/webextension/js/lib/jsontodom.js b/src/drivers/webextension/js/lib/jsontodom.js deleted file mode 100644 index 24d9e4c29e6c9545e146517cc6bd3c28a0e36e56..0000000000000000000000000000000000000000 --- a/src/drivers/webextension/js/lib/jsontodom.js +++ /dev/null @@ -1,63 +0,0 @@ -jsonToDOM.namespaces = { - html: 'http://www.w3.org/1999/xhtml', - xul: 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', -}; - -jsonToDOM.defaultNamespace = jsonToDOM.namespaces.html; - -function jsonToDOM(jsonTemplate, doc, nodes) { - function namespace(name) { - const reElemNameParts = /^(?:(.*):)?(.*)$/.exec(name); - return { namespace: jsonToDOM.namespaces[reElemNameParts[1]], shortName: reElemNameParts[2] }; - } - - // Note that 'elemNameOrArray' is: either the full element name (eg. [html:]div) or an array of elements in JSON notation - function tag(elemNameOrArray, elemAttr) { - // Array of elements? Parse each one... - if (Array.isArray(elemNameOrArray)) { - const frag = doc.createDocumentFragment(); - Array.prototype.forEach.call(arguments, (thisElem) => { - frag.appendChild(tag(...thisElem)); - }); - return frag; - } - - // Single element? Parse element namespace prefix (if none exists, default to defaultNamespace), and create element - const elemNs = namespace(elemNameOrArray); - const elem = doc.createElementNS(elemNs.namespace || jsonToDOM.defaultNamespace, elemNs.shortName); - - // Set element's attributes and/or callback functions (eg. onclick) - for (const key in elemAttr) { - const val = elemAttr[key]; - if (nodes && key == 'key') { - nodes[val] = elem; - continue; - } - - const attrNs = namespace(key); - if (typeof val === 'function') { - // Special case for function attributes; don't just add them as 'on...' attributes, but as events, using addEventListener - elem.addEventListener(key.replace(/^on/, ''), val, false); - } else { - // Note that the default namespace for XML attributes is, and should be, blank (ie. they're not in any namespace) - elem.setAttributeNS(attrNs.namespace || '', attrNs.shortName, val); - } - } - - // Create and append this element's children - const childElems = Array.prototype.slice.call(arguments, 2); - childElems.forEach((childElem) => { - if (childElem != null) { - elem.appendChild( - childElem instanceof doc.defaultView.Node ? childElem - : Array.isArray(childElem) ? tag(...childElem) - : doc.createTextNode(childElem), - ); - } - }); - - return elem; - } - - return tag(...jsonTemplate); -} diff --git a/src/drivers/webextension/js/lib/network.js b/src/drivers/webextension/js/lib/network.js index 7c46fcf9f451f003c3388c88621a5296bec09ae6..3e0c8d46ad6cfd633782606cea25c13943e780ee 100644 --- a/src/drivers/webextension/js/lib/network.js +++ b/src/drivers/webextension/js/lib/network.js @@ -1,19 +1,6 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i= MIN_FF_MAJOR_VERSION) { - callback(); - } else { - elseCallback(); - } - }); - } catch (err) { - - elseCallback(); - } - } else { - elseCallback(); - } + chrome.webNavigation.getFrame(getFrameDetails, callback); } function ifTrackingEnabled(details, ifCallback, elseCallback) { @@ -112,24 +72,19 @@ allowedByRobotsTxt(details, ifCallback, elseCallback); }; - browser.storage.local.get('tracking').then(function(item) { - - if ( item.hasOwnProperty('tracking') ) { - if ( item.tracking ) { - fullIfCallback(); - } else { - elseCallback(); - } - } else { - fullIfCallback(); - } + Utils.getOption('tracking', true).then(function(tracking) { + if ( tracking ) { + fullIfCallback(); + } else { + elseCallback(); + } }); } function allowedByRobotsTxt(details, ifCallback, elseCallback) { if ( details.url && !details.url.startsWith('chrome://') ) { - robotsTxtAllows(details.url).then(ifCallback, elseCallback); + Driver.checkRobots(details.url, details.url.startsWith('https:')).then(ifCallback).catch(elseCallback); } else { elseCallback(); } @@ -268,7 +223,7 @@ PageNetworkTrafficCollector.prototype.sendLogMessageToTabConsole = function() { var logMessage = Array.from(arguments).join(' '); var message = {message: logMessage, event: 'console-log-message'}; - browser.tabs.sendMessage(this.tabId, message); + chrome.tabs.sendMessage(this.tabId, message); }; PageNetworkTrafficCollector.prototype.sendToTab = function(assetReq, reqs, curPageUrl, adTrackingEvent) { @@ -298,7 +253,7 @@ msg.origUrl = curPageUrl; msg.displayAdFound = this.displayAdFound; - browser.tabs.sendMessage(this.tabId, msg); + chrome.tabs.sendMessage(this.tabId, msg); }; PageNetworkTrafficCollector.prototype.getRedirKey = function(url, frameId) { @@ -615,7 +570,7 @@ var _this = this, origPageUrl, msgAssetReq; msgAssetReq = this.msgsBeingSent[msgKey]; - browser.tabs.get(this.tabId).then(function(tab) { + chrome.tabs.get(this.tabId, function(tab) { origPageUrl = tab.url; }); @@ -697,126 +652,96 @@ function registerListeners() { - browser.webRequest.onBeforeRequest.addListener( + chrome.webRequest.onBeforeRequest.addListener( onBeforeRequestListener, {urls: ['http://*/*', 'https://*/*']}, [] ); - browser.webRequest.onSendHeaders.addListener( + chrome.webRequest.onSendHeaders.addListener( onSendHeadersListener, {urls: ['http://*/*', 'https://*/*']}, ['requestHeaders'] ); - browser.webRequest.onHeadersReceived.addListener( + chrome.webRequest.onHeadersReceived.addListener( onHeadersReceivedListener, {urls: ['http://*/*', 'https://*/*']}, ['responseHeaders'] ); - browser.webRequest.onBeforeRedirect.addListener( + chrome.webRequest.onBeforeRedirect.addListener( onBeforeRedirectListener, {urls: ['http://*/*', 'https://*/*']}, [] ); - browser.webRequest.onResponseStarted.addListener( + chrome.webRequest.onResponseStarted.addListener( onResponseStartedListener, {urls: ['http://*/*', 'https://*/*']}, ['responseHeaders'] ); - browser.webNavigation.onCommitted.addListener(onCommittedListener); - browser.webNavigation.onCompleted.addListener(onCompletedListener); - browser.tabs.onRemoved.addListener(onRemovedListener); - browser.runtime.onMessage.addListener(onMessageListener); + chrome.webNavigation.onCommitted.addListener(onCommittedListener); + chrome.webNavigation.onCompleted.addListener(onCompletedListener); + chrome.tabs.onRemoved.addListener(onRemovedListener); + chrome.runtime.onMessage.addListener(onMessageListener); areListenersRegistered = true; } function unregisterListeners() { - browser.webRequest.onBeforeRequest.removeListener( + chrome.webRequest.onBeforeRequest.removeListener( onBeforeRequestListener ); - browser.webRequest.onSendHeaders.removeListener( + chrome.webRequest.onSendHeaders.removeListener( onSendHeadersListener ); - browser.webRequest.onHeadersReceived.removeListener( + chrome.webRequest.onHeadersReceived.removeListener( onHeadersReceivedListener ); - browser.webRequest.onBeforeRedirect.removeListener( + chrome.webRequest.onBeforeRedirect.removeListener( onBeforeRedirectListener ); - browser.webRequest.onResponseStarted.removeListener( + chrome.webRequest.onResponseStarted.removeListener( onResponseStartedListener ); - browser.webNavigation.onCommitted.removeListener(onCommittedListener); - browser.webNavigation.onCompleted.removeListener(onCompletedListener); - browser.tabs.onRemoved.removeListener(onRemovedListener); - browser.runtime.onMessage.removeListener(onMessageListener); + chrome.webNavigation.onCommitted.removeListener(onCommittedListener); + chrome.webNavigation.onCompleted.removeListener(onCompletedListener); + chrome.tabs.onRemoved.removeListener(onRemovedListener); + chrome.runtime.onMessage.removeListener(onMessageListener); areListenersRegistered = false; } - function areRequiredBrowserApisAvailable() { - return requiredBrowserApis.every(function(api) { - return typeof api !== 'undefined'; - }); - } - - if ( areRequiredBrowserApisAvailable() ) { - ifBrowserValid( - function() { - browser.webNavigation.onBeforeNavigate.addListener( - function(details) { - if ( details.frameId === 0 ) { - globalPageContainer.onNewNavigation(details); - } - }, - { - url: [{urlMatches: 'http://*/*'}, {urlMatches: 'https://*/*'}] - } - ); - }, function() { - - } - ); - } - - browser.runtime.onConnect.addListener((port) => { - port.onMessage.addListener((message) => { - if ( message === 'is_browser_valid' ) { - ifBrowserValid( - port.postMessage({'browser_valid': true}), - port.postMessage({'browser_valid': false}) - ); - } - }); - }); - - browser.runtime.onConnect.addListener((port) => { - port.onMessage.addListener((message) => { - if ( message === 'is_tracking_enabled' ) { - ifTrackingEnabled( - port.sender.tab, - function() { - try {port.postMessage({'tracking_enabled': true});} - catch(err) {} }, - function() { - try {port.postMessage({'tracking_enabled': false});} - catch(err) {} } - ); - } - return true; - }); - }); - + chrome.webNavigation.onBeforeNavigate.addListener( + function(details) { + if ( details.frameId === 0 ) { + globalPageContainer.onNewNavigation(details); + } + }, + { + url: [{urlMatches: 'http://*/*'}, {urlMatches: 'https://*/*'}] + } + ); + + chrome.runtime.onMessage.addListener((message, sender, callback) => { + if ( message === 'is_tracking_enabled' ) { + ifTrackingEnabled( + sender.tab, + function() { + try {callback({'tracking_enabled': true});} + catch(err) {} }, + function() { + try {callback({'tracking_enabled': false});} + catch(err) {} } + ); + } + return true; + }); })(); - -},{}]},{},[1]); diff --git a/src/drivers/webextension/js/options.js b/src/drivers/webextension/js/options.js index 4666b00459918ee97d67bf295438be47dbfdf97d..dc2db78b2ab646113e1549555456577107aa5f4b 100644 --- a/src/drivers/webextension/js/options.js +++ b/src/drivers/webextension/js/options.js @@ -1,96 +1,69 @@ -/** global: browser */ -/** global: Wappalyzer */ -/* globals browser Wappalyzer */ +'use strict' /* eslint-env browser */ +/* globals Utils, chrome */ -const wappalyzer = new Wappalyzer(); +const { i18n, getOption, setOption } = Utils -/** - * Get a value from localStorage - */ -function getOption(name, defaultValue = null) { - return new Promise(async (resolve, reject) => { - let value = defaultValue; +const Options = { + /** + * Initialise options + */ + async init() { + // Theme mode + const themeMode = await getOption('themeMode', false) - try { - const option = await browser.storage.local.get(name); - - if (option[name] !== undefined) { - value = option[name]; - } - } catch (error) { - wappalyzer.log(error.message, 'driver', 'error'); - - return reject(error.message); + if (themeMode) { + document.querySelector('body').classList.add('theme-mode') } - return resolve(value); - }); + ;[ + ['upgradeMessage', true], + ['dynamicIcon', false], + ['badge', true], + ['tracking', true], + ['themeMode', false] + ].map(async ([option, defaultValue]) => { + const el = document + .querySelector( + `[data-i18n="option${option.charAt(0).toUpperCase() + + option.slice(1)}"]` + ) + .parentNode.querySelector('input') + + el.checked = !!(await getOption(option, defaultValue)) + + el.addEventListener('click', async () => { + await setOption(option, !!el.checked) + }) + }) + + document + .querySelector('.options__cache') + .addEventListener('click', () => Options.driver('clearCache')) + + i18n() + }, + + driver(func, args, callback) { + return new Promise((resolve, reject) => { + chrome.runtime.sendMessage( + { + source: 'content.js', + func, + args: args ? (Array.isArray(args) ? args : [args]) : [] + }, + (response) => { + chrome.runtime.lastError + ? reject(new Error(chrome.runtime.lastError.message)) + : resolve(response) + } + ) + }) + } } -/** - * Set a value in localStorage - */ -function setOption(name, value) { - return new Promise(async (resolve, reject) => { - try { - await browser.storage.local.set({ [name]: value }); - } catch (error) { - wappalyzer.log(error.message, 'driver', 'error'); - - return reject(error.message); - } - - return resolve(); - }); +if (/complete|interactive|loaded/.test(document.readyState)) { + Options.init() +} else { + document.addEventListener('DOMContentLoaded', Options.init) } - -document.addEventListener('DOMContentLoaded', async () => { - const nodes = document.querySelectorAll('[data-i18n]'); - - Array.prototype.forEach.call(nodes, (node) => { - node.childNodes[0].nodeValue = browser.i18n.getMessage(node.dataset.i18n); - }); - - document.querySelector('#github').addEventListener('click', () => { - window.open(wappalyzer.config.githubURL); - }); - - document.querySelector('#twitter').addEventListener('click', () => { - window.open(wappalyzer.config.twitterURL); - }); - - document.querySelector('#wappalyzer').addEventListener('click', () => { - window.open(wappalyzer.config.websiteURL); - }); - - let el; - let value; - - // Upgrade message - value = await getOption('upgradeMessage', true); - - el = document.querySelector('#option-upgrade-message'); - - el.checked = value; - - el.addEventListener('change', e => setOption('upgradeMessage', e.target.checked)); - - // Dynamic icon - value = await getOption('dynamicIcon', true); - - el = document.querySelector('#option-dynamic-icon'); - - el.checked = value; - - el.addEventListener('change', e => setOption('dynamicIcon', e.target.checked)); - - // Tracking - value = await getOption('tracking', true); - - el = document.querySelector('#option-tracking'); - - el.checked = value; - - el.addEventListener('change', e => setOption('tracking', e.target.checked)); -}); diff --git a/src/drivers/webextension/js/popup.js b/src/drivers/webextension/js/popup.js index 42ed7008911fb4cbb6d774d3adf141699a94de4d..4eac92913a2895412480927d7b309ffa4b61f17b 100644 --- a/src/drivers/webextension/js/popup.js +++ b/src/drivers/webextension/js/popup.js @@ -1,246 +1,306 @@ +'use strict' /* eslint-env browser */ -/* global browser, jsonToDOM */ +/* globals chrome, Utils */ + +const { + agent, + open, + i18n, + getOption, + setOption, + promisify, + sendMessage +} = Utils + +function setDisabledDomain(enabled) { + if (enabled) { + document + .querySelector('.footer__switch--enabled') + .classList.add('footer__switch--hidden') + document + .querySelector('.footer__switch--disabled') + .classList.remove('footer__switch--hidden') + } else { + document + .querySelector('.footer__switch--enabled') + .classList.remove('footer__switch--hidden') + document + .querySelector('.footer__switch--disabled') + .classList.add('footer__switch--hidden') + } +} -/** global: browser */ -/** global: jsonToDOM */ +const Popup = { + /** + * Initialise popup + */ + async init() { + // Templates + Popup.templates = Array.from( + document.querySelectorAll('[data-template]') + ).reduce((templates, template) => { + templates[template.dataset.template] = template.cloneNode(true) -let pinnedCategory = null; -let termsAccepted = false; + template.remove() -const port = browser.runtime.connect({ - name: 'popup.js', -}); + return templates + }, {}) -function slugify(string) { - return string.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/--+/g, '-').replace(/(?:^-|-$)/, ''); -} + // Disabled domains + let disabledDomains = await getOption('disabledDomains', []) -function i18n() { - const nodes = document.querySelectorAll('[data-i18n]'); + // Theme mode + const themeMode = await getOption('themeMode', false) - Array.prototype.forEach.call(nodes, (node) => { - node.innerHTML = browser.i18n.getMessage(node.dataset.i18n); - }); -} + if (themeMode) { + document.querySelector('body').classList.add('theme-mode') + } -function replaceDom(domTemplate) { - const container = document.getElementsByClassName('container')[0]; + // Terms + const termsAccepted = + agent === 'chrome' || (await getOption('termsAccepted', false)) - while (container.firstChild) { - container.removeChild(container.firstChild); - } + if (termsAccepted) { + document.querySelector('.terms').classList.add('terms--hidden') + document.querySelector('.empty').classList.remove('empty--hidden') - container.appendChild(jsonToDOM(domTemplate, document, {})); + Popup.onGetDetections(await Popup.driver('getDetections')) + } else { + document.querySelector('.terms').classList.remove('terms--hidden') + document.querySelector('.detections').classList.add('detections--hidden') + document.querySelector('.empty').classList.add('empty--hidden') - i18n(); + document.querySelector('.terms').addEventListener('click', async () => { + await setOption('termsAccepted', true) - Array.from(document.querySelectorAll('.detected__category-pin-wrapper')).forEach((pin) => { - pin.addEventListener('click', () => { - const categoryId = parseInt(pin.dataset.categoryId, 10); + document.querySelector('.terms').classList.add('terms--hidden') + document.querySelector('.empty').classList.remove('empty--hidden') - if (categoryId === pinnedCategory) { - pin.className = 'detected__category-pin-wrapper'; + Popup.onGetDetections(await Popup.driver('getDetections')) + }) + } - pinnedCategory = null; - } else { - const active = document.querySelector('.detected__category-pin-wrapper--active'); + // Alert + const tabs = await promisify(chrome.tabs, 'query', { + active: true, + currentWindow: true + }) - if (active) { - active.className = 'detected__category-pin-wrapper'; - } + if (tabs && tabs.length) { + const [{ url }] = tabs - pin.className = 'detected__category-pin-wrapper detected__category-pin-wrapper--active'; + if (url.startsWith('http')) { + document.querySelector('.alerts').classList.remove('alerts--hidden') - pinnedCategory = categoryId; - } + document.querySelector( + '.alerts__link' + ).href = `https://www.wappalyzer.com/alerts?url=${encodeURIComponent( + `${url}` + )}` - port.postMessage({ - id: 'set_option', - key: 'pinnedCategory', - value: pinnedCategory, - }); - }); - }); -} + const { hostname } = new URL(url) -function replaceDomWhenReady(dom) { - if (/complete|interactive|loaded/.test(document.readyState)) { - replaceDom(dom); - } else { - document.addEventListener('DOMContentLoaded', () => { - replaceDom(dom); - }); - } -} + setDisabledDomain(disabledDomains.includes(hostname)) -function appsToDomTemplate(response) { - let template = []; + document + .querySelector('.footer__switch--disabled') + .addEventListener('click', async () => { + disabledDomains = disabledDomains.filter( + (_hostname) => _hostname !== hostname + ) - if (response.tabCache && Object.keys(response.tabCache.detected).length > 0) { - const categories = {}; + await setOption('disabledDomains', disabledDomains) - // Group apps by category - for (const appName in response.tabCache.detected) { - response.apps[appName].cats.forEach((cat) => { - categories[cat] = categories[cat] || { apps: [] }; + setDisabledDomain(false) - categories[cat].apps[appName] = appName; - }); - } + Popup.onGetDetections(await Popup.driver('getDetections')) + }) + + document + .querySelector('.footer__switch--enabled') + .addEventListener('click', async () => { + disabledDomains.push(hostname) + + await setOption('disabledDomains', disabledDomains) + + setDisabledDomain(true) + + Popup.onGetDetections(await Popup.driver('getDetections')) + }) + } else { + for (const el of document.querySelectorAll('.footer__switch')) { + el.classList.add('footer__switch--hidden') + } - for (const cat in categories) { - const apps = []; - - for (const appName in categories[cat].apps) { - const { confidence, version } = response.tabCache.detected[appName]; - - apps.push( - [ - '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, - ], - ); + document.querySelector('.alerts').classList.add('alerts--hidden') } + } - template.push( - [ - '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', - }, - apps, - ], - ], - ); + document + .querySelector('.footer__settings') + .addEventListener('click', () => chrome.runtime.openOptionsPage()) + + // Apply internationalization + i18n() + }, + + driver(func, args) { + return sendMessage('popup.js', func, args) + }, + + /** + * Log debug messages to the console + * @param {String} message + */ + log(message) { + Popup.driver('log', message) + }, + + /** + * Group technologies into categories + * @param {Object} technologies + */ + categorise(technologies) { + return Object.values( + technologies + .filter(({ confidence }) => confidence >= 50) + .reduce((categories, technology) => { + technology.categories.forEach((category) => { + categories[category.id] = categories[category.id] || { + ...category, + technologies: [] + } + + categories[category.id].technologies.push(technology) + }) + + return categories + }, {}) + ) + }, + + /** + * Callback for getDetection listener + * @param {Array} detections + */ + async onGetDetections(detections = []) { + if (!detections || !detections.length) { + document.querySelector('.empty').classList.remove('empty--hidden') + document.querySelector('.detections').classList.add('detections--hidden') + + return } - template = [ - 'div', { - class: 'detected', - }, - template, - ]; - } else { - template = [ - 'div', { - class: 'empty', - }, - [ - 'span', { - class: 'empty__text', - }, - browser.i18n.getMessage('noAppsDetected'), - ], - ]; - } + document.querySelector('.empty').classList.add('empty--hidden') - return template; -} + const el = document.querySelector('.detections') -async function getApps() { - try { - const tabs = await browser.tabs.query({ - active: true, - currentWindow: true, - }); - - port.postMessage({ - id: 'get_apps', - tab: tabs[0], - }); - } catch (error) { - console.error(error); // eslint-disable-line no-console - } -} + el.classList.remove('detections--hidden') -function displayApps(response) { - pinnedCategory = response.pinnedCategory; // eslint-disable-line prefer-destructuring - termsAccepted = response.termsAccepted; // eslint-disable-line prefer-destructuring + while (el.firstChild) { + el.removeChild(detections.lastChild) + } - if (termsAccepted) { - replaceDomWhenReady(appsToDomTemplate(response)); - } else { - i18n(); + const pinnedCategory = await getOption('pinnedCategory') - const wrapper = document.querySelector('.terms__wrapper'); + const categorised = Popup.categorise(detections) - document.querySelector('.terms__accept').addEventListener('click', () => { - port.postMessage({ - id: 'set_option', - key: 'termsAccepted', - value: true, - }); + categorised.forEach(({ id, name, slug: categorySlug, technologies }) => { + const categoryNode = Popup.templates.category.cloneNode(true) - wrapper.classList.remove('terms__wrapper--active'); + const link = categoryNode.querySelector('.category__link') - getApps(); - }); + link.href = `https://www.wappalyzer.com/technologies/${categorySlug}` + link.dataset.i18n = `categoryName${id}` - wrapper.classList.add('terms__wrapper--active'); - } -} + const pins = categoryNode.querySelectorAll('.category__pin') + + if (pinnedCategory === id) { + pins.forEach((pin) => pin.classList.add('category__pin--active')) + } + + pins.forEach((pin) => + pin.addEventListener('click', async () => { + const pinnedCategory = await getOption('pinnedCategory') + + Array.from( + document.querySelectorAll('.category__pin--active') + ).forEach((pin) => pin.classList.remove('category__pin--active')) + + if (pinnedCategory === id) { + await setOption('pinnedCategory', null) + } else { + await setOption('pinnedCategory', id) + + pins.forEach((pin) => pin.classList.add('category__pin--active')) + } + }) + ) + + technologies + .filter(({ confidence }) => confidence >= 50) + .forEach(({ name, slug, confidence, version, icon, website }) => { + const technologyNode = Popup.templates.technology.cloneNode(true) + + const image = technologyNode.querySelector('.technology__icon') + + image.src = `../images/icons/${icon}` -port.onMessage.addListener((message) => { - switch (message.id) { - case 'get_apps': - displayApps(message.response); + const link = technologyNode.querySelector('.technology__link') - break; - default: - // Do nothing + link.href = `https://www.wappalyzer.com/technologies/${categorySlug}/${slug}` + link.textContent = name + + const confidenceNode = technologyNode.querySelector( + '.technology__confidence' + ) + + if (confidence < 100) { + confidenceNode.textContent = `${confidence}% sure` + } else { + confidenceNode.remove() + } + + const versionNode = technologyNode.querySelector( + '.technology__version' + ) + + if (version) { + versionNode.textContent = version + } else { + versionNode.remove() + } + + categoryNode + .querySelector('.technologies') + .appendChild(technologyNode) + }) + + document.querySelector('.detections').appendChild(categoryNode) + }) + + if (categorised.length === 1) { + document + .querySelector('.detections') + .appendChild(Popup.templates.category.cloneNode(true)) + } + + Array.from(document.querySelectorAll('a')).forEach((a) => + a.addEventListener('click', (event) => { + event.preventDefault() + + open(a.href) + + return false + }) + ) + + i18n() } -}); +} -getApps(); +if (/complete|interactive|loaded/.test(document.readyState)) { + Popup.init() +} else { + document.addEventListener('DOMContentLoaded', Popup.init) +} diff --git a/src/drivers/webextension/js/utils.js b/src/drivers/webextension/js/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..f48e74403c94137936505ea108ade512e9fb4db5 --- /dev/null +++ b/src/drivers/webextension/js/utils.js @@ -0,0 +1,96 @@ +'use strict' +/* eslint-env browser */ +/* globals chrome */ + +const Utils = { + agent: chrome.extension.getURL('/').startsWith('moz-') ? 'firefox' : 'chrome', + + /** + * Use promises instead of callbacks + * @param {Object} context + * @param {String} method + * @param {...any} args + */ + promisify(context, method, ...args) { + return new Promise((resolve, reject) => { + context[method](...args, (...args) => { + if (chrome.runtime.lastError) { + return reject(chrome.runtime.lastError) + } + + resolve(...args) + }) + }) + }, + + /** + * Open a browser tab + * @param {String} url + * @param {Boolean} active + */ + open(url, active = true) { + chrome.tabs.create({ url, active }) + }, + + /** + * Get value from local storage + * @param {String} name + * @param {string|mixed|null} defaultValue + */ + async getOption(name, defaultValue = null) { + try { + const option = await Utils.promisify(chrome.storage.local, 'get', name) + + if (option[name] !== undefined) { + return option[name] + } + } catch (error) { + // eslint-disable-next-line no-console + console.error('wappalyzer | utils |', error) + } + + return defaultValue + }, + + /** + * Set value in local storage + * @param {String} name + * @param {String} value + */ + async setOption(name, value) { + try { + await Utils.promisify(chrome.storage.local, 'set', { + [name]: value + }) + } catch (error) { + // eslint-disable-next-line no-console + console.error('wappalyzer | utils |', error) + } + }, + + /** + * Apply internationalization + */ + i18n() { + Array.from(document.querySelectorAll('[data-i18n]')).forEach( + (node) => (node.innerHTML = chrome.i18n.getMessage(node.dataset.i18n)) + ) + }, + + sendMessage(source, func, args) { + return new Promise((resolve, reject) => { + chrome.runtime.sendMessage( + { + source, + func, + args: args ? (Array.isArray(args) ? args : [args]) : [] + }, + (response) => { + chrome.runtime.lastError + ? reject(new Error(chrome.runtime.lastError.message)) + : resolve(response) + } + ) + }) + } +} diff --git a/src/drivers/webextension/manifest.json b/src/drivers/webextension/manifest.json index 34630e09bac05a4600f6ccdf0df20405f52dd0d5..b0f17eea3d8243b4395b250d36e7156181d0b4a5 100644 --- a/src/drivers/webextension/manifest.json +++ b/src/drivers/webextension/manifest.json @@ -1,10 +1,10 @@ { "name": "Wappalyzer", "short_name": "Wappalyzer", - "author": "Elbert Alias", + "author": "Wappalyzer", "homepage_url": "https://www.wappalyzer.com", "description": "Identify web technologies", - "version": "5.8.4", + "version": "6.2.4", "default_locale": "en", "manifest_version": 2, "icons": { @@ -14,7 +14,7 @@ "38": "images/icon_38.png", "128": "images/icon_128.png" }, - "page_action": { + "browser_action": { "default_icon": { "16": "images/icon_16.png", "19": "images/icon_19.png", @@ -27,7 +27,6 @@ }, "background": { "page": "html/background.html" - }, "content_scripts": [ { @@ -36,7 +35,6 @@ "https://*/*" ], "js": [ - "node_modules/webextension-polyfill/dist/browser-polyfill.js", "js/content.js" ], "run_at": "document_idle" @@ -46,12 +44,7 @@ "http://*/*", "https://*/*" ], - "exclude_matches": [ - "https://*.modirum.com/*", - "https://www.alphaecommerce.gr/*" - ], "js": [ - "node_modules/webextension-polyfill/dist/browser-polyfill.js", "js/lib/iframe.js" ], "run_at": "document_start", @@ -74,11 +67,5 @@ "http://*/*", "https://*/*" ], - "content_security_policy": "script-src 'self'; object-src 'self'", - "applications": { - "gecko": { - "id": "wappalyzer@crunchlabz.com", - "strict_min_version": "60.0" - } - } -} + "content_security_policy": "script-src 'self'; object-src 'self'" +} \ No newline at end of file diff --git a/src/drivers/webextension/npm-shrinkwrap.json b/src/drivers/webextension/npm-shrinkwrap.json deleted file mode 100644 index 9934b3a1caf00c0663169e4492aecc76e0d74f9a..0000000000000000000000000000000000000000 --- 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/package.json b/src/drivers/webextension/package.json deleted file mode 100644 index 837c5acf820ef0d945daaa34e662c0825efef8bd..0000000000000000000000000000000000000000 --- a/src/drivers/webextension/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "webextension-polyfill": "^0.4.0" - } -} diff --git a/src/drivers/webextension/yarn.lock b/src/drivers/webextension/yarn.lock deleted file mode 100644 index e2e1d507d51a4a79b9ab0b291d26fab8cb324f98..0000000000000000000000000000000000000000 --- a/src/drivers/webextension/yarn.lock +++ /dev/null @@ -1,7 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# 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" diff --git a/src/icons/1C-Bitrix.png b/src/icons/1C-Bitrix.png deleted file mode 100644 index d0236f87f35919eb02c9743dde34b5a2e2f47534..0000000000000000000000000000000000000000 Binary files a/src/icons/1C-Bitrix.png and /dev/null differ diff --git a/src/icons/3dCart.png b/src/icons/3dCart.png deleted file mode 100644 index 64ca4abc8b98d0a30c26066534ef0258b756a381..0000000000000000000000000000000000000000 Binary files a/src/icons/3dCart.png and /dev/null differ diff --git a/src/icons/91app.png b/src/icons/91app.png deleted file mode 100644 index 3963238b1b19bafcd4d578dc72f6551f117d6d8f..0000000000000000000000000000000000000000 Binary files a/src/icons/91app.png and /dev/null differ diff --git a/src/icons/ADPLAN.png b/src/icons/ADPLAN.png deleted file mode 100644 index 2252edbb8e7c8a22f00186d4e7f0923fc53b40fa..0000000000000000000000000000000000000000 Binary files a/src/icons/ADPLAN.png and /dev/null differ diff --git a/src/icons/Accelerated-Mobile-Pages.svg b/src/icons/Accelerated-Mobile-Pages.svg deleted file mode 100644 index 23bcd265474d6773ba43021f4a465725726f1754..0000000000000000000000000000000000000000 --- a/src/icons/Accelerated-Mobile-Pages.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - AMP-Brand-Blue-Icon - Created with Sketch. - - - - - - - \ No newline at end of file diff --git a/src/icons/AdOcean.png b/src/icons/AdOcean.png deleted file mode 100644 index 80b5a9c4e6498ee8bbc4802c5a3f468a9256bd34..0000000000000000000000000000000000000000 Binary files a/src/icons/AdOcean.png and /dev/null differ diff --git a/src/icons/Adobe Experience Manager.svg b/src/icons/Adobe Experience Manager.svg deleted file mode 100644 index af1c873a12f79705650ea3c0487eff58f2e35787..0000000000000000000000000000000000000000 --- a/src/icons/Adobe Experience Manager.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/icons/Adobe Muse.svg b/src/icons/Adobe Muse.svg deleted file mode 100644 index 003253891c511be5ec18d7bfc82e082e88a519e5..0000000000000000000000000000000000000000 --- a/src/icons/Adobe Muse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/icons/Algolia Realtime Search.svg b/src/icons/Algolia Realtime Search.svg deleted file mode 100644 index 4cc800f5eae3985f74e4fdc856e8334aab0df409..0000000000000000000000000000000000000000 --- a/src/icons/Algolia Realtime Search.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/icons/Anetwork.png b/src/icons/Anetwork.png deleted file mode 100644 index f28e95dc5a0ba043217d8c53a55d320168c36980..0000000000000000000000000000000000000000 Binary files a/src/icons/Anetwork.png and /dev/null differ diff --git a/src/icons/Apache HBase.png b/src/icons/Apache HBase.png deleted file mode 100644 index 113d901a69a83fa4de679329257b4c04f3053119..0000000000000000000000000000000000000000 Binary files a/src/icons/Apache HBase.png and /dev/null differ diff --git a/src/icons/Apache Hadoop.svg b/src/icons/Apache Hadoop.svg deleted file mode 100644 index 01c64ea22657495c4111b42b399b14aab5ec71c4..0000000000000000000000000000000000000000 --- a/src/icons/Apache Hadoop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/icons/Apache Traffic Server.png b/src/icons/Apache Traffic Server.png deleted file mode 100644 index 0faf78e0f6eb3e7955c6112f1da9c2fb8ae7675c..0000000000000000000000000000000000000000 Binary files a/src/icons/Apache Traffic Server.png and /dev/null differ diff --git a/src/icons/Appcues.svg b/src/icons/Appcues.svg deleted file mode 100644 index 20a1a545ec9ea8eed68460827c448b8330596b0e..0000000000000000000000000000000000000000 --- a/src/icons/Appcues.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - Group - Created with Sketch. - - - - - - - - \ No newline at end of file diff --git a/src/icons/Apple.svg b/src/icons/Apple.svg deleted file mode 100644 index 2954f0f5249e051f8015f62dd935739296de9012..0000000000000000000000000000000000000000 --- a/src/icons/Apple.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/icons/Avasize.png b/src/icons/Avasize.png deleted file mode 100755 index 98651980b1c0f4d43f8a72958ac32e154089e656..0000000000000000000000000000000000000000 Binary files a/src/icons/Avasize.png and /dev/null differ diff --git a/src/icons/Backpack.png b/src/icons/Backpack.png deleted file mode 100644 index 5095bf4f2366571858e6a3198ca755269ef632d9..0000000000000000000000000000000000000000 Binary files a/src/icons/Backpack.png and /dev/null differ diff --git a/src/icons/Backtory.svg b/src/icons/Backtory.svg deleted file mode 100644 index 9fb2e0c5771641159512a29e157dc743e6a086b4..0000000000000000000000000000000000000000 --- a/src/icons/Backtory.svg +++ /dev/null @@ -1,86 +0,0 @@ - -image/svg+xml \ No newline at end of file diff --git a/src/icons/Bigcommerce.png b/src/icons/Bigcommerce.png deleted file mode 100644 index edd047e96613c4ac14352e60396b50dafd9d9c1c..0000000000000000000000000000000000000000 Binary files a/src/icons/Bigcommerce.png and /dev/null differ diff --git a/src/icons/Bloomreach.png b/src/icons/Bloomreach.png deleted file mode 100644 index 25b13e808ea35a0fa153a9d74ff7d4a77ecb9818..0000000000000000000000000000000000000000 Binary files a/src/icons/Bloomreach.png and /dev/null differ diff --git a/src/icons/Bootstrap.png b/src/icons/Bootstrap.png deleted file mode 100644 index 44230c442eb2294408a4244e29d5c5ebb8457c47..0000000000000000000000000000000000000000 Binary files a/src/icons/Bootstrap.png and /dev/null differ diff --git a/src/icons/Botble-CMS.png b/src/icons/Botble-CMS.png deleted file mode 100755 index 9704f5d7aca66961ccea4bfc7d20344236c8064d..0000000000000000000000000000000000000000 Binary files a/src/icons/Botble-CMS.png and /dev/null differ diff --git a/src/icons/CDN77.png b/src/icons/CDN77.png deleted file mode 100644 index 7300be9d545db77771b503b0c91e18ad4bb12e21..0000000000000000000000000000000000000000 Binary files a/src/icons/CDN77.png and /dev/null differ diff --git a/src/icons/Cecil.png b/src/icons/Cecil.png deleted file mode 100644 index ce4a53cf612792f455181ebfb3186fa40c0d16b9..0000000000000000000000000000000000000000 Binary files a/src/icons/Cecil.png and /dev/null differ diff --git a/src/icons/Chameleon.png b/src/icons/Chameleon.png deleted file mode 100644 index 6bf587d9157a63e54969a8b3547ae2f01037c4cf..0000000000000000000000000000000000000000 Binary files a/src/icons/Chameleon.png and /dev/null differ diff --git a/src/icons/Chorus.png b/src/icons/Chorus.png deleted file mode 100644 index 13416e0218f6de0d0f8c4e1a2f27dce21705ed9d..0000000000000000000000000000000000000000 Binary files a/src/icons/Chorus.png and /dev/null differ diff --git a/src/icons/ClickFunnels.png b/src/icons/ClickFunnels.png deleted file mode 100644 index 86504340ecd9da4a8771f11ea40dddedd0a1c83f..0000000000000000000000000000000000000000 Binary files a/src/icons/ClickFunnels.png and /dev/null differ diff --git a/src/icons/Combeenation.png b/src/icons/Combeenation.png deleted file mode 100644 index 86792253e375667078ee4b4352a2d43a24c73b44..0000000000000000000000000000000000000000 Binary files a/src/icons/Combeenation.png and /dev/null differ diff --git a/src/icons/Connect.png b/src/icons/Connect.png deleted file mode 100644 index 994d06c7b3f90e5c953c13b7b52e04a4b0afb1dc..0000000000000000000000000000000000000000 Binary files a/src/icons/Connect.png and /dev/null differ diff --git a/src/icons/Countly.png b/src/icons/Countly.png deleted file mode 100644 index ae9d8db9648cc1da2b24a4a9fb09e8d12e082f0d..0000000000000000000000000000000000000000 Binary files a/src/icons/Countly.png and /dev/null differ diff --git a/src/icons/Craft CMS.svg b/src/icons/Craft CMS.svg deleted file mode 100644 index 3bab17c7c813486ac933785cf1ccfd0fd8528b68..0000000000000000000000000000000000000000 --- a/src/icons/Craft CMS.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/src/icons/CrossBox.png b/src/icons/CrossBox.png deleted file mode 100644 index c907d010be612037bf227d57b54d5167f15afef4..0000000000000000000000000000000000000000 Binary files a/src/icons/CrossBox.png and /dev/null differ diff --git a/src/icons/DataPower.png b/src/icons/DataPower.png deleted file mode 100644 index 0cee484aa1bbeb07f68c1fb961df7fda7a3e6032..0000000000000000000000000000000000000000 Binary files a/src/icons/DataPower.png and /dev/null differ diff --git a/src/icons/DerakCloud.png b/src/icons/DerakCloud.png deleted file mode 100644 index 377b223f2fb28789f3f7b206379bc1fff7b2478f..0000000000000000000000000000000000000000 Binary files a/src/icons/DerakCloud.png and /dev/null differ diff --git a/src/icons/Django CMS.png b/src/icons/Django CMS.png deleted file mode 100644 index 20909ea3ec92d67d308a568f2055fd3082d3abdb..0000000000000000000000000000000000000000 Binary files a/src/icons/Django CMS.png and /dev/null differ diff --git a/src/icons/Drupal.svg b/src/icons/Drupal.svg deleted file mode 100644 index b32678febb294668635e667fe5e8dbda7f1898e2..0000000000000000000000000000000000000000 --- a/src/icons/Drupal.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - diff --git a/src/icons/EasyEngine.png b/src/icons/EasyEngine.png deleted file mode 100644 index 737ecd1b7931f593a6d3e1f310cba060595d77e0..0000000000000000000000000000000000000000 Binary files a/src/icons/EasyEngine.png and /dev/null differ diff --git a/src/icons/Elementor.png b/src/icons/Elementor.png deleted file mode 100644 index 87fc23e014e907cd2999e32faf2c3c26d7c9b6c8..0000000000000000000000000000000000000000 Binary files a/src/icons/Elementor.png and /dev/null differ diff --git a/src/icons/Express.png b/src/icons/Express.png deleted file mode 100644 index 8f3461e69e92bd52061a573462093ae878df7ec8..0000000000000000000000000000000000000000 Binary files a/src/icons/Express.png and /dev/null differ diff --git a/src/icons/F5.png b/src/icons/F5.png deleted file mode 100644 index fba894586e496018d86d99f30e472f96eaa73ee8..0000000000000000000000000000000000000000 Binary files a/src/icons/F5.png and /dev/null differ diff --git a/src/icons/FWP.png b/src/icons/FWP.png deleted file mode 100644 index 2f556e7b3e04b89775ae662a75d95aa02ab0a6e1..0000000000000000000000000000000000000000 Binary files a/src/icons/FWP.png and /dev/null differ diff --git a/src/icons/Fastcommerce.png b/src/icons/Fastcommerce.png deleted file mode 100644 index 6ba20a3f3f4dbd5c2e0182d19149ada42ff505b4..0000000000000000000000000000000000000000 Binary files a/src/icons/Fastcommerce.png and /dev/null differ diff --git a/src/icons/Fbits.png b/src/icons/Fbits.png deleted file mode 100644 index f5253019e42216efa279b0b09f1537b0c8b57b5b..0000000000000000000000000000000000000000 Binary files a/src/icons/Fbits.png and /dev/null differ diff --git a/src/icons/Flat UI.png b/src/icons/Flat UI.png deleted file mode 100644 index 7a0cc0a2cf19792e620200f97290f09c3c652fbc..0000000000000000000000000000000000000000 Binary files a/src/icons/Flat UI.png and /dev/null differ diff --git a/src/icons/Font Awesome.png b/src/icons/Font Awesome.png deleted file mode 100644 index 4a9568af1984aa51a04e8ff7cf2c46acc42701db..0000000000000000000000000000000000000000 Binary files a/src/icons/Font Awesome.png and /dev/null differ diff --git a/src/icons/Gemius.png b/src/icons/Gemius.png deleted file mode 100644 index c9344b1252d5cc6675734e0fbce02caeff9d9d36..0000000000000000000000000000000000000000 Binary files a/src/icons/Gemius.png and /dev/null differ diff --git a/src/icons/Google Maps.png b/src/icons/Google Maps.png deleted file mode 100644 index ecf471ef08e1656bb712125cfe0408e93478805b..0000000000000000000000000000000000000000 Binary files a/src/icons/Google Maps.png and /dev/null differ diff --git a/src/icons/Google Sites.png b/src/icons/Google Sites.png deleted file mode 100644 index 3bcb4f4cc647db4ab339e94ee47af227b50e4cd7..0000000000000000000000000000000000000000 Binary files a/src/icons/Google Sites.png and /dev/null differ diff --git a/src/icons/Haravan.png b/src/icons/Haravan.png deleted file mode 100644 index 7390fbc65b7fefa67ff37a97e5f2248450625642..0000000000000000000000000000000000000000 Binary files a/src/icons/Haravan.png and /dev/null differ diff --git a/src/icons/Homeland.png b/src/icons/Homeland.png deleted file mode 100644 index e8ca492f03fea5c542e2d79c342484fb1ce007e3..0000000000000000000000000000000000000000 Binary files a/src/icons/Homeland.png and /dev/null differ diff --git a/src/icons/Hybris.png b/src/icons/Hybris.png deleted file mode 100644 index 842dd83430fc2ab897059902d706cc99721c56cd..0000000000000000000000000000000000000000 Binary files a/src/icons/Hybris.png and /dev/null differ diff --git a/src/icons/InProces.png b/src/icons/InProces.png deleted file mode 100644 index 5b76fa14ede42307d2abfc593195fb0ec006f9ea..0000000000000000000000000000000000000000 Binary files a/src/icons/InProces.png and /dev/null differ diff --git a/src/icons/Instabot.png b/src/icons/Instabot.png deleted file mode 100644 index 3b49095d355d20c1abc8c8a1f785f847d0184c93..0000000000000000000000000000000000000000 Binary files a/src/icons/Instabot.png and /dev/null differ diff --git a/src/icons/Intercom.png b/src/icons/Intercom.png deleted file mode 100644 index c6fe220c680cbca3d9dbdc6103eb6640d1054b83..0000000000000000000000000000000000000000 Binary files a/src/icons/Intercom.png and /dev/null differ diff --git a/src/icons/Intershop.png b/src/icons/Intershop.png deleted file mode 100644 index 2cb07ca60c02c9e08bb3d4d3944b4589e2afe5a6..0000000000000000000000000000000000000000 Binary files a/src/icons/Intershop.png and /dev/null differ diff --git a/src/icons/Ionicons.png b/src/icons/Ionicons.png deleted file mode 100644 index 67497c434a99d28e3f5a842182ba184833ef9ddf..0000000000000000000000000000000000000000 Binary files a/src/icons/Ionicons.png and /dev/null differ diff --git a/src/icons/KeyCDN.png b/src/icons/KeyCDN.png deleted file mode 100644 index 5b635dc2c4bf50776c3dd0ab4690d9f9d02484b9..0000000000000000000000000000000000000000 Binary files a/src/icons/KeyCDN.png and /dev/null differ diff --git a/src/icons/Kontaktify.png b/src/icons/Kontaktify.png deleted file mode 100644 index 39478c896e0af22f3ceb3be4a337d8389f168adc..0000000000000000000000000000000000000000 Binary files a/src/icons/Kontaktify.png and /dev/null differ diff --git a/src/icons/LOU.png b/src/icons/LOU.png deleted file mode 100644 index c2836cab445c17b77ce4e0902d8b70aaf20427e3..0000000000000000000000000000000000000000 Binary files a/src/icons/LOU.png and /dev/null differ diff --git a/src/icons/LabVIEW.png b/src/icons/LabVIEW.png deleted file mode 100644 index 173016d28700444325559e2a7e0ca6504b280707..0000000000000000000000000000000000000000 Binary files a/src/icons/LabVIEW.png and /dev/null differ diff --git a/src/icons/Laravel.png b/src/icons/Laravel.png deleted file mode 100644 index fea26307d50889095a11b6bb131d1752f21837b2..0000000000000000000000000000000000000000 Binary files a/src/icons/Laravel.png and /dev/null differ diff --git a/src/icons/Lighty.png b/src/icons/Lighty.png deleted file mode 100644 index fa64c37afb8d7703805553b9050fad178d50f2a5..0000000000000000000000000000000000000000 Binary files a/src/icons/Lighty.png and /dev/null differ diff --git a/src/icons/LimeSurvey.png b/src/icons/LimeSurvey.png deleted file mode 100644 index b87768960549b5d54a0caa61b8668ffaef989c87..0000000000000000000000000000000000000000 Binary files a/src/icons/LimeSurvey.png and /dev/null differ diff --git a/src/icons/LocalFocus.png b/src/icons/LocalFocus.png deleted file mode 100644 index 0571a349b925e4b1ef6a154ae0bc223e0bce7b6b..0000000000000000000000000000000000000000 Binary files a/src/icons/LocalFocus.png and /dev/null differ diff --git a/src/icons/Locomotive.png b/src/icons/Locomotive.png deleted file mode 100644 index 21482d022a6bfbed940175b1e07697f8e8c29fb6..0000000000000000000000000000000000000000 Binary files a/src/icons/Locomotive.png and /dev/null differ diff --git a/src/icons/M.R. Inc.png b/src/icons/M.R. Inc.png deleted file mode 100644 index 1e3e20e1bc39002aaa9bb64355798ed103ca96fd..0000000000000000000000000000000000000000 Binary files a/src/icons/M.R. Inc.png and /dev/null differ diff --git a/src/icons/MakeShopKorea.png b/src/icons/MakeShopKorea.png deleted file mode 100644 index 5cf20bd0ab7bbea9dd763f3999742ed63c452156..0000000000000000000000000000000000000000 Binary files a/src/icons/MakeShopKorea.png and /dev/null differ diff --git a/src/icons/Matomo.png b/src/icons/Matomo.png deleted file mode 100644 index c6caa3515747e5effaded5b3427f98b06bf56d7a..0000000000000000000000000000000000000000 Binary files a/src/icons/Matomo.png and /dev/null differ diff --git a/src/icons/Mean.io.png b/src/icons/Mean.io.png deleted file mode 100644 index 3ae8f1a41055280b4f2b20dc9fb5e35de8587dee..0000000000000000000000000000000000000000 Binary files a/src/icons/Mean.io.png and /dev/null differ diff --git a/src/icons/MediaTomb.png b/src/icons/MediaTomb.png deleted file mode 100644 index 537b6f99c0cce2b7a01bc8a0500bf8738a43d5b3..0000000000000000000000000000000000000000 Binary files a/src/icons/MediaTomb.png and /dev/null differ diff --git a/src/icons/MemberStack.png b/src/icons/MemberStack.png deleted file mode 100644 index 8f170cb9a7f144337448c9f16e75c0470b20ba37..0000000000000000000000000000000000000000 Binary files a/src/icons/MemberStack.png and /dev/null differ diff --git a/src/icons/Microsoft.png b/src/icons/Microsoft.png deleted file mode 100644 index d6c37c10f4424e6c12f249ad2210351a1fe64339..0000000000000000000000000000000000000000 Binary files a/src/icons/Microsoft.png and /dev/null differ diff --git a/src/icons/Mithril.svg b/src/icons/Mithril.svg deleted file mode 100644 index 04cb102f1c95cf806d6bd3b76f588d95bab51a4d..0000000000000000000000000000000000000000 --- a/src/icons/Mithril.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/icons/Nepso.png b/src/icons/Nepso.png deleted file mode 100644 index e14ba066786a3f20b8c502648e4c080022992481..0000000000000000000000000000000000000000 Binary files a/src/icons/Nepso.png and /dev/null differ diff --git a/src/icons/NextGEN Gallery.png b/src/icons/NextGEN Gallery.png deleted file mode 100644 index 4440d9824eb0f1389f640002c7899a2225abc8bf..0000000000000000000000000000000000000000 Binary files a/src/icons/NextGEN Gallery.png and /dev/null differ diff --git a/src/icons/OpenUI5.png b/src/icons/OpenUI5.png deleted file mode 100644 index 17a2b943e4e08fada6e6cd56c3071f9bfe74e75e..0000000000000000000000000000000000000000 Binary files a/src/icons/OpenUI5.png and /dev/null differ diff --git a/src/icons/Ophal.png b/src/icons/Ophal.png deleted file mode 100644 index 22dc9c13760b51d51cbfc45ecafc5d7ebc05489a..0000000000000000000000000000000000000000 Binary files a/src/icons/Ophal.png and /dev/null differ diff --git a/src/icons/PANSITE.png b/src/icons/PANSITE.png deleted file mode 100644 index a2d74d9985ea368193b6aafa205b275851b758ec..0000000000000000000000000000000000000000 Binary files a/src/icons/PANSITE.png and /dev/null differ diff --git a/src/icons/PHP-Fusion.png b/src/icons/PHP-Fusion.png deleted file mode 100644 index 59aa99d6d870feeae75ad62a267758eb7ca68d0a..0000000000000000000000000000000000000000 Binary files a/src/icons/PHP-Fusion.png and /dev/null differ diff --git a/src/icons/PHP-Nuke.png b/src/icons/PHP-Nuke.png deleted file mode 100644 index 5e8f3182f4cfdcaa16555e451fadb1d845bd5c55..0000000000000000000000000000000000000000 Binary files a/src/icons/PHP-Nuke.png and /dev/null differ diff --git a/src/icons/PageCDN.png b/src/icons/PageCDN.png deleted file mode 100644 index 46788f4c2eefd0f982bf0d861e351343d326ea03..0000000000000000000000000000000000000000 Binary files a/src/icons/PageCDN.png and /dev/null differ diff --git a/src/icons/Pagevamp.png b/src/icons/Pagevamp.png deleted file mode 100644 index 246558737fa1457ffa7a6027155afccd268bd6bc..0000000000000000000000000000000000000000 Binary files a/src/icons/Pagevamp.png and /dev/null differ diff --git a/src/icons/Parcel.png b/src/icons/Parcel.png deleted file mode 100644 index f3028060fb70c0c95e6b8db76b77b2229d6dcc20..0000000000000000000000000000000000000000 Binary files a/src/icons/Parcel.png and /dev/null differ diff --git a/src/icons/Pendo.svg b/src/icons/Pendo.svg deleted file mode 100644 index fe7d070c0c55b8f11a9f452e14673120983d448c..0000000000000000000000000000000000000000 --- a/src/icons/Pendo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - -Created by potrace 1.15, written by Peter Selinger 2001-2017 - - - - - diff --git a/src/icons/PhotoShelter.png b/src/icons/PhotoShelter.png deleted file mode 100644 index b8d282d2ed3e8aebeffba8e5feadb1368763c86f..0000000000000000000000000000000000000000 Binary files a/src/icons/PhotoShelter.png and /dev/null differ diff --git a/src/icons/Plentymarkets.png b/src/icons/Plentymarkets.png deleted file mode 100644 index 2c047fdef02e101e1b59e4e1bf1c3931738f120b..0000000000000000000000000000000000000000 Binary files a/src/icons/Plentymarkets.png and /dev/null differ diff --git a/src/icons/Prebid.png b/src/icons/Prebid.png deleted file mode 100644 index 3a9ab86c6c6307eca0cc8878a4a7ebb10b19731d..0000000000000000000000000000000000000000 Binary files a/src/icons/Prebid.png and /dev/null differ diff --git a/src/icons/Prism.svg b/src/icons/Prism.svg deleted file mode 100644 index b3257ac00868ac19cb61ec9c918aa91335245085..0000000000000000000000000000000000000000 --- a/src/icons/Prism.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/src/icons/ProjectPoi.png b/src/icons/ProjectPoi.png deleted file mode 100644 index 65bfdff62b1b6291d26002498630999fb2a677f6..0000000000000000000000000000000000000000 Binary files a/src/icons/ProjectPoi.png and /dev/null differ diff --git a/src/icons/Quantcast.png b/src/icons/Quantcast.png deleted file mode 100644 index 9f062ab5df2ae7716baa44295f868724c44cc779..0000000000000000000000000000000000000000 Binary files a/src/icons/Quantcast.png and /dev/null differ diff --git a/src/icons/Rakuten DBCore.png b/src/icons/Rakuten DBCore.png deleted file mode 100644 index e048710d9feb07f0dd1ca8ff71bebc965a401091..0000000000000000000000000000000000000000 Binary files a/src/icons/Rakuten DBCore.png and /dev/null differ diff --git a/src/icons/RakutenDigitalCommerce.png b/src/icons/RakutenDigitalCommerce.png deleted file mode 100644 index 8784b5b3c36a2c937425028c5c14873ed24361a7..0000000000000000000000000000000000000000 Binary files a/src/icons/RakutenDigitalCommerce.png and /dev/null differ diff --git a/src/icons/Red Hat.png b/src/icons/Red Hat.png deleted file mode 100644 index 914a8f8441c03587beb4ab9ec397efbee33a05da..0000000000000000000000000000000000000000 Binary files a/src/icons/Red Hat.png and /dev/null differ diff --git a/src/icons/Rocket.svg b/src/icons/Rocket.svg deleted file mode 100644 index feadcf82b3715e067961575421c0e494676ff030..0000000000000000000000000000000000000000 --- a/src/icons/Rocket.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - diff --git a/src/icons/Saia PCD.png b/src/icons/Saia PCD.png deleted file mode 100644 index 4baadcb4f396e3bd48b2e1d83fce36e3d276f76e..0000000000000000000000000000000000000000 Binary files a/src/icons/Saia PCD.png and /dev/null differ diff --git a/src/icons/Scenari.png b/src/icons/Scenari.png deleted file mode 100644 index bbfc2d9180589596f1db9a2479db7c8a59a4d8c5..0000000000000000000000000000000000000000 Binary files a/src/icons/Scenari.png and /dev/null differ diff --git a/src/icons/Shadow.png b/src/icons/Shadow.png deleted file mode 100644 index 6410565aabfa66c86b9164c4846427750f2db49f..0000000000000000000000000000000000000000 Binary files a/src/icons/Shadow.png and /dev/null differ diff --git a/src/icons/Shiny.png b/src/icons/Shiny.png deleted file mode 100644 index 612d350d3bb102a97f5100f951d148bd4734571f..0000000000000000000000000000000000000000 Binary files a/src/icons/Shiny.png and /dev/null differ diff --git a/src/icons/Shopcada.png b/src/icons/Shopcada.png deleted file mode 100644 index c27bef7d1dd8f8b7e65d14bd683248f94792e234..0000000000000000000000000000000000000000 Binary files a/src/icons/Shopcada.png and /dev/null differ diff --git a/src/icons/Shopfa.svg b/src/icons/Shopfa.svg deleted file mode 100644 index dafcfd5c3664b28e18343bc847700427bad0339f..0000000000000000000000000000000000000000 --- a/src/icons/Shopfa.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/icons/Shopware.png b/src/icons/Shopware.png deleted file mode 100644 index 8387cd6831fc581706dcd56fae82e8c8f9bf14c3..0000000000000000000000000000000000000000 Binary files a/src/icons/Shopware.png and /dev/null differ diff --git a/src/icons/SiteCatalyst.png b/src/icons/SiteCatalyst.png deleted file mode 100644 index 002de3d70a519a28bf2daed49d83075d47f347ac..0000000000000000000000000000000000000000 Binary files a/src/icons/SiteCatalyst.png and /dev/null differ diff --git a/src/icons/Socket.io.png b/src/icons/Socket.io.png deleted file mode 100644 index f381eecf759b153938ae2d972329cb4a3d24b9d5..0000000000000000000000000000000000000000 Binary files a/src/icons/Socket.io.png and /dev/null differ diff --git a/src/icons/SpiderControl iniNet.png b/src/icons/SpiderControl iniNet.png deleted file mode 100644 index 545cd103335c3c11b240cc83b99b4e075922173d..0000000000000000000000000000000000000000 Binary files a/src/icons/SpiderControl iniNet.png and /dev/null differ diff --git a/src/icons/Sqreen.png b/src/icons/Sqreen.png deleted file mode 100644 index c4e1000e61ef21cd111753433c82be6f764606ac..0000000000000000000000000000000000000000 Binary files a/src/icons/Sqreen.png and /dev/null differ diff --git a/src/icons/Strapi.png b/src/icons/Strapi.png deleted file mode 100644 index 065887ab78a9a29f1f3fdc90adab8d20c59c6d2c..0000000000000000000000000000000000000000 Binary files a/src/icons/Strapi.png and /dev/null differ diff --git a/src/icons/SweetAlert2.png b/src/icons/SweetAlert2.png deleted file mode 100644 index bba68625d99e81bc9f4bc1509b00a95f2ac92e12..0000000000000000000000000000000000000000 Binary files a/src/icons/SweetAlert2.png and /dev/null differ diff --git a/src/icons/Symfony.png b/src/icons/Symfony.png deleted file mode 100644 index 0d3b4de8eb6318521b74fbd8d78f47d87ce2fd22..0000000000000000000000000000000000000000 Binary files a/src/icons/Symfony.png and /dev/null differ diff --git a/src/icons/TencentWaterproofWall.png b/src/icons/TencentWaterproofWall.png deleted file mode 100644 index 650138c868bde9ebd9faf62c4a03c76e24013f8a..0000000000000000000000000000000000000000 Binary files a/src/icons/TencentWaterproofWall.png and /dev/null differ diff --git a/src/icons/Ticimax.png b/src/icons/Ticimax.png deleted file mode 100644 index 4d566d818db85177c0795cece2c31f4efaa9d7d5..0000000000000000000000000000000000000000 Binary files a/src/icons/Ticimax.png and /dev/null differ diff --git a/src/icons/TotalCode.png b/src/icons/TotalCode.png deleted file mode 100644 index bc77f6d07a70ea0ccb820fd8680eea28c49d8734..0000000000000000000000000000000000000000 Binary files a/src/icons/TotalCode.png and /dev/null differ diff --git a/src/icons/UserGuiding.svg b/src/icons/UserGuiding.svg deleted file mode 100644 index f01fa5fbc004b8d452ae6fdb39b4acf7e514f495..0000000000000000000000000000000000000000 --- a/src/icons/UserGuiding.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - - UserGuiding .svg logo icon - - - - - diff --git a/src/icons/VTEX Integrated Store.png b/src/icons/VTEX Integrated Store.png deleted file mode 100644 index 3459003b1853530e7bcf4614ccd52757f02689a2..0000000000000000000000000000000000000000 Binary files a/src/icons/VTEX Integrated Store.png and /dev/null differ diff --git a/src/icons/Venda.png b/src/icons/Venda.png deleted file mode 100644 index f24d572a39daf5de5517840a6bd6e79781d6b30a..0000000000000000000000000000000000000000 Binary files a/src/icons/Venda.png and /dev/null differ diff --git a/src/icons/VideoJS.png b/src/icons/VideoJS.png deleted file mode 100644 index 1b8a2938e2c22a3e921ed013ee4c82321b4a4469..0000000000000000000000000000000000000000 Binary files a/src/icons/VideoJS.png and /dev/null differ diff --git a/src/icons/Visual WebGUI.png b/src/icons/Visual WebGUI.png deleted file mode 100644 index eee252976c6447ce284ef86943fc687e7e5f52bb..0000000000000000000000000000000000000000 Binary files a/src/icons/Visual WebGUI.png and /dev/null differ diff --git a/src/icons/Vue.js.png b/src/icons/Vue.js.png deleted file mode 100644 index 2c33e395fb595bebbe0dfbf59e2c891e860ac6a0..0000000000000000000000000000000000000000 Binary files a/src/icons/Vue.js.png and /dev/null differ diff --git a/src/icons/Webs.png b/src/icons/Webs.png deleted file mode 100644 index c022e716f22f23111b5dcd2d2ac2b5e6785163a1..0000000000000000000000000000000000000000 Binary files a/src/icons/Webs.png and /dev/null differ diff --git a/src/icons/WebsiteCreator.png b/src/icons/WebsiteCreator.png deleted file mode 100644 index 3c25e14aae94a4507e642156a0b1619bbf216bc6..0000000000000000000000000000000000000000 Binary files a/src/icons/WebsiteCreator.png and /dev/null differ diff --git a/src/icons/Weglot.png b/src/icons/Weglot.png deleted file mode 100644 index 33da33a8aa270d26b71632089fc58bd7caf2717e..0000000000000000000000000000000000000000 Binary files a/src/icons/Weglot.png and /dev/null differ diff --git a/src/icons/WindowsServer.png b/src/icons/WindowsServer.png deleted file mode 100644 index 31f92d9e8fe419027fad5167843e0b0d6b837f14..0000000000000000000000000000000000000000 Binary files a/src/icons/WindowsServer.png and /dev/null differ diff --git a/src/icons/Woltlab Community Framework.png b/src/icons/Woltlab Community Framework.png deleted file mode 100644 index 680ffe468cf2caabb3dc8672316606d685d077ab..0000000000000000000000000000000000000000 Binary files a/src/icons/Woltlab Community Framework.png and /dev/null differ diff --git a/src/icons/WooCommerce.png b/src/icons/WooCommerce.png deleted file mode 100644 index 9772015ace2ab7827602cba5a689bd8f3eb9928f..0000000000000000000000000000000000000000 Binary files a/src/icons/WooCommerce.png and /dev/null differ diff --git a/src/icons/Woosa.png b/src/icons/Woosa.png deleted file mode 100644 index fbb0baaaa6dcbf50ff11978206947c704762d7d9..0000000000000000000000000000000000000000 Binary files a/src/icons/Woosa.png and /dev/null differ diff --git a/src/icons/XpressEngine.png b/src/icons/XpressEngine.png deleted file mode 100644 index b780e77b33d118dc44b6c686ec0f2fe36380df69..0000000000000000000000000000000000000000 Binary files a/src/icons/XpressEngine.png and /dev/null differ diff --git a/src/icons/ZURB Foundation.png b/src/icons/ZURB Foundation.png deleted file mode 100644 index 2e8240fbca9f7b25b0283007d3ba3079d8ce16ca..0000000000000000000000000000000000000000 Binary files a/src/icons/ZURB Foundation.png and /dev/null differ diff --git a/src/icons/Zeuscart.png b/src/icons/Zeuscart.png deleted file mode 100644 index abbca7bd2e28711a4da842fefad3f425f5fe51af..0000000000000000000000000000000000000000 Binary files a/src/icons/Zeuscart.png and /dev/null differ diff --git a/src/icons/Zipkin.png b/src/icons/Zipkin.png deleted file mode 100644 index e783a2ca10f7f43d93171606129154f2ff33b265..0000000000000000000000000000000000000000 Binary files a/src/icons/Zipkin.png and /dev/null differ diff --git a/src/icons/acquia-cloud.png b/src/icons/acquia-cloud.png deleted file mode 100644 index d85843e9af6419f0b03c600f0ed8abda7ad3f230..0000000000000000000000000000000000000000 Binary files a/src/icons/acquia-cloud.png and /dev/null differ diff --git a/src/icons/adobedmt.png b/src/icons/adobedmt.png deleted file mode 100644 index 0a74d4d36fc0d7b39fc3fa47f98c80d9ee4b0197..0000000000000000000000000000000000000000 Binary files a/src/icons/adobedmt.png and /dev/null differ diff --git a/src/icons/all-in-One-SEO-Pack.png b/src/icons/all-in-One-SEO-Pack.png deleted file mode 100644 index 16afdfa1b09577c749e446afad902c366791a8e1..0000000000000000000000000000000000000000 Binary files a/src/icons/all-in-One-SEO-Pack.png and /dev/null differ diff --git a/src/icons/amplitude.png b/src/icons/amplitude.png deleted file mode 100644 index be4f7245428edb2f06e80b37293e9fa37d4f6d96..0000000000000000000000000000000000000000 Binary files a/src/icons/amplitude.png and /dev/null differ diff --git a/src/icons/arcgis_icon.png b/src/icons/arcgis_icon.png deleted file mode 100644 index f743da00ec79f7d6698dd7d5cc235a5d92a13b7b..0000000000000000000000000000000000000000 Binary files a/src/icons/arcgis_icon.png and /dev/null differ diff --git a/src/icons/aws-elb.png b/src/icons/aws-elb.png deleted file mode 100644 index 8db61179600fd3682e7f5531f8c0b340701d3396..0000000000000000000000000000000000000000 Binary files a/src/icons/aws-elb.png and /dev/null differ diff --git a/src/icons/bigbangshop.svg b/src/icons/bigbangshop.svg deleted file mode 100644 index cfbeefd7b29691789bc85468cb94ccc418f3a9b5..0000000000000000000000000000000000000000 --- a/src/icons/bigbangshop.svg +++ /dev/null @@ -1 +0,0 @@ -logo_bbs diff --git a/src/icons/bizweb.png b/src/icons/bizweb.png deleted file mode 100644 index fbe062bb2e0e6a7d54227038f74e5aca5e70996f..0000000000000000000000000000000000000000 Binary files a/src/icons/bizweb.png and /dev/null differ diff --git a/src/icons/bubble.png b/src/icons/bubble.png deleted file mode 100644 index a5d9479ebd18abfa1ee9188665152e1c00d826cb..0000000000000000000000000000000000000000 Binary files a/src/icons/bubble.png and /dev/null differ diff --git a/src/icons/chevereto.png b/src/icons/chevereto.png deleted file mode 100644 index 81e189814c0aa7ef496817b71795029b4ea28230..0000000000000000000000000000000000000000 Binary files a/src/icons/chevereto.png and /dev/null differ diff --git a/src/icons/coaster-cms.png b/src/icons/coaster-cms.png deleted file mode 100644 index 9ec4dcf1ad8d64a6112fdca72fc02584a61ab3e1..0000000000000000000000000000000000000000 Binary files a/src/icons/coaster-cms.png and /dev/null differ diff --git a/src/icons/coinimp.png b/src/icons/coinimp.png deleted file mode 100644 index 80b82ded73a56f5310e93b5f629ac2f372cca2ba..0000000000000000000000000000000000000000 Binary files a/src/icons/coinimp.png and /dev/null differ diff --git a/src/icons/coinlab.png b/src/icons/coinlab.png deleted file mode 100644 index 0f059c5ef47d51c7e121a659dde9a3ad30578404..0000000000000000000000000000000000000000 Binary files a/src/icons/coinlab.png and /dev/null differ diff --git a/src/icons/colormeshop.png b/src/icons/colormeshop.png deleted file mode 100644 index af70496d85679b1d30e36d35bbf63ea441f72f39..0000000000000000000000000000000000000000 Binary files a/src/icons/colormeshop.png and /dev/null differ diff --git a/src/icons/datadome.png b/src/icons/datadome.png deleted file mode 100644 index 9c19fb1d7f19b35f95a376e95c4d0031bab95164..0000000000000000000000000000000000000000 Binary files a/src/icons/datadome.png and /dev/null differ diff --git a/src/icons/deepminer.png b/src/icons/deepminer.png deleted file mode 100644 index e85712f8eced9b00cc778aac1b3617bb30d9459e..0000000000000000000000000000000000000000 Binary files a/src/icons/deepminer.png and /dev/null differ diff --git a/src/icons/eZ Publish.png b/src/icons/eZ Publish.png deleted file mode 100644 index ec649027f146ebe8b02f2a6d9c04e6a4c105c06a..0000000000000000000000000000000000000000 Binary files a/src/icons/eZ Publish.png and /dev/null differ diff --git a/src/icons/ensighten.png b/src/icons/ensighten.png deleted file mode 100644 index 935be0caabeebde78af98fe2fec5dc49314cded6..0000000000000000000000000000000000000000 Binary files a/src/icons/ensighten.png and /dev/null differ diff --git a/src/icons/epages.png b/src/icons/epages.png deleted file mode 100644 index f80112cd161d0c2ddaf2d9277d6aec4376c1bafa..0000000000000000000000000000000000000000 Binary files a/src/icons/epages.png and /dev/null differ diff --git a/src/icons/flarum.png b/src/icons/flarum.png deleted file mode 100644 index fc3840330afa0b2916a2936bfd0593d7b0fac4c1..0000000000000000000000000000000000000000 Binary files a/src/icons/flarum.png and /dev/null differ diff --git a/src/icons/freshchat.png b/src/icons/freshchat.png deleted file mode 100644 index b79a05767d4f75dbba841393784abb05316d55ac..0000000000000000000000000000000000000000 Binary files a/src/icons/freshchat.png and /dev/null differ diff --git a/src/icons/freshmarketer.png b/src/icons/freshmarketer.png deleted file mode 100644 index 245f94dfefaafe189a20bbd29d3276722dbe6419..0000000000000000000000000000000000000000 Binary files a/src/icons/freshmarketer.png and /dev/null differ diff --git a/src/icons/futureshop.png b/src/icons/futureshop.png deleted file mode 100644 index da3bdf84bb3527b592385dba788030c9f2967de8..0000000000000000000000000000000000000000 Binary files a/src/icons/futureshop.png and /dev/null differ diff --git a/src/icons/gosquared.png b/src/icons/gosquared.png deleted file mode 100644 index d08059fc21199c9738472627edfa4fa0b65e38cc..0000000000000000000000000000000000000000 Binary files a/src/icons/gosquared.png and /dev/null differ diff --git a/src/icons/hapi.js.png b/src/icons/hapi.js.png deleted file mode 100644 index 0308945de66ecdfb6b49b2d26620e3bfb0d738ec..0000000000000000000000000000000000000000 Binary files a/src/icons/hapi.js.png and /dev/null differ diff --git a/src/icons/hinza_advanced_cms.svg b/src/icons/hinza_advanced_cms.svg deleted file mode 100644 index b3bbf8ba4fb103e05ea67eb04e89aca178efed94..0000000000000000000000000000000000000000 --- a/src/icons/hinza_advanced_cms.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - -ac - - - - diff --git a/src/icons/iEXExchanger.png b/src/icons/iEXExchanger.png deleted file mode 100644 index c237a251329117c757c5e88707ab33af59a20f77..0000000000000000000000000000000000000000 Binary files a/src/icons/iEXExchanger.png and /dev/null differ diff --git a/src/icons/iWeb.png b/src/icons/iWeb.png deleted file mode 100644 index cc7ad01620f74e5f2cda746b48cea4c8339e086a..0000000000000000000000000000000000000000 Binary files a/src/icons/iWeb.png and /dev/null differ diff --git a/src/icons/idosellshop.png b/src/icons/idosellshop.png deleted file mode 100644 index f7e921195a082d091cbac13368facd561afcd8fe..0000000000000000000000000000000000000000 Binary files a/src/icons/idosellshop.png and /dev/null differ diff --git a/src/icons/inspectlet.png b/src/icons/inspectlet.png deleted file mode 100644 index 7370bad21a17603d45e1e95bab6d10e4e39f63ec..0000000000000000000000000000000000000000 Binary files a/src/icons/inspectlet.png and /dev/null differ diff --git a/src/icons/inwemo.png b/src/icons/inwemo.png deleted file mode 100644 index 1dd0d690eb43ff3f60fac97eb864f67fc37e2787..0000000000000000000000000000000000000000 Binary files a/src/icons/inwemo.png and /dev/null differ diff --git a/src/icons/ionic.png b/src/icons/ionic.png deleted file mode 100644 index f1b7f2ec572203fc85ac04c770dd1601bb0bce6c..0000000000000000000000000000000000000000 Binary files a/src/icons/ionic.png and /dev/null differ diff --git a/src/icons/koha.png b/src/icons/koha.png deleted file mode 100644 index 3bdb0d68810b9815796fd135b5bcaee3b0340db2..0000000000000000000000000000000000000000 Binary files a/src/icons/koha.png and /dev/null differ diff --git a/src/icons/laterpay.png b/src/icons/laterpay.png deleted file mode 100644 index b425ec8e95fe7f691bff48fce7df16d2cdb0d993..0000000000000000000000000000000000000000 Binary files a/src/icons/laterpay.png and /dev/null differ diff --git a/src/icons/meliscmsv2.png b/src/icons/meliscmsv2.png deleted file mode 100644 index c545b2882c111dc67729a114e3d8e7e8377e7b13..0000000000000000000000000000000000000000 Binary files a/src/icons/meliscmsv2.png and /dev/null differ diff --git a/src/icons/mhonarc.png b/src/icons/mhonarc.png deleted file mode 100644 index c808de4236f781182d83d8cf939045fb9789dad8..0000000000000000000000000000000000000000 Binary files a/src/icons/mhonarc.png and /dev/null differ diff --git a/src/icons/mietshop.png b/src/icons/mietshop.png deleted file mode 100644 index b090dd9016b8798777f66bc045df7f779920efd8..0000000000000000000000000000000000000000 Binary files a/src/icons/mietshop.png and /dev/null differ diff --git a/src/icons/mobirise.png b/src/icons/mobirise.png deleted file mode 100644 index 8244640ea6c67ef58bd9aace6708d2ccb1b68129..0000000000000000000000000000000000000000 Binary files a/src/icons/mobirise.png and /dev/null differ diff --git a/src/icons/monerominer.png b/src/icons/monerominer.png deleted file mode 100644 index 5fb978053cba1ba5f4fb551b22d5a07470ad969f..0000000000000000000000000000000000000000 Binary files a/src/icons/monerominer.png and /dev/null differ diff --git a/src/icons/mouseflow.png b/src/icons/mouseflow.png deleted file mode 100644 index 471ca736080ee866933f138fc7483459f968863b..0000000000000000000000000000000000000000 Binary files a/src/icons/mouseflow.png and /dev/null differ diff --git a/src/icons/mypage-platform.png b/src/icons/mypage-platform.png deleted file mode 100644 index 99687ec479fed6a7e13ccc917f089ffc849a2b56..0000000000000000000000000000000000000000 Binary files a/src/icons/mypage-platform.png and /dev/null differ diff --git a/src/icons/openEngine.png b/src/icons/openEngine.png deleted file mode 100644 index a1257cd2e7bd8621fc67fabb0e525fa40f2b9796..0000000000000000000000000000000000000000 Binary files a/src/icons/openEngine.png and /dev/null differ diff --git a/src/icons/osCSS.png b/src/icons/osCSS.png deleted file mode 100644 index 9d797793b2753a43bae3acec6381b9ee0dd2b6d9..0000000000000000000000000000000000000000 Binary files a/src/icons/osCSS.png and /dev/null differ diff --git a/src/icons/otrs.png b/src/icons/otrs.png deleted file mode 100644 index 476d7420f379b8bf08619047d83b68f32311e51e..0000000000000000000000000000000000000000 Binary files a/src/icons/otrs.png and /dev/null differ diff --git a/src/icons/paperjs.png b/src/icons/paperjs.png deleted file mode 100644 index 37cb8a114a6f5690fec75309fa87c02cd050e3ca..0000000000000000000000000000000000000000 Binary files a/src/icons/paperjs.png and /dev/null differ diff --git a/src/icons/pelican.png b/src/icons/pelican.png deleted file mode 100644 index 3fffd485867bd8e31061891a2e50e9bf43ce3416..0000000000000000000000000000000000000000 Binary files a/src/icons/pelican.png and /dev/null differ diff --git a/src/icons/phpCMS.png b/src/icons/phpCMS.png deleted file mode 100644 index 9cfd4bcaaea6b6d77f6256e1f83ec46a09039e7c..0000000000000000000000000000000000000000 Binary files a/src/icons/phpCMS.png and /dev/null differ diff --git a/src/icons/phpliteadmin.png b/src/icons/phpliteadmin.png deleted file mode 100644 index 03487a2d357a62df1546e7b2692a7c2cbe1238e2..0000000000000000000000000000000000000000 Binary files a/src/icons/phpliteadmin.png and /dev/null differ diff --git a/src/icons/projesoft.png b/src/icons/projesoft.png deleted file mode 100644 index 77b9293dac634141fdc83ea9778ffa6961072dfa..0000000000000000000000000000000000000000 Binary files a/src/icons/projesoft.png and /dev/null differ diff --git a/src/icons/redoc.png b/src/icons/redoc.png deleted file mode 100644 index f99f5d48f8f09035512a14148f5a142cacb2a7f0..0000000000000000000000000000000000000000 Binary files a/src/icons/redoc.png and /dev/null differ diff --git a/src/icons/revslider.png b/src/icons/revslider.png deleted file mode 100644 index 3b2cd2ac5c3a6b021c96568dac8918bdf6976610..0000000000000000000000000000000000000000 Binary files a/src/icons/revslider.png and /dev/null differ diff --git a/src/icons/shopline.png b/src/icons/shopline.png deleted file mode 100644 index ebdb09d1486d8a31109349f0dd89a12aafed08d3..0000000000000000000000000000000000000000 Binary files a/src/icons/shopline.png and /dev/null differ diff --git a/src/icons/signal.png b/src/icons/signal.png deleted file mode 100644 index 56ac41aa5c821f51cac4ddba0ee6bebedea52610..0000000000000000000000000000000000000000 Binary files a/src/icons/signal.png and /dev/null differ diff --git a/src/icons/styled-components.png b/src/icons/styled-components.png deleted file mode 100644 index 8d24ba2cac0f432a2f2cb28b8ced9f417a2a8043..0000000000000000000000000000000000000000 Binary files a/src/icons/styled-components.png and /dev/null differ diff --git a/src/icons/sucuri.png b/src/icons/sucuri.png deleted file mode 100644 index ec4be30a3d541335addf6636356de0c04746c9e2..0000000000000000000000000000000000000000 Binary files a/src/icons/sucuri.png and /dev/null differ diff --git a/src/icons/svbtle.png b/src/icons/svbtle.png deleted file mode 100644 index 235e1eb028e59702fe4cdbc8f9ae0efae89a4e86..0000000000000000000000000000000000000000 Binary files a/src/icons/svbtle.png and /dev/null differ diff --git a/src/icons/sympa.png b/src/icons/sympa.png deleted file mode 100644 index 288e92224ec4bed330dd93715400d8b09c9cbaf8..0000000000000000000000000000000000000000 Binary files a/src/icons/sympa.png and /dev/null differ diff --git a/src/icons/total.js.png b/src/icons/total.js.png deleted file mode 100644 index e7d137915696ded837558459f0f68a24a274ca18..0000000000000000000000000000000000000000 Binary files a/src/icons/total.js.png and /dev/null differ diff --git a/src/icons/transifex.png b/src/icons/transifex.png deleted file mode 100644 index 4c90c29a67ec9625c5b029c5896dca2c2c0bb3f3..0000000000000000000000000000000000000000 Binary files a/src/icons/transifex.png and /dev/null differ diff --git a/src/icons/tray.png b/src/icons/tray.png deleted file mode 100644 index 66d51076539e57f9dbc26ab65e5dcc368bf49a9a..0000000000000000000000000000000000000000 Binary files a/src/icons/tray.png and /dev/null differ diff --git a/src/icons/uCore.png b/src/icons/uCore.png deleted file mode 100644 index 5f5da3de3826af8170ad9f468dc43edf5c7b597a..0000000000000000000000000000000000000000 Binary files a/src/icons/uCore.png and /dev/null differ diff --git a/src/icons/vigbo.png b/src/icons/vigbo.png deleted file mode 100644 index e14e507f1845f42f412cb7e7824fb30f8bacfa48..0000000000000000000000000000000000000000 Binary files a/src/icons/vigbo.png and /dev/null differ diff --git a/src/icons/webdev.png b/src/icons/webdev.png deleted file mode 100644 index a37ce3ec83faa0f6269df3d99521f9fe678d9a40..0000000000000000000000000000000000000000 Binary files a/src/icons/webdev.png and /dev/null differ diff --git a/src/icons/webmine.png b/src/icons/webmine.png deleted file mode 100644 index ba3534e5a73dd7d514aa59fdec102db154e9b465..0000000000000000000000000000000000000000 Binary files a/src/icons/webmine.png and /dev/null differ diff --git a/src/icons/websocket.png b/src/icons/websocket.png deleted file mode 100644 index 7d94f1073717ab8511cb229d460a86cc42d20f8c..0000000000000000000000000000000000000000 Binary files a/src/icons/websocket.png and /dev/null differ diff --git a/src/icons/xeora.png b/src/icons/xeora.png deleted file mode 100644 index 36151f12ff591b31b41e0e28dcfb561e4970e5cd..0000000000000000000000000000000000000000 Binary files a/src/icons/xeora.png and /dev/null differ diff --git a/src/icons/xonic.png b/src/icons/xonic.png deleted file mode 100644 index 77f6d9e1755bf7a7e0171ffac620ddb2c976b033..0000000000000000000000000000000000000000 Binary files a/src/icons/xonic.png and /dev/null differ diff --git a/src/icons/xwiki.png b/src/icons/xwiki.png deleted file mode 100644 index cba1e5440bdaffd1c5abed05c164918dcf11b07b..0000000000000000000000000000000000000000 Binary files a/src/icons/xwiki.png and /dev/null differ diff --git a/src/icons/yepcomm.png b/src/icons/yepcomm.png deleted file mode 100644 index 4b987b382f335559068775ec230582d0c1a7864b..0000000000000000000000000000000000000000 Binary files a/src/icons/yepcomm.png and /dev/null differ diff --git a/src/icons/zeit.svg b/src/icons/zeit.svg deleted file mode 100644 index 8ce0bfb63fe2d8b469f0fd5948b786664fbc725d..0000000000000000000000000000000000000000 --- a/src/icons/zeit.svg +++ /dev/null @@ -1 +0,0 @@ -ZeitCreated with Sketch. \ No newline at end of file diff --git a/src/package.json b/src/package.json new file mode 100644 index 0000000000000000000000000000000000000000..e9aba8300b3253cf2d1d751bfb5a28d6a58341bb --- /dev/null +++ b/src/package.json @@ -0,0 +1,30 @@ +{ + "name": "wappalyzer-core", + "description": "Identify technology on websites", + "keywords": [ + "analyze", + "identify", + "detect", + "detector", + "technology", + "cms", + "framework", + "library", + "software" + ], + "homepage": "https://www.wappalyzer.com", + "version": "6.2.6", + "author": "Wappalyzer", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/aliasio/wappalyzer" + }, + "funding": { + "url": "https://github.com/sponsors/aliasio" + }, + "main": "wappalyzer.js", + "files": [ + "wappalyzer.js" + ] +} diff --git a/src/wappalyzer.js b/src/wappalyzer.js index 7a2c3e3683bc5dab97fae487db3b60fb4efbd640..07f87ee9e2069253756f122f6a65b256d5bec3ae 100644 --- a/src/wappalyzer.js +++ b/src/wappalyzer.js @@ -1,672 +1,411 @@ -/** - * Wappalyzer v5 - * - * Created by Elbert Alias - * - * License: GPLv3 http://www.gnu.org/licenses/gpl-3.0.txt - */ - -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)/, -}; - -/** - * Enclose string in array - */ -function asArray(value) { - return value instanceof Array ? value : [value]; -} - -/** - * - */ -function asyncForEach(iterable, iterator) { - 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; +'use strict' - // Set confidence level - app.confidence[`${type} ${key ? `${key} ` : ''}${pattern.regex}`] = pattern.confidence === undefined ? 100 : parseInt(pattern.confidence, 10); +const Wappalyzer = { + technologies: [], + categories: [], - // Detect version number - if (pattern.version) { - const versions = []; - const matches = pattern.regex.exec(value); + slugify(string) { + return string + .toLowerCase() + .replace(/[^a-z0-9-]/g, '-') + .replace(/--+/g, '-') + .replace(/(?:^-|-$)/, '') + }, - let { version } = pattern; - - if (matches) { - matches.forEach((match, i) => { - // Parse ternary operator - const ternary = new RegExp(`\\\\${i}\\?([^:]+):(.*)$`).exec(version); - - if (ternary && ternary.length === 3) { - version = version.replace(ternary[0], match ? ternary[1] : ternary[2]); - } + getTechnology(name) { + return Wappalyzer.technologies.find(({ name: _name }) => name === _name) + }, - // Replace back references - version = version.trim().replace(new RegExp(`\\\\${i}`, 'g'), match || ''); - }); - - if (version && versions.indexOf(version) === -1) { - versions.push(version); - } - - if (versions.length) { - // Use the longest detected version number - app.version = versions.reduce((a, b) => (a.length > b.length ? a : b)); - } - } - } -} - -function resolveExcludes(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]; - - if (app.props.excludes) { - asArray(app.props.excludes).forEach((excluded) => { - excludes.push(excluded); - }); - } - }); - - // Remove excluded applications - Object.keys(apps).forEach((appName) => { - if (excludes.indexOf(appName) > -1) { - 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 = ''; - } + getCategory(id) { + return Wappalyzer.categories.find(({ id: _id }) => id === _id) + }, /** - * Calculate confidence total + * Resolve promises for implied technology. + * @param {Array} detections */ - getConfidence() { - let total = 0; - - Object.keys(this.confidence).forEach((id) => { - total += this.confidence[id]; - }); - - this.confidenceTotal = Math.min(total, 100); - - return this.confidenceTotal; - } -} - -class Wappalyzer { - constructor() { - 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', - }; - } - - /** - * Log messages to console - */ - log(message, source, type) { - if (this.driver.log) { - 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; - - if (this.detected[url.canonical] === undefined) { - this.detected[url.canonical] = {}; - } - - const metaTags = []; - - // Additional information - let language = null; - - if (html) { - if (typeof html !== 'string') { - html = ''; - } - - let matches = data.html.match(new RegExp(']*[: ]lang="([a-z]{2}((-|_)[A-Z]{2})?)"', 'i')); - - language = matches && matches.length ? matches[1] : null; - - // Meta tags - const regex = /]+>/ig; - - do { - matches = regex.exec(html); - - if (!matches) { - break; - } - - 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]); - - const app = apps[appName]; - - promises.push(this.analyzeUrl(app, url)); - - if (html) { - promises.push(this.analyzeHtml(app, html)); - promises.push(this.analyzeMeta(app, metaTags)); - } - - if (scripts) { - promises.push(this.analyzeScripts(app, scripts)); - } - - if (cookies) { - promises.push(this.analyzeCookies(app, cookies)); - } - - if (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])); - } - }); - } - - return new Promise(async (resolve) => { - await Promise.all(promises); - - Object.keys(apps).forEach((appName) => { - const app = apps[appName]; - - if (!app.detected || !app.getConfidence()) { - delete apps[app.name]; - } - }); - - resolveExcludes(apps, this.detected[url]); - this.resolveImplies(apps, url.canonical); - - 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'); - - if (Object.keys(apps).length) { - this.log(`Identified ${Object.keys(apps).join(', ')} (${url.hostname})`, 'core'); - } - - this.driver.displayApps(this.detected[url.canonical], { language }, context); - - return resolve(); - }); - } - - /** - * Cache detected ads - */ - cacheDetectedAds(ad) { - this.adCache.push(ad); - } - - /** - * - */ - robotsTxtAllows(url) { - return new Promise(async (resolve, reject) => { - const parsed = this.parseUrl(url); - - if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') { - return reject(); - } - - const robotsTxt = await this.driver.getRobotsTxt(parsed.host, parsed.protocol === 'https:'); + resolve(detections = []) { + const resolved = detections.reduce((resolved, { technology }) => { + if ( + resolved.findIndex( + ({ technology: { name } }) => name === technology.name + ) === -1 + ) { + let version = '' + let confidence = 0 + + detections + .filter(({ technology }) => technology) + .forEach( + ({ technology: { name }, pattern, version: _version = '' }) => { + if (name === technology.name) { + confidence = Math.min(100, confidence + pattern.confidence) + version = + _version.length > version.length && _version.length <= 10 + ? _version + : version + } + } + ) - if (robotsTxt.some(disallowedPath => parsed.pathname.indexOf(disallowedPath) === 0)) { - return reject(); + resolved.push({ technology, confidence, version }) } - return resolve(); - }); - } - - /** - * Parse a URL - */ - parseUrl(url) { - const a = this.driver.document.createElement('a'); - - a.href = url; - - a.canonical = `${a.protocol}//${a.host}${a.pathname}`; - - return a; - } + return resolved + }, []) + + Wappalyzer.resolveExcludes(resolved) + Wappalyzer.resolveImplies(resolved) + + const priority = ({ technology: { categories } }) => + categories.reduce( + (max, id) => Math.max(max, Wappalyzer.getCategory(id).priority), + 0 + ) + + return resolved + .sort((a, b) => (priority(a) > priority(b) ? 1 : -1)) + .map( + ({ + technology: { name, slug, categories, icon, website, cpe }, + confidence, + version + }) => ({ + name, + slug, + categories: categories.map((id) => Wappalyzer.getCategory(id)), + confidence, + version, + icon, + website, + cpe + }) + ) + }, /** - * + * Resolve promises for version of technology. + * @param {Promise} resolved */ - static parseRobotsTxt(robotsTxt) { - const disallow = []; + resolveVersion({ version, regex }, match) { + let resolved = version - let userAgent; - - robotsTxt.split('\n').forEach((line) => { - let matches = /^User-agent:\s*(.+)$/i.exec(line.trim()); + if (version) { + const matches = regex.exec(match) if (matches) { - userAgent = matches[1].toLowerCase(); - } else if (userAgent === '*' || userAgent === 'wappalyzer') { - matches = /^Disallow:\s*(.+)$/i.exec(line.trim()); + matches.forEach((match, index) => { + // Parse ternary operator + const ternary = new RegExp(`\\\\${index}\\?([^:]+):(.*)$`).exec( + version + ) + + if (ternary && ternary.length === 3) { + resolved = version.replace( + ternary[0], + match ? ternary[1] : ternary[2] + ) + } - if (matches) { - disallow.push(matches[1]); - } + // Replace back references + resolved = resolved + .trim() + .replace(new RegExp(`\\\\${index}`, 'g'), match || '') + }) } - }); - - return disallow; - } - - /** - * - */ - ping() { - if (Object.keys(this.hostnameCache).length > 100) { - this.driver.ping(this.hostnameCache); - - this.hostnameCache = {}; } - if (this.adCache.length > 50) { - this.driver.ping({}, this.adCache); - - this.adCache = []; - } - } + return resolved + }, /** - * Parse apps.json patterns + * Resolve promises for excluded technology. + * @param {Promise} resolved */ - parsePatterns(patterns) { - if (!patterns) { - return []; - } - - let parsed = {}; - - // Convert string to object containing array containing string - if (typeof patterns === 'string' || patterns instanceof Array) { - patterns = { - main: asArray(patterns), - }; - } - - Object.keys(patterns).forEach((key) => { - parsed[key] = []; + resolveExcludes(resolved) { + resolved.forEach(({ technology }) => { + technology.excludes.forEach(({ name }) => { + const excluded = Wappalyzer.getTechnology(name) - asArray(patterns[key]).forEach((pattern) => { - const attrs = {}; - - pattern.split('\\;').forEach((attr, i) => { - if (i) { - // Key value pairs - attr = attr.split(':'); - - if (attr.length > 1) { - attrs[attr.shift()] = attr.join(':'); - } - } else { - attrs.string = attr; - - try { - attrs.regex = new RegExp(attr.replace('/', '\/'), 'i'); // Escape slashes in regular expression - } catch (error) { - attrs.regex = new RegExp(); - - this.log(`${error.message}: ${attr}`, 'error', 'core'); - } - } - }); - - parsed[key].push(attrs); - }); - }); + if (!excluded) { + throw new Error(`Excluded technology does not exist: ${name}`) + } - // Convert back to array if the original pattern list was an array (or string) - if ('main' in parsed) { - parsed = parsed.main; - } + const index = resolved.findIndex(({ name }) => name === excluded.name) - return parsed; - } + if (index !== -1) { + resolved.splice(index, 1) + } + }) + }) + }, /** - * Parse JavaScript patterns + * Resolve promises for implied technology. + * @param {Promise} resolved */ - parseJsPatterns() { - Object.keys(this.apps).forEach((appName) => { - if (this.apps[appName].js) { - this.jsPatterns[appName] = this.parsePatterns(this.apps[appName].js); - } - }); - } - - resolveImplies(apps, url) { - let checkImplies = true; + resolveImplies(resolved) { + let done = false - const resolve = (appName) => { - const app = apps[appName]; + while (resolved.length && !done) { + resolved.forEach(({ technology, confidence }) => { + done = true - if (app && app.props.implies) { - asArray(app.props.implies).forEach((implied) => { - [implied] = this.parsePatterns(implied); + technology.implies.forEach(({ name, confidence: _confidence }) => { + const implied = Wappalyzer.getTechnology(name) - if (!this.apps[implied.string]) { - this.log(`Implied application ${implied.string} does not exist`, 'core', 'warn'); - - return; + if (!implied) { + throw new Error(`Implied technology does not exist: ${name}`) } - 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; + if ( + resolved.findIndex( + ({ technology: { name } }) => name === implied.name + ) === -1 + ) { + resolved.push({ + technology: implied, + confidence: Math.min(confidence, _confidence), + version: '' + }) + + done = false } - - // 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); - }); - }); - } - }; - - // Implied applications - // Run several passes as implied apps may imply other apps - while (checkImplies) { - checkImplies = false; - - Object.keys(apps).forEach(resolve); + }) + }) } - } + }, /** - * Cache detected applications + * Initialize analyzation. + * @param {*} param0 */ - cacheDetectedApps(apps, url) { - Object.keys(apps).forEach((appName) => { - const app = apps[appName]; - - // Per URL - this.detected[url][appName] = app; - - Object.keys(app.confidence) - .forEach((id) => { - this.detected[url][appName].confidence[id] = app.confidence[id]; - }); - }); - - if (this.driver.ping instanceof Function) { - this.ping(); + analyze({ url, html, robots, meta, headers, cookies, scripts }) { + const oo = Wappalyzer.analyzeOneToOne + const om = Wappalyzer.analyzeOneToMany + const mm = Wappalyzer.analyzeManyToMany + + const flatten = (array) => Array.prototype.concat.apply([], array) + + try { + const detections = flatten( + Wappalyzer.technologies.map((technology) => + flatten([ + oo(technology, 'url', url), + oo(technology, 'html', html), + oo(technology, 'robots', robots), + om(technology, 'scripts', scripts), + mm(technology, 'cookies', cookies), + mm(technology, 'meta', meta), + mm(technology, 'headers', headers) + ]) + ) + ).filter((technology) => technology) + + return detections + } catch (error) { + throw new Error(error.message || error.toString()) } - } + }, /** - * Track detected applications + * Extract technologies from data collected. + * @param {*object} data */ - trackDetectedApps(apps, url, language) { - if (!(this.driver.ping instanceof Function)) { - return; - } - - const hostname = `${url.protocol}//${url.hostname}`; - - Object.keys(apps).forEach((appName) => { - const app = apps[appName]; - - if (this.detected[url.canonical][appName].getConfidence() >= 100) { - if ( - validation.hostname.test(url.hostname) - && !validation.hostnameBlacklist.test(url.hostname) - ) { - if (!(hostname in this.hostnameCache)) { - this.hostnameCache[hostname] = { - applications: {}, - meta: {}, - }; - } - - if (!(appName in this.hostnameCache[hostname].applications)) { - this.hostnameCache[hostname].applications[appName] = { - hits: 0, - }; - } - - this.hostnameCache[hostname].applications[appName].hits += 1; - - if (apps[appName].version) { - this.hostnameCache[hostname].applications[appName].version = app.version; - } - } - } - }); - - if (hostname in this.hostnameCache) { - this.hostnameCache[hostname].meta.language = language; - } - - this.ping(); - } + setTechnologies(data) { + const transform = Wappalyzer.transformPatterns + + Wappalyzer.technologies = Object.keys(data).reduce((technologies, name) => { + const { + cats, + url, + html, + robots, + meta, + headers, + cookies, + script, + js, + implies, + excludes, + icon, + website, + cpe + } = data[name] + + technologies.push({ + name, + categories: cats || [], + slug: Wappalyzer.slugify(name), + url: transform(url), + headers: transform(headers), + cookies: transform(cookies), + html: transform(html), + robots: transform(robots), + meta: transform(meta), + scripts: transform(script), + js: transform(js, true), + implies: transform(implies).map(({ value, confidence }) => ({ + name: value, + confidence + })), + excludes: transform(excludes).map(({ value }) => ({ + name: value + })), + icon: icon || 'default.svg', + website: website || null, + cpe: cpe || null + }) + + return technologies + }, []) + }, /** - * Analyze URL + * Assign categories for data. + * @param {Object} data */ - analyzeUrl(app, url) { - const patterns = this.parsePatterns(app.props.url); - - if (!patterns.length) { - return Promise.resolve(); - } - - return asyncForEach(patterns, (pattern) => { - if (pattern.regex.test(url.canonical)) { - addDetected(app, pattern, 'url', url.canonical); - } - }); - } + setCategories(data) { + Wappalyzer.categories = Object.keys(data) + .reduce((categories, id) => { + const category = data[id] + + categories.push({ + id: parseInt(id, 10), + slug: Wappalyzer.slugify(category.name), + ...category + }) + + return categories + }, []) + .sort(({ priority: a }, { priority: b }) => (a > b ? -1 : 0)) + }, /** - * Analyze HTML + * Extract information from regex pattern. + * @param {string|array} patterns */ - analyzeHtml(app, html) { - const patterns = this.parsePatterns(app.props.html); - - if (!patterns.length) { - return Promise.resolve(); + transformPatterns(patterns, caseSensitive = false) { + if (!patterns) { + return [] } - return asyncForEach(patterns, (pattern) => { - if (pattern.regex.test(html)) { - addDetected(app, pattern, 'html', html); - } - }); - } - - /** - * Analyze script tag - */ - analyzeScripts(app, scripts) { - const patterns = this.parsePatterns(app.props.script); + const toArray = (value) => (Array.isArray(value) ? value : [value]) - if (!patterns.length) { - return Promise.resolve(); + if (typeof patterns === 'string' || Array.isArray(patterns)) { + patterns = { main: patterns } } - return asyncForEach(patterns, (pattern) => { - scripts.forEach((uri) => { - if (pattern.regex.test(uri)) { - addDetected(app, pattern, 'script', uri); - } - }); - }); - } - - /** - * Analyze meta tag - */ - analyzeMeta(app, metaTags) { - const patterns = this.parsePatterns(app.props.meta); - const promises = []; - - if (!app.props.meta) { - return Promise.resolve(); - } + const parsed = Object.keys(patterns).reduce((parsed, key) => { + parsed[caseSensitive ? key : key.toLowerCase()] = toArray( + patterns[key] + ).map((pattern) => { + const { value, regex, confidence, version } = pattern + .split('\\;') + .reduce((attrs, attr, i) => { + if (i) { + // Key value pairs + attr = attr.split(':') + + if (attr.length > 1) { + attrs[attr.shift()] = attr.join(':') + } + } else { + attrs.value = attr - metaTags.forEach((match) => { - Object.keys(patterns).forEach((meta) => { - const r = new RegExp(`(?:name|property)=["']${meta}["']`, 'i'); + // Escape slashes in regular expression + attrs.regex = new RegExp(attr.replace(/\//g, '\\/'), 'i') + } - if (r.test(match)) { - const content = match.match(/content=("|')([^"']+)("|')/i); + return attrs + }, {}) - promises.push(asyncForEach(patterns[meta], (pattern) => { - if (content && content.length === 4 && pattern.regex.test(content[2])) { - addDetected(app, pattern, 'meta', content[2], meta); - } - })); + return { + value, + regex, + confidence: parseInt(confidence || 100, 10), + version: version || '' } - }); - }); + }) - return Promise.all(promises); - } + return parsed + }, {}) + + return 'main' in parsed ? parsed.main : parsed + }, /** - * Analyze response headers + * @todo describe + * @param {Object} technology + * @param {String} type + * @param {String} value */ - analyzeHeaders(app, headers) { - 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); - } - }); - } - })); + analyzeOneToOne(technology, type, value) { + return technology[type].reduce((technologies, pattern) => { + if (pattern.regex.test(value)) { + technologies.push({ + technology, + pattern, + version: Wappalyzer.resolveVersion(pattern, value) + }) } - }); - return promises ? Promise.all(promises) : Promise.resolve(); - } + return technologies + }, []) + }, /** - * Analyze cookies + * @todo update + * @param {Object} technology + * @param {String} type + * @param {Array} items */ - analyzeCookies(app, cookies) { - const patterns = this.parsePatterns(app.props.cookies); - const promises = []; - - Object.keys(patterns).forEach((cookieName) => { - if (typeof patterns[cookieName] !== 'function') { - const cookieNameLower = cookieName.toLowerCase(); - - 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); - } - })); - } - }); + analyzeOneToMany(technology, type, items = []) { + return items.reduce((technologies, value) => { + const patterns = technology[type] || [] + + patterns.forEach((pattern) => { + if (pattern.regex.test(value)) { + technologies.push({ + technology, + pattern, + version: Wappalyzer.resolveVersion(pattern, value) + }) + } + }) - return promises ? Promise.all(promises) : Promise.resolve(); - } + return technologies + }, []) + }, /** - * Analyze JavaScript variables + * + * @param {Object} technology + * @param {String} type + * @param {Array} items */ - analyzeJs(app, results) { - 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]; - - if (pattern && pattern.regex.test(value)) { - addDetected(app, pattern, 'js', value, string); + analyzeManyToMany(technology, type, items = {}) { + return Object.keys(technology[type]).reduce((technologies, key) => { + const patterns = technology[type][key] || [] + const values = items[key] || [] + + patterns.forEach((pattern) => { + values.forEach((value) => { + if (pattern.regex.test(value)) { + technologies.push({ + technology, + pattern, + version: Wappalyzer.resolveVersion(pattern, value) + }) } - })); - } - }); + }) + }) - return promises ? Promise.all(promises) : Promise.resolve(); + return technologies + }, []) } } -if (typeof module === 'object') { - module.exports = Wappalyzer; +if (typeof module !== 'undefined') { + module.exports = Wappalyzer } diff --git a/src/wappalyzer.spec.js b/src/wappalyzer.spec.js deleted file mode 100644 index f51d7fb10f539c686b1b2622c3f76ecdf374b4c4..0000000000000000000000000000000000000000 --- a/src/wappalyzer.spec.js +++ /dev/null @@ -1,278 +0,0 @@ -/* eslint-env mocha */ - -const { assert, expect } = require('chai'); -const Wappalyzer = require('../src/wappalyzer'); - -const appsJson = { - appUrl: { - url: 'test', - }, - appCookies: { - cookies: { - test: 'test', - }, - }, - appUppercaseCookies: { - cookies: { - Test: 'Test', - }, - }, - appHeaders: { - headers: { - 'X-Powered-By': 'test', - }, - }, - appHtml: { - html: 'test v(\\d)\\;confidence:50\\;version:\\1', - implies: 'appImplies', - excludes: 'appExcludes', - }, - appMeta: { - meta: { - generator: 'test', - }, - }, - appScript: { - script: 'test', - }, - appJs: { - js: { - key: 'value', - }, - }, - appImplies: { - }, - appExcludes: { - html: 'test', - }, -}; - -const driverData = { - cookies: [ - { - name: 'test', - value: 'test', - domain: '', - path: '', - }, - ], - headers: { - 'x-powered-by': [ - 'test', - ], - }, - html: ' html test v1', - scripts: [ - 'test', - ], - js: { - appJs: { - key: [ - 'value', - ], - }, - }, -}; - -describe('Wappalyzer', () => { - describe('#analyze()', () => { - let apps; - - before(async () => { - const wappalyzer = new Wappalyzer(); - - wappalyzer.apps = appsJson; - - wappalyzer.parseJsPatterns(); - - wappalyzer.driver.displayApps = (detected) => { - apps = detected; - }; - - await wappalyzer.analyze({ canonical: 'test' }, driverData); - }); - - it('should identify technologies using URLs', () => { - expect(apps).to.have.any.keys('appUrl'); - }); - - it('should identify technologies using HTML', () => { - expect(apps).to.have.any.keys('appHtml'); - }); - - it('should identify technologies using meta tags', () => { - expect(apps).to.have.any.keys('appMeta'); - }); - - it('should identify technologies using script URLs', () => { - expect(apps).to.have.any.keys('appScript'); - }); - - it('should identify technologies using headers', () => { - expect(apps).to.have.any.keys('appHeaders'); - }); - - it('should identify technologies using cookies', () => { - expect(apps).to.have.any.keys('appCookies'); - }); - - it('should identify technologies using uppercase named cookies', () => { - expect(apps).to.have.any.keys('appUppercaseCookies'); - }); - - it('should identify technologies using JavaScript', () => { - expect(apps).to.have.any.keys('appJs'); - }); - - it('should return the implied technology', () => { - expect(apps).to.have.any.keys('appImplies'); - }); - - it('should not return the excluded technology', () => { - expect(apps).to.not.have.any.keys('appExcludes'); - }); - - it('should return the confidence value', () => { - assert.equal(apps.appHtml.confidenceTotal, 50); - }); - - it('should return the version number', () => { - assert.equal(apps.appHtml.version, '1'); - }); - - it('should analyze html', async () => { - const html = ` - - - - Page title | Html detection - - - -

Technologies Test Page | Html detection

- - - - - - `; - const wappalyzer = new Wappalyzer(); - wappalyzer.apps = { - "Google Tag Manager": { - "html": [ - "googletagmanager\\.com/ns\\.html[^>]+>", - "" - ] - } - }; - var applications = null; - wappalyzer.driver = { - log () {}, - displayApps (detectedMap) { - applications = detectedMap; - } - }; - - await wappalyzer.analyze({ canonical: 'example.com' }, { html }); - assert.equal(applications['Google Tag Manager'].name, 'Google Tag Manager'); - }); - - it('should analyze scripts', async () => { - const scripts = [ - 'http://www.google-analytics.com/analytics.js', - 'http://example.com/assets/js/jquery.min.js' - ]; - const wappalyzer = new Wappalyzer(); - wappalyzer.apps = { - "Google Analytics": { - "cats": [ - 10 - ], - "script": "google-analytics\\.com\\/(?:ga|urchin|(analytics))\\.js\\;version:\\1?UA:" - }, - "jQuery": { - "script": [ - "jquery(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", - "/([\\d.]+)/jquery(?:\\.min)?\\.js\\;version:\\1", - "jquery.*\\.js(?:\\?ver(?:sion)?=([\\d.]+))?\\;version:\\1" - ] - } - }; - var applications = null; - wappalyzer.driver = { - log () {}, - displayApps (detectedMap) { - applications = detectedMap; - } - }; - - await wappalyzer.analyze({ canonical: 'example.com' }, { scripts }); - assert.equal(applications['Google Analytics'].name, 'Google Analytics'); - assert.equal(applications['jQuery'].name, 'jQuery'); - }); - - it('should analyze headers', async () => { - const headers = { - 'date': [ 'Thu, 01 Feb 2018 11:34:18 GMT' ], - 'connection': [ 'keep-alive' ], - 'x-powered-by': [ 'Express'], - 'etag': [ 'W/125-1jQLmiya7mfec43xR3Eb3pjdu64s' ], - 'content-length': [ '293' ], - 'content-type': [ 'text/html; charset=utf-8' ] - }; - const wappalyzer = new Wappalyzer(); - wappalyzer.apps = { - "Express": { - "headers": { - "X-Powered-By": "^Express$" - } - } - }; - var applications = null; - wappalyzer.driver = { - log () {}, - displayApps (detectedMap) { - applications = detectedMap; - } - }; - - await wappalyzer.analyze({ canonical: 'example.com' }, { headers }); - assert.equal(applications['Express'].name, 'Express'); - }); - - it('should analyze js globals', async () => { - const js = { - 'Moment.js': { 'moment': { '0': true } }, - 'Google Font API': { 'WebFonts': { '0': true } } - }; - const wappalyzer = new Wappalyzer(); - wappalyzer.apps = { - "Moment.js": { - "js": { - "moment": "", - "moment.version": "(.*)\\;version:\\1" - } - }, - "Google Font API": { - "js": { - "WebFonts": "" - } - } - }; - var applications = null; - wappalyzer.driver = { - log () {}, - displayApps (detectedMap) { - applications = detectedMap; - } - }; - - wappalyzer.parseJsPatterns(); - await wappalyzer.analyze({ canonical: 'example.com' }, { js }); - - assert.equal(applications['Google Font API'].name, 'Google Font API'); - assert.equal(applications['Moment.js'].name, 'Moment.js'); - }); - }); -}); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000000000000000000000000000000000..a83b36b5a51c1ee1bb0b885f339fc1cc07121bb8 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2109 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff" + integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw== + dependencies: + "@babel/highlight" "^7.10.1" + +"@babel/generator@^7.10.1": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9" + integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA== + dependencies: + "@babel/types" "^7.10.2" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4" + integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/helper-get-function-arity@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d" + integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-split-export-declaration@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" + integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== + dependencies: + "@babel/types" "^7.10.1" + +"@babel/helper-validator-identifier@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5" + integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw== + +"@babel/highlight@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0" + integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.1", "@babel/parser@^7.7.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0" + integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ== + +"@babel/template@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" + integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" + +"@babel/traverse@^7.7.0": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27" + integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ== + dependencies: + "@babel/code-frame" "^7.10.1" + "@babel/generator" "^7.10.1" + "@babel/helper-function-name" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/parser" "^7.10.1" + "@babel/types" "^7.10.1" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.7.0": + version "7.10.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d" + integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng== + dependencies: + "@babel/helper-validator-identifier" "^7.10.1" + 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" + +"@prantlf/jsonlint@^10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@prantlf/jsonlint/-/jsonlint-10.2.0.tgz#0716001895cc5f0407820ffe9887de5e13e6fa47" + integrity sha512-KMFfds0peWLLfCu3bhClTiEN0tdj/Z86QJvn1awKHws6r+Sx6T3a44Eadz6OvqN6ZpsRkqaRpZxqddvvDAdDZQ== + dependencies: + ajv "6.10.2" + commander "4.0.1" + +"@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", "@types/json-schema@^7.0.4": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@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.3.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== + +adm-zip@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" + integrity sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g== + +agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +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.2: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2: + 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.1.1: + 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.3: + 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" + +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== + +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== + +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" + +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== + +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== + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1: + 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== + +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@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c" + integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA== + +commander@^2.19.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +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= + +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" + +consola@^2.11.3: + version "2.13.0" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.13.0.tgz#5a4dc75e1b1fddbd8b10728e7790a2e54efeeeb7" + integrity sha512-Jw+8qpL0yrpfqH9m90fWoDRQyn8TYU6Aegpl4UofoP81VYvQLoOWMpFw2vQ3U/cyLRRzTc/CyNC6YYVzZFU8Eg== + +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= + +convert-svg-core@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/convert-svg-core/-/convert-svg-core-0.5.0.tgz#e0f05a1774a588d664f5a070fc74ef4a1c448ee6" + integrity sha512-V30vm5h4sHjmjyAr7o/gYAEmdEIsi0sLKKbDigSxplovCzMHTERXSikIOgA8xSllHh0c4gHYP55Pxwgtu9O+3w== + dependencies: + chalk "^2.4.1" + commander "^2.19.0" + file-url "^2.0.2" + get-stdin "^6.0.0" + glob "^7.1.3" + lodash.omit "^4.5.0" + lodash.pick "^4.4.0" + pollock "^0.2.0" + puppeteer "^1.10.0" + tmp "0.0.33" + +convert-svg-to-png@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/convert-svg-to-png/-/convert-svg-to-png-0.5.0.tgz#51a6061ef3da206bc01a96a7617a4d42f9fe1159" + integrity sha512-Pzg2IEirPdN/VXovG9NY8H5Ww3PUEohMcyu9a11E0G0/oVcbPLWQYE3/S6mxpjidqzYr1i5iKLTKCiU9hctKFQ== + dependencies: + convert-svg-core "^0.5.0" + +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= + +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@^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@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +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-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" + +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" + +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" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +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.3: + 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.6.0: + 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.21.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz#8fef77475cc5510801bedc95f84b932f7f334a7c" + integrity sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.3" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.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.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + 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.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa" + integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ== + +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" + +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" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +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= + +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" + +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-url@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/file-url/-/file-url-2.0.2.tgz#e951784d79095127d3713029ab063f40818ca2ae" + integrity sha1-6VF4TXkJUSfTcTApqwY/QIGMoq4= + +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-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.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== + +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" + +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== + +https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +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.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +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, 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== + +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.2.0" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" + integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + +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.1.0" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" + integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + dependencies: + has-symbols "^1.0.1" + +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-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, 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@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +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" + +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== + +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.omit@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" + integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= + +lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + +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" + +mime@^2.0.3: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +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: + 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.0, 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, 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== + +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.1: + 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" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +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" + +pollock@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/pollock/-/pollock-0.2.1.tgz#01273ae3542511492d07f1c10fa53f149b37c6ad" + integrity sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg== + +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== + +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.0, 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== + +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== + +puppeteer@^1.10.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.20.0.tgz#e3d267786f74e1d87cf2d15acc59177f471bbe38" + integrity sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ== + dependencies: + debug "^4.1.0" + extract-zip "^1.6.6" + https-proxy-agent "^2.2.1" + mime "^2.0.3" + progress "^2.0.1" + proxy-from-env "^1.0.0" + rimraf "^2.6.1" + ws "^6.1.0" + +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" + +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" + +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, resolve@^1.17.0: + 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" + +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" + +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.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== + +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.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + 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" + +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" + +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.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, 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= + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +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-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== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +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" + +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= + +v8-compile-cache@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + +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" + +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"