diff --git a/.eslintrc.json b/.eslintrc.json index 711026dbf..37795411d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -3,7 +3,8 @@ "env": { "browser": true, "es6": true, - "amd": true + "amd": true, + "jest": true }, "parser": "babel-eslint", "parserOptions": { diff --git a/.travis.yml b/.travis.yml index 074422267..9e6b09a99 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,11 @@ node_js: - "9" sudo: false +before_install: + - npm i -g npm + install: - - npm install --silent + - npm ci --silent script: - node ./tools/licenses/fetchLicenses.js diff --git a/.tx/config b/.tx/config new file mode 100644 index 000000000..893a35449 --- /dev/null +++ b/.tx/config @@ -0,0 +1,10 @@ +[main] +host = https://www.transifex.com + +[ghostery-8.messages-json] +file_filter = _localesmessages.json +minimum_perc = 0 +source_file = _locales/en/messages.json +source_lang = en_US +type = CHROME + diff --git a/CHANGELOG.md b/CHANGELOG.md index 11e4abbf6..5ff73f873 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +### GHOSTERY 8.1.2 (April 19, 2018) + ++ Remove WebSocket filter scheme support for older versions of Chrome and FF ++ Fix Human Web endpoint URLs + +### GHOSTERY 8.1.1 (April 13, 2018) + ++ New surrogate for 'NetRatings SiteCensus' tracker that locks up Chrome when blocked (Issue #11) ++ Site-specific tracker allow now bypasses Anti-Tracking ++ Adds Cliqz browser compatibility ++ Improved German language translations for better UI ++ Fixes inconsistency in install_complete metric ++ Removed scroll bar in Simple View ++ Updated CONTRIBUTING (Issue #6) + ### GHOSTERY 8.1.0 (March 8, 2017) + Ghostery is now open source!! diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 000000000..b159fe127 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,25 @@ +# Ghostery CODEOWNERS +# Each line is a file pattern followed by one or more owners, +# the last matching pattern has the most precendence. + +# Core Ghostery team +* @ghostery/ghostery + +# CMP / Metrics / WebRequest +/src/classes/ABTest.js @jsignanini +/src/classes/CMP.js @jsignanini +/src/classes/EventHandlers.js @jsignanini +/src/classes/Metrics.js @jsignanini + +# Background +/src/background.js @zarembsky + +# Setup App +/app/setup/ @IAmThePan + +# Build Tools +webpack.config.js @trickpattyFH20 +.eslintrc.json @trickpattyFH20 + +# Unit Tests +/test/ @IAmThePan diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b3e13a6ca..251d5d7d4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,10 +21,10 @@ You can also submit feature requests to the [issue tracker](../../issues). Befor + [Fork](https://help.github.com/articles/fork-a-repo/) the repository. Make sure to keep your fork [synced](https://help.github.com/articles/syncing-a-fork/) with the source repo + When you are ready to begin working on a new feature, cut a new branch from "develop" with the prefix "feature/" (e.g. "feature/name-of-new-feature"). Check out the [Gitflow branching model](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) for more information. + Code style should follow the [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript) -+ There is a [.editorconfig](.editorconfig) file that you can use with your IDE ++ There is an [.editorconfig](.editorconfig) file that you can use with your IDE + Refer to the [README](../../README.md) for details on how to install and build -### Making Pull Requests +### Submitting Pull Requests + Sync the develop branch in your fork with the develop branch from the source repo + Merge your feature branch into "develop" @@ -34,6 +34,10 @@ You can also submit feature requests to the [issue tracker](../../issues). Befor + Write unit tests for new features and make sure all tests are passing (`npm run test.unit`) + If your pull request has multiple commits or commits that are not meaningful, consider [squashing](https://git-scm.com/docs/git-rebase#_interactive_mode) them +#### Submitting Patches via Email + +If you are unable to submit pull requests on GitHub, we will also accept patches via [email](mailto:info@ghostery.com). For example, you can generate a patch from your last commit using `git format-patch HEAD^`. See [git-format-patch](https://git-scm.com/docs/git-format-patch) for more info. + ### Code of Conduct See [CODE OF CONDUCT](CODE-OF-CONDUCT.md) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..b1fa910fe --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM node:8 + +RUN curl https://s3.amazonaws.com/cdncliqz/update/ghostery/moab/moab_8319dab > /bin/moab && \ + chmod +x /bin/moab + +ARG UID +ARG GID +RUN groupadd jenkins -g $GID \ + && useradd -ms /bin/bash jenkins -u $UID -g $GID + +USER jenkins +COPY package.json /home/jenkins/ +COPY package-lock.json /home/jenkins/ +RUN cd /home/jenkins/ && npm install diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..908501d10 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,141 @@ + +properties([ + parameters([ + booleanParam(name: 'WITH_CLIQZ_MASTER', defaultValue: false, description: 'Builds with latest Cliqz master') + ]) +]) + +node('docker') { + stage ('Checkout') { + checkout scm + } + + def img + def artifacts = [] + def uploadPath = "cdncliqz/update/ghostery/${env.BRANCH_NAME}" + + stage('Build Docker Image') { + img = docker.build('ghostery/build', '--build-arg UID=`id -u` --build-arg GID=`id -g` .') + // clean workdir + sh 'rm -rf build ghostery-*' + } + + stage('Build Extension') { + img.inside() { + withCache { + sh 'rm -rf build' + if (params.WITH_CLIQZ_MASTER) { + sh 'npm install --save https://s3.amazonaws.com/cdncliqz/update/edge/ghostery/master/latest.tgz' + } + // make browser-core noisy + sh 'sed -i \'s/global.__DEV__/true/1\' node_modules/browser-core/build/core/console.js' + withGithubCredentials { + sh 'moab makezip' + } + // get the name of the firefox build + artifacts.add(sh(returnStdout: true, script: 'ls build/ | grep firefox').trim()) + } + } + } + + stage('Package Chrome') { + withGithubCredentials { + def chromeArtifact = sh(returnStdout: true, script: 'ls build/ | grep chrome').trim().replace('.zip', '') + echo "${chromeArtifact}" + sh """#!/bin/bash -l + set -x + set -e + rm -rf ${chromeArtifact}/ + mkdir -p ${chromeArtifact} + unzip build/${chromeArtifact}.zip -d ${chromeArtifact} + tools/crxmake.sh ${chromeArtifact}/ ~/.ssh/id_rsa + mv ${chromeArtifact}.crx build/ + """ + artifacts.add("${chromeArtifact}.crx") + } + } + + stage('Upload Builds') { + withS3Credentials { + echo "${env.BRANCH_NAME}/${env.BUILD_NUMBER}" + def uploadLocation = "s3://${uploadPath}/" + currentBuild.description = uploadLocation + artifacts.each { + sh "aws s3 cp build/${it} ${uploadLocation} --acl public-read" + } + } + } + + if (env.BRANCH_NAME == 'develop') { + stage('Publish Beta') { + artifacts.each { + if (it.contains('firefox')) { + // firefox artifact (zip) - sign for cliqz_beta + def artifactUrl = "https://s3.amazonaws.com/${uploadPath}/${it}" + build job: 'addon-repack', parameters: [ + string(name: 'XPI_URL', value: artifactUrl), + string(name: 'XPI_SIGN_CREDENTIALS', value: '41572f9c-06aa-46f0-9c3b-b7f4f78e9caa'), + string(name: 'XPI_SIGN_REPO_URL', value: 'git@github.com:cliqz/xpi-sign.git'), + string(name: 'CHANNEL', value: 'browser_beta') + ] + } else if (it.contains('chrome')) { + withS3Credentials { + // publish chrome builds, also with 'latest' tag + def publishUrl = 's3://cdncliqz/update/ghostery_beta/chrome'; + sh "aws s3 cp build/${it} ${publishUrl}/${it} --acl public-read" + sh "aws s3 cp build/${it} ${publishUrl}/latest.crx --acl public-read" + } + } + } + } + } +} + +def withCache(Closure body=null) { + def cleanCache = { + sh 'rm -fr node_modules' + } + + try { + cleanCache() + // Main dependencies + sh 'cp -fr /home/jenkins/node_modules .' + + body() + } finally { + cleanCache() + } +} + +def withGithubCredentials(Closure body) { + withCredentials([sshUserPrivateKey( + credentialsId: '6739a36f-0b19-4f4d-b6e4-b01d0bc2e175', + keyFileVariable: 'GHOSTERY_CI_SSH_KEY') + ]) { + // initialise git+ssh access using ghostery-ci credentials + try { + sh '''#!/bin/bash -l + set -x + set -e + mkdir -p ~/.ssh + cp $GHOSTERY_CI_SSH_KEY ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts + ''' + body() + } finally { + sh 'rm -f ~/.ssh/id_rsa' + sh 'rm -f ~/.ssh/known_hosts' + } + } +} + +def withS3Credentials(Closure body) { + withCredentials([[ + $class: 'UsernamePasswordMultiBinding', + credentialsId: '06ec4a34-9d01-46df-9ff8-64c79eda8b14', + passwordVariable: 'AWS_SECRET_ACCESS_KEY', + usernameVariable: 'AWS_ACCESS_KEY_ID']]) { + body() + } +} \ No newline at end of file diff --git a/README.md b/README.md index f55fbd2a4..c7371014e 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,13 @@ $ npm run lint $ npm run lint.raw -- src/utils/matcher.js ``` +```sh +# Disable lint +$ NO_LINT=true npm run build.dev +# or +$ npm run build.dev -- --env.nolint +``` + ## Build Docs ```sh # Build JSDoc files to ./docs @@ -81,6 +88,18 @@ Ghostery implements the following open-source products from [Cliqz](https://cliq [**Ad Blocker**](https://cliqz.com/en/whycliqz/adblocking) + [GitHub](https://github.com/cliqz-oss/adblocker) +[**MyOffrz**](https://cliqz.com/en/cliqz-angebote) ++ [GitHub](https://github.com/cliqz-oss/browser-core/blob/master/modules/offers-v2) + +### Building Cliqz Modules for Ghostery +Cliqz modules are pre-built and included under the `browser-core` NPM dependency in [package.json](package.json). To reproduce this build process, grab the appropriate Ghostery release (v7.x.x) from the [browser-core](https://github.com/cliqz-oss/browser-core/releases) project. + +```sh +$ npm install +$ ./fern.js build configs/ghostery.js --no-maps --environment=production +$ ./fern.js pack configs/ghostery.js +``` + ## Compatibility + Firefox: 52+ diff --git a/_locales/de/messages.json b/_locales/de/messages.json index efa1d5919..6219b0bc7 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -456,10 +456,10 @@ "message": "Navigieren Sie zu einer anderen Seite und ich verspreche, dass ich liefern werde." }, "summary_trust_site": { - "message": "Website vertrauen" + "message": "Tracker entsperren" }, "summary_restrict_site": { - "message": "Website nicht vertrauen" + "message": "Tracker blockieren" }, "summary_undo": { "message": "Rückgängig machen" @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Ghostery Rewards" }, - "panel_detail_rewards_text": { - "message": "Funktion ist demnächst verfügbar." - }, "panel_detail_premium_title": { "message": "Ghostery Premium" }, @@ -856,7 +853,7 @@ "message": "Nie" }, "settings_seconds": { - "message": "Sekunden" + "message": "Sek." }, "settings_hide_alert_trusted": { "message": "Lila Box auf vertrauenswürdigen Websites verbergen" @@ -1110,6 +1107,9 @@ "tooltip_anti_track_body": { "message": "Anonymisieren Sie entsperrte und unbekannte Tracker für besseren Browsing-Schutz." }, + "tooltip_body_in_cliqz": { + "message": "Bereits als Standard in Cliqz aktiviert." + }, "tooltip_ad_block": { "message": "Besserer Werbeblocker" }, @@ -1289,26 +1289,6 @@ "setup_login_view_password_error": { "message": "Verwenden Sie zwischen 8 und 50 Zeichen." }, - "setup_login_view_terms_error": { - "message": "Sie müssen dies akzeptieren." - }, - "setup_login_view_terms": { - "message": "Ich erkläre mich mit Ghosterys $LINK_PP_START$Datenschutzrichtlinie$LINK_PP_END$ und $LINK_TERMS_START$Benutzungsbedingungen$LINK_TERMS_END$ einverstanden", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "Haben Sie noch kein Benutzerkonto? Erstellen Sie eins." }, @@ -1422,7 +1402,7 @@ "message": "Was ist neu?" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Ghostery installieren" }, "global_settings_saved": { "message": "Globale Einstellungen gespeichert" @@ -1461,7 +1441,7 @@ "message": "Meine Analysedaten teilen, um Ghostery noch leistungsstärker zu machen." }, "setup_feature_active_in_cliqz": { - "message": "Diese Funktion ist in Cliqz bereits standardmäßig aktiviert. $LINK_START$Weitere Informationen$LINK_END$", + "message": "Bereits als Standard in Cliqz aktiviert. $LINK_START$Mehr erfahren.$LINK_END$", "placeholders": { "link_start": { "content": "" @@ -1481,5 +1461,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "Release-Hinweise für alle Updates ansehen" + } +} \ No newline at end of file diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 7082cd785..a3b51caf8 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -455,30 +455,63 @@ "summary_description_not_scanned_2": { "message": "Navigate to another page and I promise I'll deliver the goods." }, + "summary_custom_settings": { + "message": "Custom Settings" + }, "summary_trust_site": { "message": "Trust Site" }, + "summary_trust_site_active": { + "message": "Site Trusted" + }, "summary_restrict_site": { "message": "Restrict Site" }, + "summary_restrict_site_active": { + "message": "Site Restricted" + }, "summary_undo": { "message": "Undo" }, "summary_pause_ghostery": { + "message": "Pause Ghostery" + }, + "summary_pause_ghostery_tooltip": { + "message": "Pause Ghostery extension." + }, + "summary_pause_ghostery_ab_pause": { "message": "Pause" }, "pause_30_min": { "message": "for 30 min" }, + "pause_30_min_condensed": { + "message": "30 mins" + }, "pause_1_hour": { "message": "for 1 hour" }, + "pause_1_hour_condensed": { + "message": "1 hr" + }, "pause_24_hours": { "message": "for 24 hours" }, + "pause_24_hours_condensed": { + "message": "24 hrs" + }, "summary_resume_ghostery": { + "message": "Resume Ghostery" + }, + "summary_resume_ghostery_tooltip": { + "message": "Ghostery extension paused. Click to resume." + }, + "summary_resume_ghostery_ab_pause": { "message": "Resume" }, + "summary_show_menu": { + "message": "show menu" + }, "summary_map_these_trackers": { "message": "Map These Trackers" }, @@ -645,6 +678,9 @@ "tracker_plural": { "message": "trackers" }, + "tracker_found": { + "message": "found" + }, "panel_signin_success": { "message": "You are now signed in as " }, @@ -720,9 +756,21 @@ "panel_detail_rewards_title": { "message": "Ghostery Rewards" }, - "panel_detail_rewards_text": { + "panel_detail_rewards_coming_soon": { "message": "Feature coming soon." }, + "panel_detail_rewards_cliqz_text": { + "message": "Feature already active in the Cliqz MyOffrz control panel." + }, + "panel_detail_rewards_loading": { + "message": "Loading Rewards..." + }, + "panel_detail_rewards_none_found": { + "message": "No Rewards found" + }, + "panel_detail_rewards_off": { + "message": "Ghostery Rewards is OFF" + }, "panel_detail_premium_title": { "message": "Ghostery Premium" }, @@ -756,6 +804,12 @@ "panel_header_verify_account": { "message": "Verify Account" }, + "panel_header_simple_view": { + "message": "Simple View" + }, + "panel_header_detailed_view": { + "message": "Detailed View" + }, "password_characters_requirements": { "message": "Only these special characters are allowed: !@#$%^&*=+()<>{}[];:,./?" }, @@ -1030,7 +1084,10 @@ "message": "Search by tracker" }, "page_load": { - "message": "Page Load" + "message": "Page Load:" + }, + "trackers_blocked": { + "message": "Trackers Blocked:" }, "settings_trusted_restricted_sites": { "message": "Trust & Restrict" @@ -1140,17 +1197,65 @@ "settings_filter_new": { "message": "New Since Last Update" }, + "alert_ghostery_paused": { + "message": "Ghostery extension has been paused." + }, + "alert_ghostery_resumed": { + "message": "Ghostery extension has been resumed." + }, + "alert_anti_track_on": { + "message": "Enhanced Anti-Tracking ON. Personal data will be anonymized." + }, + "alert_anti_track_off": { + "message": "Enhanced Anti-Tracking OFF. Personal data will not be anonymized." + }, + "alert_ad_block_on": { + "message": "Enhanced Ad-Blocking ON. Advertisements will be blocked." + }, + "alert_ad_block_off": { + "message": "Enhanced Ad-Blocking OFF. Advertisements will not be blocked." + }, + "alert_smart_block_on": { + "message": "Smart Blocking ON. Tracker blocking will be adjusted to optimize page performance." + }, + "alert_smart_block_off": { + "message": "Smart Blocking OFF. Tracker blocking will not be automatically adjusted." + }, + "alert_reload": { + "message": "Reload to see changes." + }, + "alert_site_trusted": { + "message": "Site whitelisted. Trackers will be allowed and Anti-Tracking disabled on this site." + }, + "alert_site_trusted_off": { + "message": "Site no longer whitelisted." + }, + "alert_site_restricted": { + "message": "Site blacklisted. Trackers will be blocked and Anti-Tracking enabled on this site." + }, + "alert_site_restricted_off": { + "message": "Site no longer blacklisted." + }, "tooltip_anti_track": { "message": "Enhanced Anti-Tracking" }, "tooltip_anti_track_body": { - "message": "Anonymize unblocked and unknown trackers for greater browsing protection." + "message": "Anonymize personal data for greater protection." + }, + "tooltip_anti_track_body_on": { + "message": "Personal data points anonymized." + }, + "tooltip_body_in_cliqz": { + "message": "Feature already active in Cliqz by default." }, "tooltip_ad_block": { "message": "Enhanced Ad Blocking" }, "tooltip_ad_block_body": { - "message": "Block advertisements on websites you visit." + "message": "Block advertisements." + }, + "tooltip_ad_block_body_on": { + "message": "Advertisements have been blocked." }, "tooltip_smart_block": { "message": "Smart Blocking" @@ -1158,11 +1263,23 @@ "tooltip_smart_block_body": { "message": "Automatically block and unblock trackers to optimize page performance." }, + "tooltip_smart_block_body_on": { + "message": "Tracker blocking adjusted to optimize page performance." + }, "tooltip_trust": { - "message": "Always allow trackers on this site." + "message": "Always allow trackers & disable Anti-Tracking on this site." + }, + "tooltip_trust_on": { + "message": "Trackers allowed and Anti-Tracking disabled on site. Click to Undo." }, "tooltip_restrict": { - "message": "Always block trackers on this site." + "message": "Always block trackers & protect my personal data on this site." + }, + "tooltip_restrict_on": { + "message": "Trackers blocked and Anti-Tracking enabled on site. Click to Undo." + }, + "tooltip_custom_settings": { + "message": "Use my selected tracker settings." }, "tooltip_pause": { "message": "Pause Ghostery" @@ -1236,7 +1353,7 @@ "message": "One-Click Setup" }, "setup_choice_view_share_data": { - "message": "Share my analytics and Human Web data to improve Ghostery’s performance." + "message": "Participate in Ghostery Rewards and share Human Web & analytics data." }, "setup_choice_view_share_data_no_human_web": { "message": "Share my analytics data to improve Ghostery’s performance." @@ -1250,6 +1367,23 @@ "setup_choice_view_answer_questions": { "message": "Choose my own settings by answering a few short questions." }, + "setup_choice_view_legal": { + "message": "By installing Ghostery, you agree to Ghostery's $LINK_PP_START$Privacy Policy$LINK_PP_END$ and $LINK_TERMS_START$Terms of Use$LINK_TERMS_END$.", + "placeholders": { + "link_pp_start": { + "content": "" + }, + "link_pp_end": { + "content": "" + }, + "link_terms_start": { + "content": "" + }, + "link_terms_end": { + "content": "" + } + } + }, "setup_blocking_view_title": { "message": "Ghostery can block trackers to make your browsing cleaner, faster, and safer. What would you like to block?" }, @@ -1342,26 +1476,6 @@ "setup_login_view_password_error": { "message": "Use between 8 and 50 characters." }, - "setup_login_view_terms_error": { - "message": "You must accept this." - }, - "setup_login_view_terms": { - "message": "I agree to Ghostery's $LINK_PP_START$Privacy Policy$LINK_PP_END$ and $LINK_TERMS_START$Terms of Use$LINK_TERMS_END$", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "Don't have an account? Create one." }, @@ -1372,10 +1486,10 @@ "message": "Signed in as" }, "setup_data_view_title": { - "message": "Would you like to help improve Ghostery?" + "message": "Would you like to support Ghostery?" }, "setup_data_view_desc": { - "message": "We use anonymous analytics and Human Web data to improve Ghostery’s performance, without collecting any personal data. $LINK_START$Learn more$LINK_END$.", + "message": "We use anonymous analytics and Human Web data to improve Ghostery’s performance, and provide Rewards without collecting any personal data. $LINK_START$Learn more$LINK_END$.", "placeholders": { "link_start": { "content": "" @@ -1485,5 +1599,101 @@ }, "setup_upgrade_button_go": { "message": "Set Me Up" + }, + "enable_when_paused": { + "message": "To use this function, Resume Ghostery." + }, + "enable_when_whitelisted": { + "message": "To use this function, undo Trust Site" + }, + "enable_when_blacklisted": { + "message": "To use this function, undo Restrict Site." + }, + "enable_when_not_scanned": { + "message": "To use this function, navigate to another page." + }, + "rewards_new_text": { + "message": "new Reward was discovered" + }, + "rewards_copy_code": { + "message": "copy code" + }, + "rewards_code_copied": { + "message": "code copied" + }, + "rewards_expires_in": { + "description": "example: Expires in 8 minutes. TYPE will be rewards_expires_in_TYPE listed below.", + "message": "Expires in $COUNT$ $TYPE$", + "placeholders": { + "count": { + "content": "$1" + }, + "type": { + "content": "$2" + } + } + }, + "rewards_expires_in_days": { + "message": "days" + }, + "rewards_expires_in_hours": { + "message": "hours" + }, + "rewards_expires_in_mins": { + "message": "minutes" + }, + "rewards_expires_in_secs": { + "message": "seconds" + }, + "rewards_terms_conditions": { + "message": "Terms & Conditions" + }, + "rewards_disable": { + "message": "Turn off Ghostery rewards" + }, + "rewards_disable_notification": { + "message": "Ghostery Rewards is now off. You can always turn it on in Ghostery Settings or in the Ghostery Dashboard." + }, + "rewards_disable_confirm": { + "message": "OK, got it." + }, + "rewards_about": { + "message": "About Ghostery Rewards" + }, + "rewards_settings": { + "message": "Ghostery Rewards Settings" + }, + "rewards_delete": { + "message": "Delete this reward" + }, + "rewards_first_prompt": { + "message": "Would you like to continue to Ghostery Rewards?" + }, + "rewards_second_prompt": { + "message": "Are you sure you would like to opt-out of Ghostery Rewards?" + }, + "rewards_yes": { + "message": "yes" + }, + "rewards_no": { + "message": "no" + }, + "rewards_on": { + "message": "on" + }, + "rewards_off": { + "message": "off" + }, + "rewards_on_toast_notification": { + "message": "Ghostery Rewards is ON" + }, + "rewards_off_toast_notification": { + "message": "Ghostery Rewards is OFF" + }, + "rewards_code_copied_toast_notification": { + "message": "Rewards code copied!" + }, + "rewards_learn_more": { + "message": "Learn More" } } diff --git a/_locales/es/messages.json b/_locales/es/messages.json index 5c28745d0..c1cd736dc 100644 --- a/_locales/es/messages.json +++ b/_locales/es/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Recompensas de Ghostery" }, - "panel_detail_rewards_text": { - "message": "Pronto tendrás esta función." - }, "panel_detail_premium_title": { "message": "Ghostery Premium" }, @@ -856,7 +853,7 @@ "message": "Nunca" }, "settings_seconds": { - "message": "segundos" + "message": "s" }, "settings_hide_alert_trusted": { "message": "Ocultar el cuadro púrpura en sitios web de confianza" @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "Usa entre 8 y 50 caracteres." }, - "setup_login_view_terms_error": { - "message": "Debes aceptar esto." - }, - "setup_login_view_terms": { - "message": "Acepto la $LINK_PP_START$ política de privacidad $LINK_PP_END$ y las $LINK_TERMS_START$ condiciones de uso $LINK_TERMS_END$ de Ghostery", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "¿No tienes una cuenta? Crea una." }, @@ -1422,7 +1399,7 @@ "message": "¿Qué novedades hay?" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Configurar Ghostery" }, "global_settings_saved": { "message": "Ajustes globales guardados" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "Consulte las notas de lantamiento para todas las actualizaciones" + } +} \ No newline at end of file diff --git a/_locales/fr/messages.json b/_locales/fr/messages.json index fb105d401..ab84ba923 100644 --- a/_locales/fr/messages.json +++ b/_locales/fr/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Récompenses Ghostery" }, - "panel_detail_rewards_text": { - "message": "Option bientôt disponible." - }, "panel_detail_premium_title": { "message": "Ghostery Premium" }, @@ -856,7 +853,7 @@ "message": "Jamais" }, "settings_seconds": { - "message": "secondes" + "message": "s" }, "settings_hide_alert_trusted": { "message": "Masquer la case violette sur les sites de confiance" @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "Utilisez entre 8 et 50 caractères." }, - "setup_login_view_terms_error": { - "message": "Vous devez accepter ceci avant de pouvoir continuer." - }, - "setup_login_view_terms": { - "message": "J'accepte la $LINK_PP_START$Politique de confidentialité$LINK_PP_END$ et les $LINK_TERMS_START$Conditions d'utilisation$LINK_TERMS_END$ de Ghostery", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "Vous n'avez pas de compte ? Créez-en un." }, @@ -1422,7 +1399,7 @@ "message": "Procédez à l'installation" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Installer Ghostery" }, "global_settings_saved": { "message": "Paramètres globaux sauvegardés" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "Voir les notes de mise à jour pour connaître toutes les nouveautés" + } +} \ No newline at end of file diff --git a/_locales/hu/messages.json b/_locales/hu/messages.json index 07339a603..70243aac6 100644 --- a/_locales/hu/messages.json +++ b/_locales/hu/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Ghostery jutalmak" }, - "panel_detail_rewards_text": { - "message": "Funkció hamarosan érkezik." - }, "panel_detail_premium_title": { "message": "Ghostery Prémium" }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "8–50 karaktert használjon." }, - "setup_login_view_terms_error": { - "message": "Önnek ezt el kell fogadnia." - }, - "setup_login_view_terms": { - "message": "Egyetértek a Ghostery $LINK_PP_START$Adatvédelmi Szabályzatával$LINK_PP_END$ és $LINK_TERMS_START$Felhasználási Feltételeivel$LINK_TERMS_END$", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "Nem rendelkezik fiókkal? Hozzon létre egyet." }, @@ -1422,7 +1399,7 @@ "message": "Mik az újdonságok?" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "A Ghostery beállítása" }, "global_settings_saved": { "message": "Globális beállítások mentve" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "Az összes" + } +} \ No newline at end of file diff --git a/_locales/it/messages.json b/_locales/it/messages.json index ac92f3732..03a2c2e8f 100644 --- a/_locales/it/messages.json +++ b/_locales/it/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Ricompense Ghostery" }, - "panel_detail_rewards_text": { - "message": "Funzionalità presto disponibile." - }, "panel_detail_premium_title": { "message": "Ghostery Premium" }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "Utilizza tra 8 e 50 caratteri." }, - "setup_login_view_terms_error": { - "message": "Devi accettarli." - }, - "setup_login_view_terms": { - "message": "Accetto l'$LINK_PP_START$Informativa sulla Privacy$LINK_PP_END$ e i $LINK_TERMS_START$Termini di Utilizzo$LINK_TERMS_END$ di Ghostery.", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "Non hai un account? Creane uno." }, @@ -1422,7 +1399,7 @@ "message": "Le novità" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Configura Ghostery" }, "global_settings_saved": { "message": "Impostazioni Globali Salvate" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "Vedi le note di rilascio per tutti gli aggiornamenti" + } +} \ No newline at end of file diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json index e63a3b380..f97d86796 100644 --- a/_locales/ja/messages.json +++ b/_locales/ja/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Ghostery報酬" }, - "panel_detail_rewards_text": { - "message": "近日開始する機能です。" - }, "panel_detail_premium_title": { "message": "Ghosteryプレミアム" }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "8~50文字を使用してください。" }, - "setup_login_view_terms_error": { - "message": "これを承認する必要があります。" - }, - "setup_login_view_terms": { - "message": "Ghosteryの$LINK_PP_START$プライバシーポリシーPrivacy Policy$LINK_PP_END$と$LINK_TERMS_START$利用規約$LINK_TERMS_END$に同意します", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "アカウントをお持ちでないですか?アカウントを作成してください。" }, @@ -1422,7 +1399,7 @@ "message": "最新情報" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Ghosteryをセットアップ" }, "global_settings_saved": { "message": "グローバル設定が保存されました" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "すべての更新情報についてはリリースノートをご覧ください" + } +} \ No newline at end of file diff --git a/_locales/ko/messages.json b/_locales/ko/messages.json index f736ce1e9..f7495a9fc 100644 --- a/_locales/ko/messages.json +++ b/_locales/ko/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Ghostery 리워드 " }, - "panel_detail_rewards_text": { - "message": "기능이 곧 제공됩니다." - }, "panel_detail_premium_title": { "message": "Ghostery 프리미엄 " }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "8자에서 50자까지 사용할 수 있습니다." }, - "setup_login_view_terms_error": { - "message": "이 항목을 수락해야 합니다. " - }, - "setup_login_view_terms": { - "message": "Ghostery의 $LINK_PP_START$개인정보 보호정책$LINK_PP_END$ 및 $LINK_TERMS_START$사용 약관$LINK_TERMS_END$에 동의합니다 ", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "계정이 있으십니까? 계정 만들기." }, @@ -1422,7 +1399,7 @@ "message": "새로운 소식 " }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Ghostery 설정 " }, "global_settings_saved": { "message": "전역 설정 저장됨" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "모든 업데이트 내용은 릴리스 노트를 참조하십시오 " + } +} \ No newline at end of file diff --git a/_locales/nl/messages.json b/_locales/nl/messages.json index 93b297064..972dfee91 100644 --- a/_locales/nl/messages.json +++ b/_locales/nl/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Ghostery Rewards" }, - "panel_detail_rewards_text": { - "message": "Functie binnenkort mogelijk." - }, "panel_detail_premium_title": { "message": "Ghostery Premium" }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "Gebruik tussen 8 en 50 karakters." }, - "setup_login_view_terms_error": { - "message": "Je moet dit aanvaarden." - }, - "setup_login_view_terms": { - "message": "Ik aanvaard Ghostery's $LINK_PP_START$Privacybeleid$LINK_PP_END$ en de $LINK_TERMS_START$Gebruikersvoorwaarden$LINK_TERMS_END$", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "Heb je geen account? Maak er een aan." }, @@ -1422,7 +1399,7 @@ "message": "Actueel" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Ghostery Instellen" }, "global_settings_saved": { "message": "Algemene Instellingen Opgeslagen" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "Bekijk release notes voor alle updates" + } +} \ No newline at end of file diff --git a/_locales/pl/messages.json b/_locales/pl/messages.json index ea24b2a3a..1a0ba4a6b 100644 --- a/_locales/pl/messages.json +++ b/_locales/pl/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Nagrody Ghostery" }, - "panel_detail_rewards_text": { - "message": "Funkcja dostępna niebawem." - }, "panel_detail_premium_title": { "message": "Ghostery Premium" }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "Użyj od 8 do 50 znaków." }, - "setup_login_view_terms_error": { - "message": "Musisz wyrazić na to zgodę." - }, - "setup_login_view_terms": { - "message": "Wyrażam zgodę na obowiązującą w Ghostery $LINK_PP_START$Politykę prywatności$LINK_PP_END$ oraz $LINK_TERMS_START$Warunki użytkowania$LINK_TERMS_END$", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "Nie masz konta? Utwórz je." }, @@ -1422,7 +1399,7 @@ "message": "Co nowego?" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Konfiguruj Ghostery" }, "global_settings_saved": { "message": "Ustawienia globalne zapisane" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "Zobacz informacje o wersji dla wszystkich aktualizacji" + } +} \ No newline at end of file diff --git a/_locales/pt_BR/messages.json b/_locales/pt_BR/messages.json index e3a0186fc..2ef756a48 100644 --- a/_locales/pt_BR/messages.json +++ b/_locales/pt_BR/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Recompensas do Ghostery" }, - "panel_detail_rewards_text": { - "message": "Recurso vindo em breve." - }, "panel_detail_premium_title": { "message": "Ghostery Premium" }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "Use entre 8 e 50 caracteres." }, - "setup_login_view_terms_error": { - "message": "Você precisa aceitar." - }, - "setup_login_view_terms": { - "message": "Concorco com a $LINK_PP_START$Privacy Policy$LINK_PP_END$ and $LINK_TERMS_START$Terms of Use$LINK_TERMS_END$", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "Não tem uma conta? Crie uma." }, @@ -1422,7 +1399,7 @@ "message": "O que há de novo?" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Configurar o Ghostery" }, "global_settings_saved": { "message": "Configurações Globais Salvas" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "Ver notas de lançamento para todas as atualizações" + } +} \ No newline at end of file diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json index 92f2036f1..56a99676d 100644 --- a/_locales/ru/messages.json +++ b/_locales/ru/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Вознаграждения Ghostery" }, - "panel_detail_rewards_text": { - "message": "Функция скоро появится." - }, "panel_detail_premium_title": { "message": "Премиум Ghostery" }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "Используйте от 8 до 50 символов." }, - "setup_login_view_terms_error": { - "message": "Вы должны принять это." - }, - "setup_login_view_terms": { - "message": "Я согласен с $LINK_PP_START$Политикой конфиденциальности$LINK_PP_END$ и $LINK_TERMS_START$Условиями использования$LINK_TERMS_END$ Ghostery", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "Нет учетной записи? Создать." }, @@ -1422,7 +1399,7 @@ "message": "Что нового?" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "Настроить Ghostery" }, "global_settings_saved": { "message": "Глобальные настройки сохранены" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "См. примечания к выпуску для получения информации обо всех обновлениях" + } +} \ No newline at end of file diff --git a/_locales/zh_CN/messages.json b/_locales/zh_CN/messages.json index 4afab4cff..a2a61dc84 100644 --- a/_locales/zh_CN/messages.json +++ b/_locales/zh_CN/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Ghostery 奖励" }, - "panel_detail_rewards_text": { - "message": "功能即将推出。" - }, "panel_detail_premium_title": { "message": "Ghostery 高级版" }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "请使用 8 到 50 个字符。" }, - "setup_login_view_terms_error": { - "message": "您必须选中此复选框。" - }, - "setup_login_view_terms": { - "message": "我同意 Ghostery 的$LINK_PP_START$隐私政策$LINK_PP_END$和$LINK_TERMS_START$使用条款$LINK_TERMS_END$", - "placeholders": { - "link_pp_start": { - "content": "" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "没有帐户?创建一个。" }, @@ -1422,7 +1399,7 @@ "message": "有什么新变化?" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "设置 Ghostery" }, "global_settings_saved": { "message": "全局设置已保存" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "查看所有更新的版本说明" + } +} \ No newline at end of file diff --git a/_locales/zh_TW/messages.json b/_locales/zh_TW/messages.json index 8a044f9c0..73e53e046 100644 --- a/_locales/zh_TW/messages.json +++ b/_locales/zh_TW/messages.json @@ -699,9 +699,6 @@ "panel_detail_rewards_title": { "message": "Ghostery 獎賞" }, - "panel_detail_rewards_text": { - "message": "即將添加的功能" - }, "panel_detail_premium_title": { "message": "Ghostery 高級版" }, @@ -1289,26 +1286,6 @@ "setup_login_view_password_error": { "message": "使用 8 至 50 個字符。" }, - "setup_login_view_terms_error": { - "message": "您必須接受此項。" - }, - "setup_login_view_terms": { - "message": "我同意 Ghostery 的$LINK_PP_START$隱私政策$LINK_PP_END$ 及 $LINK_TERMS_START$使用條款$LINK_TERMS_END$", - "placeholders": { - "link_pp_start": { - "content": "a href=\"https://www.ghostery.com/about-ghostery/browser-extension-privacy-policy/\" target=\"_blank\">" - }, - "link_pp_end": { - "content": "" - }, - "link_terms_start": { - "content": "" - }, - "link_terms_end": { - "content": "" - } - } - }, "setup_login_view_create_account": { "message": "沒有帳戶?創建一個。" }, @@ -1422,7 +1399,7 @@ "message": "最新動態。" }, "panel_help_setup": { - "message": "Set Up Ghostery" + "message": "安裝 Ghostery" }, "global_settings_saved": { "message": "全球設定已儲存" @@ -1481,5 +1458,8 @@ "content": "" } } - } -} + }, + "panel_about_release_notes": { + "message": "閱讀發佈說明以了解所有更新" + } +} \ No newline at end of file diff --git a/app/content-scripts/click_to_play.js b/app/content-scripts/click_to_play.js index 0102ff95d..96a7c1fd1 100644 --- a/app/content-scripts/click_to_play.js +++ b/app/content-scripts/click_to_play.js @@ -161,17 +161,17 @@ const Click2PlayContentScript = (function (win, doc) { return false; } - const { name } = request; - const reqMsg = request.msg; - + const { name, message } = request; log('click_to_play.js received message', name); if (name === 'c2p') { - // queue Click-to-Play data so that we process multiple Twitter buttons at once, for example - C2P_DATA[reqMsg.app_id] = [reqMsg.app_id, reqMsg.data, reqMsg.html]; + if (message) { + // queue Click-to-Play data so that we process multiple Twitter buttons at once, for example + C2P_DATA[message.app_id] = [message.app_id, message.data, message.html]; - if (doc.readyState === 'complete') { - applyC2P(reqMsg.app_id, reqMsg.data, reqMsg.html); + if (doc.readyState === 'complete') { + applyC2P(message.app_id, message.data, message.html); + } } } diff --git a/app/content-scripts/notifications.js b/app/content-scripts/notifications.js index 23332fbfe..41256e0ae 100644 --- a/app/content-scripts/notifications.js +++ b/app/content-scripts/notifications.js @@ -731,8 +731,7 @@ const NotificationsContentScript = (function (win, doc) { 'showCMPMessage', 'showBrowseWindow' ]; - const { name } = request; - const reqMsg = request.message; + const { name, message } = request; log('notifications.js received message', name); @@ -744,29 +743,29 @@ const NotificationsContentScript = (function (win, doc) { } if (name === 'showCMPMessage') { - CMP_DATA = reqMsg.data; + CMP_DATA = message.data; showAlert('showCMPMessage', { campaign: CMP_DATA }); ALERT_SHOWN = true; } else if (name === 'showUpgradeAlert') { - NOTIFICATION_TRANSLATIONS = reqMsg.translations; - LANGUAGE = reqMsg.language || 'en'; - showAlert('showUpgradeAlert', reqMsg.major_upgrade); + NOTIFICATION_TRANSLATIONS = message.translations; + LANGUAGE = message.language || 'en'; + showAlert('showUpgradeAlert', message.major_upgrade); ALERT_SHOWN = true; } else if (name === 'showLibraryUpdateAlert') { - NOTIFICATION_TRANSLATIONS = reqMsg.translations; - LANGUAGE = reqMsg.language || 'en'; + NOTIFICATION_TRANSLATIONS = message.translations; + LANGUAGE = message.language || 'en'; showAlert('showLibraryUpdateAlert'); ALERT_SHOWN = true; // Import/Export related messages } else if (name === 'showBrowseWindow') { - showBrowseWindow(reqMsg.translations); + showBrowseWindow(message.translations); ALERT_SHOWN = true; } else if (name === 'onFileImported') { - updateBrowseWindow(reqMsg); + updateBrowseWindow(message); } else if (name === 'exportFile') { - exportFile(reqMsg); + exportFile(message); } // trigger a response callback to src/background so that we can handler errors properly diff --git a/app/content-scripts/rewards/HotDog.jsx b/app/content-scripts/rewards/HotDog.jsx new file mode 100644 index 000000000..baa42fd64 --- /dev/null +++ b/app/content-scripts/rewards/HotDog.jsx @@ -0,0 +1,109 @@ +/** + * HotDog Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import { withRouter } from 'react-router-dom'; +import msgModule from '../utils/msg'; +import { log } from '../../../src/utils/common'; + +const msg = msgModule('hotdog'); +const { sendMessage } = msg; + +/** + * @class Create the Rewards "HotDog", aka UI element + * @memberOf RewardsContentScript + */ +class HotDog extends Component { + constructor(props) { + super(props); + this.state = { + closed: false + }; + + this.iframeEl = window.parent.document.getElementById('ghostery-iframe-container'); + if (this.iframeEl) { + this.iframeEl.classList = ''; + this.iframeEl.classList.add('hot-dog'); + } + + this.ghostyStar = `url(${chrome.extension.getURL('app/images/rewards/ghosty-star.svg')})`; + this.closeIcon = `url(${chrome.extension.getURL('app/images/rewards/light-x.svg')})`; + + this.close = this.close.bind(this); + this.navigate = this.navigate.bind(this); + } + + componentWillReceiveProps(nextProps) { + if (nextProps.reward && nextProps.reward !== null) { + this.sendSignal('offer_notification_hotdog', nextProps); + } + } + + messageBackground(name, message) { + if (this.props.port) { + this.props.port.postMessage({ + name, + message + }); + } else { + sendMessage(name, message); + } + } + + sendSignal(actionId, props = this.props) { + // Cliqz metrics + const offerId = props.reward.offer_id; + const message = { + offerId, + actionId + }; + this.messageBackground('rewardSignal', message); + } + + navigate() { + this.sendSignal('offer_click_hotdog'); + if (this.iframeEl) { + this.iframeEl.classList.add('offer-card'); + } + this.props.history.push('/offercard'); + } + + close() { + this.sendSignal('offer_closed_hotdog'); + if (this.iframeEl) { + this.iframeEl.classList = ''; + } + this.setState({ + closed: true + }); + } + + render() { + return ( +
+ { this.state.closed !== true && +
+
+
+ 1 {t('rewards_new_text')}! +
+
+
+
+ } +
+ ); + } +} + +export default withRouter(HotDog); diff --git a/app/content-scripts/rewards/Notification.jsx b/app/content-scripts/rewards/Notification.jsx new file mode 100644 index 000000000..a1c64d937 --- /dev/null +++ b/app/content-scripts/rewards/Notification.jsx @@ -0,0 +1,89 @@ +/** + * Notification Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; + +/** + * @class Handles notifications for Rewards + * @memberOf RewardsContentScript + */ +class Notification extends Component { + constructor(props) { + super(props); + this.closeIcon = `url(${chrome.extension.getURL('app/images/rewards/white-x.svg')})`; + this.state = { + closed: false + }; + + this.closeNotification = this.closeNotification.bind(this); + } + + closeNotification(confirm = null) { + this.setState({ + closed: true + }); + if (typeof this.props.data.closeCallback === 'function' && confirm !== null) { + this.props.data.closeCallback(confirm); + } + } + + render() { + return ( +
+ {!this.state.closed && +
+
+
+
+
{ this.closeNotification(); }} style={{ backgroundImage: this.closeIcon }} /> +
+ {this.props.data.message} +
+ {this.props.data.buttons && +
+ + +
+ } + {this.props.data.textLink + && ( + { + if (this.props.data.textLink.callback) { + // this.props.data.textLink.callback(); + } else { + // this.props.data.closeCallback(); + } + }} + > + {this.props.data.textLink.text} + + ) + } +
+
+
+ } +
+ ); + } +} + +export default Notification; diff --git a/app/content-scripts/rewards/OfferCard.jsx b/app/content-scripts/rewards/OfferCard.jsx new file mode 100644 index 000000000..b081ac73a --- /dev/null +++ b/app/content-scripts/rewards/OfferCard.jsx @@ -0,0 +1,318 @@ +/** + * Offer Card Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ReactDOM from 'react-dom'; +import { Link } from 'react-router-dom'; +import msgModule from '../utils/msg'; +import { computeTimeDelta } from '../../panel/utils/utils'; +import Notification from './Notification'; +import Settings from './Settings'; +import ClickOutside from '../../panel/components/BuildingBlocks/ClickOutside'; +import Tooltip from '../../panel/components/Tooltip'; + +const msg = msgModule('rewards'); +const { sendMessage } = msg; + +/** + * @class Generate Rewards offer card + * @memberOf RewardsContentScript + */ +class OfferCard extends Component { + constructor(props) { + super(props); + + this.state = { + closed: false, + copyText: t('rewards_copy_code'), + showPrompt: this.props.conf.rewardsPromptAccepted ? false : 1, + showSettings: false, + rewardUI: props.reward && props.reward.offer_data && props.reward.offer_data.ui_info.template_data || {}, + }; + + this.iframeEl = window.parent.document.getElementById('ghostery-iframe-container'); + if (this.iframeEl) { + this.iframeEl.classList = ''; + this.iframeEl.classList.add('offer-card'); + } + + this.betaLogo = `url(${chrome.extension.getURL('app/images/rewards/ghostery-rewards-beta.png')})`; + this.closeIcon = `url(${chrome.extension.getURL('app/images/drawer/x.svg')})`; + this.ghostyGrey = `url(${chrome.extension.getURL('app/images/rewards/ghosty-grey.svg')})`; + this.kebabIcon = `url(${chrome.extension.getURL('app/images/rewards/settings-kebab.svg')})`; + + this.closeOfferCard = this.closeOfferCard.bind(this); + this.copyCode = this.copyCode.bind(this); + this.disableRewards = this.disableRewards.bind(this); + this.disableRewardsNotification = this.disableRewardsNotification.bind(this); + this.toggleSettings = this.toggleSettings.bind(this); + this.handleImageLoaded = this.handleImageLoaded.bind(this); + this.handlePrompt = this.handlePrompt.bind(this); + + this.notifications = [ + { + type: 'first-prompt', + buttons: true, + message: t('rewards_first_prompt'), + textLink: { + href: 'https://www.ghostery.com/faqs', + text: t('rewards_learn_more'), + callback: () => this.sendSignal('offer_first_learn') + }, + closeCallback: (option) => { this.handlePrompt(1, option); }, + }, + { + type: 'second-prompt', + buttons: true, + message: t('rewards_second_prompt'), + textLink: {}, + closeCallback: (option) => { this.handlePrompt(2, option); }, + }, + { + type: 'disabled-message', + buttons: false, + message: t('rewards_disable_notification'), + textLink: { + text: t('rewards_disable_confirm') + }, + closeCallback: this.closeOfferCard, + } + ]; + + const { reward } = props; + this.messageBackground('rewardSeen', { + offerId: reward.offer_id + }); + this.sendSignal('offer_shown', { reward }); + this.sendSignal('offer_dsp_session', { reward }); + this.sendSignal('offer_shown_card', { reward }); + } + + messageBackground(name, message) { + if (this.props.port) { + this.props.port.postMessage({ + name, + message + }); + } else { + sendMessage(name, message); + } + } + + sendSignal(actionId, props = this.props) { + // Cliqz metrics + const offerId = props.reward.offer_id; + const message = { + offerId, + actionId + }; + this.messageBackground('rewardSignal', message); + } + + copyCode() { + this.sendSignal('code_copied'); + this.offerCardRef.querySelector('.reward-code-input').select(); + document.execCommand('copy'); + + // 'copied' feedback for user + this.setState({ + copyText: `${t('rewards_code_copied')}!` + }); + + // prevent multiple clicks + clearTimeout(this.timeout); + this.timeout = setTimeout(() => { + this.setState({ + copyText: t('rewards_copy_code') + }); + }, 3000); + } + + toggleSettings(e) { + if (!this.state.showSettings) { + this.sendSignal('offer_settings'); + } + this.setState({ + showSettings: !this.state.showSettings + }); + } + + disableRewards() { + this.sendSignal('rewards_off'); + this.messageBackground('rewardsDisabled'); + } + + disableRewardsNotification() { + this.disableRewards(); + this.setState({ + showPrompt: 3 + }); + } + + handlePrompt(promptNumber, option) { + // @TODO update user settings + if (promptNumber === 1) { + if (!option) { + this.setState({ + showPrompt: 2 + }); + return; + } + this.sendSignal('offer_first_optin'); + } else if (promptNumber === 2) { + if (option) { + this.sendSignal('offer_first_optout'); + this.disableRewards(); + this.closeOfferCard(); + return; + } + this.sendSignal('offer_first_optlater'); + } + this.setState({ + showPrompt: false + }); + this.messageBackground('rewardsPromptAccepted'); + } + + closeOfferCard() { + if (this.iframeEl) { + this.iframeEl.classList = ''; + } + this.setState({ + closed: true + }); + } + + redeem() { + this.sendSignal('offer_ca_action'); + } + + handleImageLoaded(e) { + e.target.classList.remove('hide'); + } + + renderNotification(type) { + const notificationProps = this.notifications[type]; + return ( + + ); + } + + renderExpiresText() { + const { expirationMs } = this.props.reward.offer_data; + const expireDays = Math.round((new Date()).setDate(new Date().getDate() + expirationMs / 60 / 60 / 24)); + const delta = computeTimeDelta(new Date(expireDays), new Date()); + return t('rewards_expires_in', [delta.count, t(`rewards_expires_in_${delta.type}`)]); + } + + render() { + return ( + // @TODO condition for hide class +
{ this.offerCardRef = ref; }} className="ghostery-rewards-component"> + { this.state.closed !== true && +
+
+
+
+
{ this.sendSignal('offer_closed_card'); this.closeOfferCard(); }} + style={{ backgroundImage: this.closeIcon }} + /> +
+
+
+
+
+ +
+
{ this.kebabRef = node; }} + /> + { this.state.showSettings && +
+ + + +
+ } +
+
+
+ +
+
+
+ {/*
*/} +
+ { this.state.rewardUI.benefit } +
+ + { this.state.rewardUI.headline } + + + { this.state.rewardUI.desc } + +
+
+
+
+ {this.state.rewardUI.code} + +
+ {this.state.copyText} +
+
+ + { this.renderExpiresText() } + + {this.state.rewardUI.conditions && +
+ { t('rewards_terms_conditions') } + +
+ } +
+ + {this.state.rewardUI.call_to_action.text} + +
+
+
+ + { this.state.showPrompt === 1 && + this.renderNotification(0) + } + { this.state.showPrompt === 2 && + this.renderNotification(1) + } + { this.state.showPrompt === 3 && + this.renderNotification(2) + } +
+ } +
+ ); + } +} + +export default OfferCard; diff --git a/app/content-scripts/rewards/Settings.jsx b/app/content-scripts/rewards/Settings.jsx new file mode 100644 index 000000000..050220e6a --- /dev/null +++ b/app/content-scripts/rewards/Settings.jsx @@ -0,0 +1,61 @@ +/** + * Settings Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; + +/** + * @class Handles settings for Rewards + * @memberOf RewardsContentScript + */ +class Settings extends Component { + constructor(props) { + super(props); + this.closeIcon = `url(${chrome.extension.getURL('app/images/rewards/white-x.svg')})`; + this.state = { + closed: false + }; + + this.close = this.close.bind(this); + } + + close() { + this.setState({ + closed: true + }); + if (typeof this.props.closeCallback === 'function') { + this.props.closeCallback(); + } + } + + render() { + return ( +
+ {!this.state.closed && +
+
+
+ {t('rewards_about')} +
{ this.close(); this.props.disable(); }}> + {t('rewards_disable')} +
+
+ {/*
{t('rewards_settings')}
+
{t('rewards_delete')}
*/} +
+
} +
+ ); + } +} + +export default Settings; diff --git a/app/content-scripts/rewards/index.jsx b/app/content-scripts/rewards/index.jsx new file mode 100644 index 000000000..aa096c3fe --- /dev/null +++ b/app/content-scripts/rewards/index.jsx @@ -0,0 +1,157 @@ +/** + * Ghostery Rewards + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +/** + * @namespace RewardsContentScript + */ + +/* eslint no-use-before-define: 0 */ +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Router, Route } from 'react-router-dom'; +import ShadowDOM from 'react-shadow'; +import HotDog from './HotDog'; +import OfferCard from './OfferCard'; +import msgModule from '../utils/msg'; +import history from '../../panel/utils/history'; +import globals from '../../../src/classes/Globals'; + +const msg = msgModule('rewards'); +const { sendMessage } = msg; +const { BROWSER_INFO, onMessage } = globals; +const viewport = document.getElementById('viewport'); +const channelsSupported = (typeof chrome.runtime.connect === 'function'); + +/** + * @class Injects Ghostery Rewards components + * @memberOf RewardsContentScript + */ +class RewardsApp { + constructor() { + this.reward = null; + this.conf = null; + this.rewardsContainer = document.createElement('div'); + this.rewardsApp = document.createElement('div'); + this.rewardsIframe = null; + this.iframeStyle = null; + this.port = null; + this.mainView = null; + this.rewardsApp.id = 'ghostery-rewards-app'; + this.rewardsApp.className = 'show'; + this.handleMessages = this.handleMessages.bind(this); + + this.init(); + } + + init() { + if (document.readyState === 'complete' + || document.readyState === 'loaded' + || document.readyState === 'interactive' + ) { + this.start(); + } else { + document.addEventListener('DOMContentLoaded', (event) => { + this.start(); + }); + } + } + + start() { + if (BROWSER_INFO.name === 'chrome') { + this.renderShadow(); + } else { + // use iframe to encapsulate CSS - fallback for everything else besides chrome + this.renderIframe(); + } + } + + renderReact() { + const MainView = this.mainView; + ReactDOM.render(, this.rewardsApp); + } + + renderShadow() { + // use shadowDOM to encapsulate CSS - fully supported in Chrome + this.rewardsContainer.appendChild(this.rewardsApp); + document.body.appendChild(this.rewardsContainer); + this.mainView = props => ( + + +
+ } /> + } /> + } /> +
+
+
+ ); + this.renderReact(); + this.initListener(); + } + + renderIframe() { + this.rewardsIframe = document.createElement('iframe'); + this.rewardsIframe.id = 'ghostery-iframe-container'; + this.rewardsIframe.classList.add('hot-dog'); + this.rewardsIframe.onload = () => { + this.iframeStyle = document.createElement('link'); + this.iframeStyle.rel = 'stylesheet'; + this.iframeStyle.type = 'text/css'; + this.iframeStyle.href = chrome.extension.getURL('dist/css/rewards_styles.css'); + + this.rewardsIframe.contentWindow.document.head.appendChild(this.iframeStyle); + this.rewardsContainer = this.rewardsIframe.contentWindow.document.body; + + this.rewardsApp.classList.add('iframe-child'); + this.rewardsContainer.appendChild(this.rewardsApp); + this.mainView = props => ( + +
+ } /> + } /> + } /> +
+
+ ); + this.renderReact(); + this.initListener(); + }; + document.body.appendChild(this.rewardsIframe); + } + + initListener() { + if (channelsSupported) { + this.port = chrome.runtime.connect({ name: 'rewardsPort' }); + if (this.port) { + this.port.onMessage.addListener(this.handleMessages); + this.port.postMessage({ name: 'rewardsLoaded' }); + } + } else { + // TODO listen for this in background.js + sendMessage('rewardsLoaded'); + onMessage.addListener(this.handleMessages); + } + } + + handleMessages(request, sender, response) { + if (request.name === 'showHotDog') { + this.reward = request.reward; + this.conf = request.conf; + } + if (document.readyState === 'complete' || document.readyState === 'interactive') { + this.renderReact(); + } + } +} + +const rewardsApp = new RewardsApp(); diff --git a/app/images/icon19.png b/app/images/icon19.png index aee8be927..5b8af3175 100644 Binary files a/app/images/icon19.png and b/app/images/icon19.png differ diff --git a/app/images/icon19_off.png b/app/images/icon19_off.png index 035844a28..15b2f16ac 100644 Binary files a/app/images/icon19_off.png and b/app/images/icon19_off.png differ diff --git a/app/images/icon19_star.png b/app/images/icon19_star.png new file mode 100644 index 000000000..74184ca14 Binary files /dev/null and b/app/images/icon19_star.png differ diff --git a/app/images/icon38.png b/app/images/icon38.png index 9e67dc30f..e62dcc553 100644 Binary files a/app/images/icon38.png and b/app/images/icon38.png differ diff --git a/app/images/icon38_off.png b/app/images/icon38_off.png index 9c0afbdb9..45ad51396 100644 Binary files a/app/images/icon38_off.png and b/app/images/icon38_off.png differ diff --git a/app/images/icon38_star.png b/app/images/icon38_star.png new file mode 100644 index 000000000..6257b6b97 Binary files /dev/null and b/app/images/icon38_star.png differ diff --git a/app/images/panel/caret-up.svg b/app/images/panel/caret-up.svg index 376043aae..c221b0230 100644 --- a/app/images/panel/caret-up.svg +++ b/app/images/panel/caret-up.svg @@ -1,12 +1,3 @@ - - - - Shape - Created with Sketch. - - - - - - - \ No newline at end of file + + + diff --git a/app/images/panel/icon-list-view.svg b/app/images/panel/icon-list-view.svg index 59dfa4ee3..2b579f335 100755 --- a/app/images/panel/icon-list-view.svg +++ b/app/images/panel/icon-list-view.svg @@ -1,21 +1,5 @@ - - - - icon- List view - Created with Sketch. - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + diff --git a/app/images/panel/left-left-moon.svg b/app/images/panel/left-left-moon.svg index c23b7f9da..4695be037 100644 --- a/app/images/panel/left-left-moon.svg +++ b/app/images/panel/left-left-moon.svg @@ -1,15 +1,6 @@ - - - - symbol-half circle hover caret left - Created with Sketch. - - - - - - - - - - \ No newline at end of file + + + + + + diff --git a/app/images/panel/left-right-moon.svg b/app/images/panel/left-right-moon.svg index cb6beb6db..28d16e236 100644 --- a/app/images/panel/left-right-moon.svg +++ b/app/images/panel/left-right-moon.svg @@ -1,15 +1,6 @@ - - - - symbol-hover right half ricle caret right - Created with Sketch. - - - - - - - - - - \ No newline at end of file + + + + + + diff --git a/app/images/panel/line-empty-moon.svg b/app/images/panel/line-empty-moon.svg new file mode 100644 index 000000000..795f5ec84 --- /dev/null +++ b/app/images/panel/line-empty-moon.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/images/panel/plus.svg b/app/images/panel/plus.svg index 32c7754e9..064ee3707 100644 --- a/app/images/panel/plus.svg +++ b/app/images/panel/plus.svg @@ -1,19 +1,6 @@ - - - - icon- add site - Created with Sketch. - - - - - - - - - - - - - - \ No newline at end of file + + + + + + diff --git a/app/images/panel/right-left-moon.svg b/app/images/panel/right-left-moon.svg new file mode 100644 index 000000000..ba198ffec --- /dev/null +++ b/app/images/panel/right-left-moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/images/panel/right-right-moon.svg b/app/images/panel/right-right-moon.svg index d14604deb..a47d8259f 100644 --- a/app/images/panel/right-right-moon.svg +++ b/app/images/panel/right-right-moon.svg @@ -1,17 +1 @@ - - - - symbol - half circle caret right - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/images/rewards/ghostery-rewards-beta.png b/app/images/rewards/ghostery-rewards-beta.png new file mode 100644 index 000000000..929d71fc8 Binary files /dev/null and b/app/images/rewards/ghostery-rewards-beta.png differ diff --git a/app/images/rewards/ghosty-grey.svg b/app/images/rewards/ghosty-grey.svg new file mode 100644 index 000000000..0fdbf2ac6 --- /dev/null +++ b/app/images/rewards/ghosty-grey.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/images/rewards/ghosty-star.svg b/app/images/rewards/ghosty-star.svg new file mode 100644 index 000000000..fbba5b5e8 --- /dev/null +++ b/app/images/rewards/ghosty-star.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/images/rewards/light-x.svg b/app/images/rewards/light-x.svg new file mode 100644 index 000000000..c7006483f --- /dev/null +++ b/app/images/rewards/light-x.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/images/rewards/settings-kebab.svg b/app/images/rewards/settings-kebab.svg new file mode 100644 index 000000000..bc9b11daa --- /dev/null +++ b/app/images/rewards/settings-kebab.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/images/rewards/white-x.svg b/app/images/rewards/white-x.svg new file mode 100644 index 000000000..9dd5cd1a4 --- /dev/null +++ b/app/images/rewards/white-x.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/panel/actions/BlockingActions.js b/app/panel/actions/BlockingActions.js index 0738353d0..8b6e823ae 100644 --- a/app/panel/actions/BlockingActions.js +++ b/app/panel/actions/BlockingActions.js @@ -11,7 +11,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { GET_BLOCKING_DATA, +import { + GET_BLOCKING_DATA, UPDATE_BLOCK_ALL_TRACKERS, UPDATE_CATEGORIES, UPDATE_CATEGORY_BLOCKED, @@ -19,7 +20,8 @@ import { GET_BLOCKING_DATA, UPDATE_TRACKER_TRUST_RESTRICT, TOGGLE_EXPANDED, TOGGLE_EXPAND_ALL, - TOGGLE_EXPAND_CATEGORY } from '../constants/constants'; + TOGGLE_EXPAND_CATEGORY +} from '../constants/constants'; import { sendMessageInPromise } from '../utils/msg'; /** diff --git a/app/panel/actions/DrawerActions.js b/app/panel/actions/DrawerActions.js deleted file mode 100644 index 51c23e125..000000000 --- a/app/panel/actions/DrawerActions.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Drawer Action creators - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2018 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ - -import { GET_CLIQZ_MODULE_DATA, - OPEN_DRAWER, - CLOSE_DRAWER, - TOGGLE_DRAWER_SETTING } from '../constants/constants'; -import { sendMessageInPromise } from '../utils/msg'; - -/** - * Get data for Cliqz adblock and antitracking modules - * @return {Object} dispatch - */ -export function getCliqzModuleData() { - return function (dispatch) { - return sendMessageInPromise('getCliqzModuleData').then((data) => { - dispatch({ - type: GET_CLIQZ_MODULE_DATA, - data, - }); - }); - }; -} - -/** - * Open drawer - * @param {Object} data - * @return {Object} - */ -export function openDrawer(data) { - return { - type: OPEN_DRAWER, - data, - }; -} - -/** - * Close drawer - * @return {Object} - */ -export function closeDrawer() { - return { - type: CLOSE_DRAWER, - }; -} - -/** - * Update checkboxes in Drawer. Picked up by Panel reducer. - * @return {Object} - */ -export function toggleDrawerSetting(settingName, isEnabled) { - const data = { - settingName, - isEnabled, - }; - return { - type: TOGGLE_DRAWER_SETTING, - data, - }; -} diff --git a/app/panel/actions/PanelActions.js b/app/panel/actions/PanelActions.js index faa5981b1..a96b6b977 100644 --- a/app/panel/actions/PanelActions.js +++ b/app/panel/actions/PanelActions.js @@ -11,13 +11,17 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { GET_PANEL_DATA, GET_SUMMARY_DATA, GET_BLOCKING_DATA, +import { + GET_PANEL_DATA, GET_SUMMARY_DATA, GET_BLOCKING_DATA, + TOGGLE_CLIQZ_FEATURE, SHOW_NOTIFICATION, CLOSE_NOTIFICATION, + TOGGLE_EXPERT, LOGIN_SUCCESS, LOGIN_FAILED, LOGOUT, CREATE_ACCOUNT_SUCCESS, CREATE_ACCOUNT_FAILED, - FORGOT_PASSWORD_SUCCESS, FORGOT_PASSWORD_FAILED } from '../constants/constants'; + FORGOT_PASSWORD_SUCCESS, FORGOT_PASSWORD_FAILED +} from '../constants/constants'; import { sendMessageInPromise } from '../utils/msg'; import { doXHR } from '../utils/utils'; import globals from '../../../src/classes/Globals'; @@ -25,6 +29,21 @@ import { decodeJwt, log } from '../../../src/utils/common'; const API_ROOT_URL = `https://consumerapi.${globals.GHOSTERY_DOMAIN}.com`; +/** + * Update Cliqz Features. + * @return {Object} + */ +export function toggleCliqzFeature(featureName, isEnabled) { + const data = { + featureName, + isEnabled, + }; + return { + type: TOGGLE_CLIQZ_FEATURE, + data, + }; +} + /** * Fetch panel data from background, only on the initial load. Returns combined * Panel, Summary and Blocking data as needed. @@ -84,6 +103,16 @@ export function closeNotification(data) { }; } +/** + * Called from Header and Summary's toggleExpert() and picked up by panel reducer + * @return {Object} + */ +export function toggleExpert() { + return { + type: TOGGLE_EXPERT, + }; +} + /** * Call consumerAPI and set updated login info to state. Called from Login * Component. Picked up by Panel reducer. diff --git a/app/panel/actions/RewardsActions.js b/app/panel/actions/RewardsActions.js new file mode 100644 index 000000000..00a850807 --- /dev/null +++ b/app/panel/actions/RewardsActions.js @@ -0,0 +1,92 @@ +/** + * Rewards Action creators + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import { + GET_REWARDS_DATA, + TOGGLE_OFFERS_ENABLED, + REMOVE_OFFER, + SET_OFFER_READ, + SEND_SIGNAL +} from '../constants/constants'; +import { sendMessageInPromise } from '../utils/msg'; + +/** + * Fetch rewards data from background + * @param {Object} tabId null + * @return {Object} dispatch + */ +export function getRewardsData(tabId) { + return function (dispatch) { + return sendMessageInPromise('getPanelData', { + tabId, + view: 'rewards', + }).then((data) => { + dispatch({ + type: GET_REWARDS_DATA, + data, + }); + }); + }; +} + +/** +* Toggles Rewards on/off +* @param {Boolean} enabled Whether offers should be enabled or not. +* @return {Object} +*/ +export function toggleOffersEnabled(enabled) { + return { + type: TOGGLE_OFFERS_ENABLED, + data: { enabled }, + }; +} + +/** + * Removes a reward from the rewards list + * @param {String} id The ID of the reward we want to remove. + * @return {Object} + */ +export function removeOffer(id) { + return { + type: REMOVE_OFFER, + data: { id } + }; +} + +/** + * Sets the unread status of an offer to false + * @param {String} id the ID of the reward we want to update. + * @return {Object} + */ +export function setOfferRead(id) { + return { + type: SET_OFFER_READ, + data: { id } + }; +} + +/** + * Sends a Signal to the Cliqz Offers + * @param {String} actionId the action id of the signal + * @param {String} offerId the offer id to be sent alongside the signal, sometimes + * @return {Object} + */ +export function sendSignal(actionId, offerId) { + return { + type: SEND_SIGNAL, + data: { + actionId, + offerId + } + }; +} diff --git a/app/panel/actions/SettingsActions.js b/app/panel/actions/SettingsActions.js index e2fa4c512..516618fc6 100644 --- a/app/panel/actions/SettingsActions.js +++ b/app/panel/actions/SettingsActions.js @@ -10,7 +10,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { GET_SETTINGS_DATA, +import { + GET_SETTINGS_DATA, IMPORT_SETTINGS_DIALOG, IMPORT_SETTINGS_NATIVE, IMPORT_SETTINGS_FAILED, @@ -26,7 +27,8 @@ import { GET_SETTINGS_DATA, SETTINGS_TOGGLE_EXPAND_CATEGORY, SETTINGS_UPDATE_SEARCH_VALUE, SETTINGS_SEARCH_SUBMIT, - SETTINGS_FILTER } from '../constants/constants'; + SETTINGS_FILTER +} from '../constants/constants'; import { sendMessageInPromise } from '../utils/msg'; import { hashCode } from '../../../src/utils/common'; import globals from '../../../src/classes/Globals'; @@ -280,4 +282,3 @@ export function filter(data) { data, }; } - diff --git a/app/panel/actions/SummaryActions.js b/app/panel/actions/SummaryActions.js index 936f7c6a9..09421df3a 100644 --- a/app/panel/actions/SummaryActions.js +++ b/app/panel/actions/SummaryActions.js @@ -11,12 +11,13 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { GET_SUMMARY_DATA, +import { + GET_SUMMARY_DATA, UPDATE_TRACKER_COUNTS, UPDATE_GHOSTERY_PAUSED, UPDATE_SITE_POLICY, - FILTER_TRACKERS, - TOGGLE_EXPERT } from '../constants/constants'; + FILTER_TRACKERS +} from '../constants/constants'; import { sendMessageInPromise } from '../utils/msg'; /** @@ -59,7 +60,7 @@ export function updateGhosteryPaused(data) { const pauseValue = (data.time || data.ghosteryPaused); return function (dispatch) { - sendMessageInPromise('setPanelData', { paused_blocking: pauseValue }).then(() => { + return sendMessageInPromise('setPanelData', { paused_blocking: pauseValue }).then(() => { dispatch({ type: UPDATE_GHOSTERY_PAUSED, data @@ -101,13 +102,3 @@ export function filterTrackers(data) { data, }; } - -/** - * Called from Summary.toggleExpert() and picked up by panel reducer - * @return {Object} - */ -export function toggleExpert() { - return { - type: TOGGLE_EXPERT, - }; -} diff --git a/app/panel/actions/__tests__/RewardsActions.js b/app/panel/actions/__tests__/RewardsActions.js new file mode 100644 index 000000000..a0ef98416 --- /dev/null +++ b/app/panel/actions/__tests__/RewardsActions.js @@ -0,0 +1,102 @@ +/** + * Test file for Rewards Actions + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import configureStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; +import * as msg from '../../utils/msg'; +import * as rewardsActions from '../RewardsActions'; +import { + GET_REWARDS_DATA, + TOGGLE_OFFERS_ENABLED, + REMOVE_OFFER, + SET_OFFER_READ, + SEND_SIGNAL +} from '../../constants/constants'; + +const middlewares = [thunk]; +const mockStore = configureStore(middlewares); + +const testData = { test: true }; +msg.sendMessageInPromise = jest.fn(messageType => new Promise((resolve, reject) => { + switch (messageType) { + case 'getPanelData': + resolve(testData); + break; + default: + resolve(); + } +})); + +describe('app/panel/actions/RewardsActions.js', () => { + test('getRewardsData action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const data = testData; + const expectedPayload = { data, type: GET_REWARDS_DATA }; + + return store.dispatch(rewardsActions.getRewardsData()).then(() => { + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); + }); + + test('toggleOffersEnabled action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const enabled = true; + const expectedPayload = { data: { enabled }, type: TOGGLE_OFFERS_ENABLED }; + store.dispatch(rewardsActions.toggleOffersEnabled(enabled)); + + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); + + test('removeOffer action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const id = 'test_reward_id'; + const expectedPayload = { data: { id }, type: REMOVE_OFFER }; + store.dispatch(rewardsActions.removeOffer(id)); + + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); + + test('setOfferRead action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const id = 'test_reward_id'; + const expectedPayload = { data: { id }, type: SET_OFFER_READ }; + store.dispatch(rewardsActions.setOfferRead(id)); + + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); + + test('sendSignal action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const actionId = 'action_id'; + const offerId = 'offer_id'; + const expectedPayload = { data: { actionId, offerId }, type: SEND_SIGNAL }; + store.dispatch(rewardsActions.sendSignal(actionId, offerId)); + + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); +}); diff --git a/app/panel/actions/__tests__/SummaryActions.js b/app/panel/actions/__tests__/SummaryActions.js new file mode 100644 index 000000000..73124848b --- /dev/null +++ b/app/panel/actions/__tests__/SummaryActions.js @@ -0,0 +1,102 @@ +/** + * Test file for Summary Actions + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import configureStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; +import * as msg from '../../utils/msg'; +import * as summaryActions from '../SummaryActions'; +import { + GET_SUMMARY_DATA, + UPDATE_TRACKER_COUNTS, + UPDATE_GHOSTERY_PAUSED, + UPDATE_SITE_POLICY, + FILTER_TRACKERS +} from '../../constants/constants'; + +const middlewares = [thunk]; +const mockStore = configureStore(middlewares); + +const testData = { test: true }; +msg.sendMessageInPromise = jest.fn(messageType => new Promise((resolve, reject) => { + switch (messageType) { + case 'getPanelData': + resolve(testData); + break; + default: + resolve(); + } +})); + +describe('app/panel/actions/SummaryActions.js', () => { + test('getSummaryData action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const data = testData; + const expectedPayload = { data, type: GET_SUMMARY_DATA }; + + return store.dispatch(summaryActions.getSummaryData()).then(() => { + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); + }); + + test('updateTrackerCounts action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const data = { test: true }; + const expectedPayload = { data, type: UPDATE_TRACKER_COUNTS }; + store.dispatch(summaryActions.updateTrackerCounts(data)); + + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); + + test('updateGhosteryPaused action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const data = { time: null, ghosteryPaused: true }; + const expectedPayload = { data, type: UPDATE_GHOSTERY_PAUSED }; + + return store.dispatch(summaryActions.updateGhosteryPaused(data)).then(() => { + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); + }); + + test('updateSitePolicy action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const data = { test: true }; + const expectedPayload = { data, type: UPDATE_SITE_POLICY }; + store.dispatch(summaryActions.updateSitePolicy(data)); + + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); + + test('filterTrackers action should return correctly', () => { + const initialState = {}; + const store = mockStore(initialState); + + const data = { test: true }; + const expectedPayload = { data, type: FILTER_TRACKERS }; + store.dispatch(summaryActions.filterTrackers(data)); + + const actions = store.getActions(); + expect(actions).toEqual([expectedPayload]); + }); +}); diff --git a/app/panel/components/Blocking.jsx b/app/panel/components/Blocking.jsx index 639934ec4..2295a8a6e 100644 --- a/app/panel/components/Blocking.jsx +++ b/app/panel/components/Blocking.jsx @@ -14,7 +14,7 @@ import React, { Component } from 'react'; import Categories from './Blocking/Categories'; import BlockingHeader from './Blocking/BlockingHeader'; -import NotScanned from './NotScanned'; +import NotScanned from './BuildingBlocks/NotScanned'; import { updateSummaryBlockingCount } from '../utils/blocking'; /** * @class Implement Blocking View in the right @@ -254,7 +254,7 @@ class Blocking extends React.Component { paused_blocking={this.props.paused_blocking} selected_app_ids={this.props.selected_app_ids} /> - {this.state.disableBlocking ? + {(this.state.disableBlocking && this.props.is_expanded) ? :
diff --git a/app/panel/components/Blocking/BlockingHeader.jsx b/app/panel/components/Blocking/BlockingHeader.jsx index 7dce9e79d..0b13789b2 100644 --- a/app/panel/components/Blocking/BlockingHeader.jsx +++ b/app/panel/components/Blocking/BlockingHeader.jsx @@ -16,7 +16,8 @@ import React, { Component } from 'react'; import { Link } from 'react-router-dom'; import { updateSummaryBlockingCount } from '../../utils/blocking'; -import ClickOutside from '../helpers/ClickOutside'; +import ClickOutside from '../BuildingBlocks/ClickOutside'; + /** * @class Implement Blocking Header component. This component is shared * by Blocking view and Global Blocking subview in Settings. diff --git a/app/panel/components/helpers/ClickOutside.jsx b/app/panel/components/BuildingBlocks/ClickOutside.jsx similarity index 90% rename from app/panel/components/helpers/ClickOutside.jsx rename to app/panel/components/BuildingBlocks/ClickOutside.jsx index 7656fb294..c40ba9789 100644 --- a/app/panel/components/helpers/ClickOutside.jsx +++ b/app/panel/components/BuildingBlocks/ClickOutside.jsx @@ -10,14 +10,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -/** - * @namespace PanelComponentHelpers - */ + import React, { Component } from 'react'; /** * @class Implement Click Outside component which handles * clicks outside of designated component - * @memberOf PanelComponentHelpers + * @memberOf PanelBuildingBlocks */ class ClickOutside extends React.Component { constructor(props) { @@ -53,7 +51,10 @@ class ClickOutside extends React.Component { */ clickHandler(e) { const el = this.container; - if (!el.contains(e.target) && e.target !== this.props.excludeEl) { + if (!el.contains(e.target) + && !el.contains(e.path[0]) + && e.target !== this.props.excludeEl + && e.path[0] !== this.props.excludeEl) { this.props.onClickOutside(e); } } diff --git a/app/panel/components/BuildingBlocks/CliqzFeatures.jsx b/app/panel/components/BuildingBlocks/CliqzFeatures.jsx new file mode 100644 index 000000000..212f8c6ee --- /dev/null +++ b/app/panel/components/BuildingBlocks/CliqzFeatures.jsx @@ -0,0 +1,204 @@ +/** + * Cliqz Features Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ClassNames from 'classnames'; +import Tooltip from '../Tooltip'; + +/** + * @class Implements buttons to render and toggle for Cliqz's features on/off. + * @memberof PanelBuildingBlocks + */ +class CliqzFeatures extends React.Component { + constructor(props) { + super(props); + + // Event Bindings + this.getAntiTrackingTotal = this.getAntiTrackingTotal.bind(this); + this.getAdBlockingTotal = this.getAdBlockingTotal.bind(this); + this.getSmartBlockingTotal = this.getSmartBlockingTotal.bind(this); + this.clickAntiTracking = this.clickAntiTracking.bind(this); + this.clickAdBlocking = this.clickAdBlocking.bind(this); + this.clickSmartBlocking = this.clickSmartBlocking.bind(this); + } + + /** + * Calculates the text for above the Ad Blocking feature icon + * @return {String | Int} The text for above the Ad Blocking icon + */ + getAdBlockingTotal() { + if (!this.props.adBlockingActive) { + return '-'; + } + return this.props.adBlocking && this.props.adBlocking.totalCount || 0; + } + + /** + * Calculates the text for above the Smart Blocking feature icon + * @return {String | Int} The text for above the Smart Blocking icon + */ + getSmartBlockingTotal() { + if (!this.props.smartBlockingActive) { + return '-'; + } + const blockedCount = this.props.smartBlocking && Object.keys(this.props.smartBlocking.blocked).length || 0; + const unblockedCount = this.props.smartBlocking && Object.keys(this.props.smartBlocking.unblocked).length || 0; + + return blockedCount + unblockedCount; + } + + /** + * Calculates the text for above the Anti Tracking feature icon + * @return {String | Int} The text for above the Anit Tracking icon + */ + getAntiTrackingTotal() { + if (!this.props.antiTrackingActive) { + return '-'; + } + let antiTrackingTotal = 0; + for (const category in this.props.antiTracking) { + if (this.props.antiTracking.hasOwnProperty(category)) { + for (const app in this.props.antiTracking[category]) { + if (this.props.antiTracking[category][app] === 'unsafe') { + antiTrackingTotal++; + } + } + } + } + return antiTrackingTotal; + } + + /** + * Handles the click event for the AdBlocking button + */ + clickAdBlocking() { + if (this.props.isInactive) { + return; + } + this.props.clickButton({ + feature: 'enable_ad_block', + status: this.props.adBlockingActive, + text: !this.props.adBlockingActive ? t('alert_ad_block_on') : t('alert_ad_block_off'), + }); + } + + /** + * Handles the click event for the SmartBlocking button + */ + clickSmartBlocking() { + if (this.props.isInactive) { + return; + } + this.props.clickButton({ + feature: 'enable_smart_block', + status: this.props.smartBlockingActive, + text: !this.props.smartBlockingActive ? t('alert_smart_block_on') : t('alert_smart_block_off'), + }); + } + + /** + * Handles the click event for the AntiTracking button + */ + clickAntiTracking() { + if (this.props.isInactive) { + return; + } + this.props.clickButton({ + feature: 'enable_anti_tracking', + status: this.props.antiTrackingActive, + text: !this.props.antiTrackingActive ? t('alert_anti_track_on') : t('alert_anti_track_off'), + }); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Cliqz Features portion of the Summary View + */ + render() { + const { + isSmaller, + isCondensed, + isInactive, + antiTrackingActive, + adBlockingActive, + smartBlockingActive, + } = this.props; + + const cliqzFeaturesClassNames = ClassNames('sub-component', 'cliqz-features', { + smaller: isSmaller, + condensed: isCondensed, + inactive: isInactive, + }); + const antiTrackingClassNames = ClassNames('anti-tracking', 'cliqz-feature', { + active: antiTrackingActive, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + const adBlockingClassNames = ClassNames('ad-blocking', 'cliqz-feature', { + active: adBlockingActive, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + const smartBlockingClassNames = ClassNames('smart-blocking', 'cliqz-feature', { + active: smartBlockingActive, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + + return ( +
+
+
{this.getAntiTrackingTotal()}
+
+ +
+
+ { t('drawer_title_enable_anti_tracking') } +
+
+
+
{this.getAdBlockingTotal()}
+
+ +
+
+ { t('drawer_title_enable_ad_block') } +
+
+
+
{this.getSmartBlockingTotal()}
+
+ +
+
+ { t('drawer_title_enable_smart_block') } +
+
+
+ ); + } +} + +export default CliqzFeatures; diff --git a/app/panel/components/DonutGraph.jsx b/app/panel/components/BuildingBlocks/DonutGraph.jsx similarity index 57% rename from app/panel/components/DonutGraph.jsx rename to app/panel/components/BuildingBlocks/DonutGraph.jsx index 5f98631d5..1eba11821 100644 --- a/app/panel/components/DonutGraph.jsx +++ b/app/panel/components/BuildingBlocks/DonutGraph.jsx @@ -12,18 +12,22 @@ */ import React, { Component } from 'react'; +import ClassNames from 'classnames'; import * as d3 from 'd3'; import { scaleLinear } from 'd3-scale'; + /** - * @class Generate donut graph with tracker data in the Summary view. - * @memberOf PanelClasses + * @class Generate donut graph. Used to display tracker data in the Summary View. + * @memberOf PanelBuildingBlocks */ class DonutGraph extends React.Component { constructor(props) { super(props); - // event bindings - this.clickTrackersAll = this.clickTrackersAll.bind(this); + // Event Bindings + this.clickGraphText = this.clickGraphText.bind(this); + + // Variables this.colors = { regular: (id) => { switch (id) { @@ -47,56 +51,75 @@ class DonutGraph extends React.Component { return '#e8e8e8'; } }, - restricted: scaleLinear().range(['#f75065', '#ffb0Ba']), - paused: scaleLinear().range(['#848484', '#c9c9c9']), + redscale: scaleLinear().range(['#f75065', '#ffb0Ba']), + greyscale: scaleLinear().range(['#848484', '#c9c9c9']), }; } + /** * Lifecycle event */ componentDidMount() { const { - categories, sitePolicy, pausedBlocking, trackerCounts, isExpert + categories, + renderRedscale, + renderGreyscale, + totalCount, + isSmall, } = this.props; + this.generateGraph(categories, { - sitePolicy, - pausedBlocking, - trackerCounts, - isExpert, + renderRedscale, + renderGreyscale, + totalCount, + isSmall, }); } + /** * Lifecycle event */ componentWillReceiveProps(nextProps) { const { - categories, sitePolicy, pausedBlocking, trackerCounts, isExpert + categories, + renderRedscale, + renderGreyscale, + totalCount, + ghosteryFeatureSelect, + isSmall, } = this.props; + if (categories.length !== nextProps.categories.length || - sitePolicy !== nextProps.sitePolicy || - pausedBlocking !== nextProps.pausedBlocking || - isExpert !== nextProps.isExpert) { + renderRedscale !== nextProps.renderRedscale || + renderGreyscale !== nextProps.renderGreyscale || + totalCount !== nextProps.totalCount || + ghosteryFeatureSelect !== nextProps.ghosteryFeatureSelect || + isSmall !== nextProps.isSmall) { this.generateGraph(nextProps.categories, { - sitePolicy: nextProps.sitePolicy, - pausedBlocking: nextProps.pausedBlocking, - trackerCounts: nextProps.trackerCounts, - isExpert: nextProps.isExpert, + renderRedscale: nextProps.renderRedscale, + renderGreyscale: nextProps.renderGreyscale, + totalCount: nextProps.totalCount, + isSmall: nextProps.isSmall, }); } } + /** - * Generate donut-shaped graph with the scanning results. Add mouse event listeners - * to the parts of the created donut which would navigate to the corresponding - * tracker category in the blocking view. - * @param {Object} categories list of categories detected on the site - * @param {Object} options site policy, paused state, stats of the scanning + * Generate donut-shaped graph with the scanning results. + * Add mouse event listeners to the arcs of the donut graph that filter the + * detailed view to the corresponding tracker category. + * @param {Array} categories list of categories detected on the site + * @param {Object} options options for the graph */ generateGraph(categories, options) { - const { sitePolicy, pausedBlocking } = options; + const { + renderRedscale, + renderGreyscale, + totalCount, + isSmall + } = options; const graphData = []; - const trackerCounts = options.trackerCounts || {}; - const trackerCount = trackerCounts.allowed + trackerCounts.blocked || 0; - const size = options.isExpert ? 94 : 121; + const size = isSmall ? 94 : 120; const width = +size; const height = +size; const radius = Math.min(width, height) / 2; @@ -124,6 +147,14 @@ class DonutGraph extends React.Component { // Clear graph d3.select(this.node).selectAll('*').remove(); + // Clear tooltips + categories.forEach((cat) => { + const tooltip = document.getElementById(`${cat.id}_tooltip`); + if (tooltip) { + tooltip.classList.remove('show'); + } + }); + // Draw graph const chart = d3.select(this.node) .append('svg') @@ -149,16 +180,21 @@ class DonutGraph extends React.Component { g.append('path') .style('fill', (d, i) => { - if (pausedBlocking) { - const pausedExp = graphData.length > 1 ? 100 / (graphData.length - 1) * i * 0.01 : 0; - return this.colors.paused(pausedExp); - } else if (sitePolicy === 1) { - const restrictedExp = graphData.length > 1 ? 100 / (graphData.length - 1) * i * 0.01 : 0; - return this.colors.restricted(restrictedExp); + if (renderGreyscale) { + const greyTone = graphData.length > 1 ? 100 / (graphData.length - 1) * i * 0.01 : 0; + return this.colors.greyscale(greyTone); + } else if (renderRedscale) { + const redTone = graphData.length > 1 ? 100 / (graphData.length - 1) * i * 0.01 : 0; + return this.colors.redscale(redTone); } return this.colors.regular(d.data.id); }) - .attr('class', (d, i) => ((d.data.name) ? 'clickable' : 'disabled')) + .attr('class', (d, i) => { + if (d.data.name) { + return (isSmall) ? 'clickable' : 'not-clickable'; + } + return 'disabled'; + }) .on('mouseover', (d, i) => { const pX = arc.centroid(d)[0] + (width / 2); const pY = arc.centroid(d)[1] + (height / 2); @@ -176,8 +212,8 @@ class DonutGraph extends React.Component { } }) .on('click', (d, i) => { - if (d.data.name) { - this.props.actions.filterTrackers({ type: 'category', name: d.data.id }); + if (d.data.name && isSmall) { + this.props.clickDonut({ type: 'category', name: d.data.id }); } }) .transition() @@ -205,35 +241,44 @@ class DonutGraph extends React.Component { }) .ease(d3.easeLinear); } + /** - * Trigger action which results in navigating to full blocking view. - * @param {Object} event mouseclick on the total number of trackers - * displayed in the 'hole' of the donut + * Handle click event for graph text. Filters to show all categories. */ - clickTrackersAll(event) { - this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); + clickGraphText() { + this.props.clickDonut({ type: 'trackers', name: 'all' }); } + /** - * Render Donut Chart. - * @return {ReactComponent} ReactComponent instance + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the donut-graph portion of the Summary View */ render() { + const { isSmall, totalCount } = this.props; + const componentClasses = ClassNames('sub-component', 'donut-graph', { + small: isSmall, + big: !isSmall, + }); + return ( -
-
-
-
- {this.props.trackerCounts.allowed + this.props.trackerCounts.blocked || 0} -
-
Trackers
-
-
{ this.node = node; }} /> +
+
{this.props.categories.map(cat => ( {cat.name} ))}
+
{ this.node = node; }} /> +
+
{totalCount}
+
+ {(totalCount === 1) ? t('tracker_signular') : t('tracker_plural')} +
+ {t('tracker_found')} +
+
+
); } diff --git a/app/panel/components/BuildingBlocks/GhosteryFeatures.jsx b/app/panel/components/BuildingBlocks/GhosteryFeatures.jsx new file mode 100644 index 000000000..808ab470e --- /dev/null +++ b/app/panel/components/BuildingBlocks/GhosteryFeatures.jsx @@ -0,0 +1,170 @@ +/** + * Ghostery Features Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ClassNames from 'classnames'; +import Tooltip from '../Tooltip'; + +/** + * @class Implements buttons to render and toggle for Ghostery's features on/off. + * @memberof PanelBuildingBlocks + */ +class GhosteryFeatures extends React.Component { + constructor(props) { + super(props); + + // Event Bindings + this.clickTrustButton = this.clickTrustButton.bind(this); + this.clickCustomButton = this.clickCustomButton.bind(this); + this.clickRestrictButton = this.clickRestrictButton.bind(this); + this.getTrustText = this.getTrustText.bind(this); + this.getRestrictText = this.getRestrictText.bind(this); + } + + /** + * Gets the text for the Trust Button under different conditions + * @return {String} The text for the Trust Button as a string + */ + getTrustText() { + if (this.props.isCondensed) { + return ''; + } else if (this.props.sitePolicy === 2) { + return t('summary_trust_site_active'); + } + return t('summary_trust_site'); + } + + /** + * Gets the text for the Restrict Button under different conditions + * @return {String} The text for the Restrict Button as a string + */ + getRestrictText() { + if (this.props.isCondensed) { + return ''; + } else if (this.props.sitePolicy === 1) { + return t('summary_restrict_site_active'); + } + return t('summary_restrict_site'); + } + + /** + * Handles the click event for the Trust Site button + */ + clickTrustButton() { + if (this.props.isInactive) { + return; + } + this.props.clickButton('trust'); + } + + /** + * Handles the click event for the Custom Settings button + */ + clickCustomButton() { + if (this.props.isInactive) { + return; + } + this.props.clickButton('custom'); + } + + /** + * Handles the click event for the Restrict Site button + */ + clickRestrictButton() { + if (this.props.isInactive) { + return; + } + this.props.clickButton('restrict'); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Ghostery Features portion of the Summary View + */ + render() { + const { + isAbPause, + isInactive, + isStacked, + isCondensed, + sitePolicy + } = this.props; + + const buttonGroupClassNames = ClassNames('button-group', { + inactive: isInactive, + stacked: isStacked, + }); + const trustClassNames = ClassNames('button', 'button-trust', 'g-tooltip', { + 'ab-pause': isAbPause, + 'button-left': isAbPause && !isStacked, + 'button-top': (isAbPause || isCondensed) && isStacked, + condensed: isCondensed, + active: sitePolicy === 2, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + const customClassNames = ClassNames('button', 'button-custom', 'g-tooltip', { + 'ab-pause': isAbPause, + 'button-center': isAbPause && true, + condensed: isCondensed, + active: !sitePolicy, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + const restrictClassNames = ClassNames('button', 'button-restrict', 'g-tooltip', { + 'ab-pause': isAbPause, + 'button-right': isAbPause && !isStacked, + 'button-bottom': isAbPause && isStacked, + 'button-center': !isAbPause && isCondensed && isStacked, + condensed: isCondensed, + active: sitePolicy === 1, + clickable: !isInactive, + 'not-clickable': isInactive, + }); + + return ( +
+
+
+ + + {this.getTrustText()} + + + +
+ {isAbPause && ( +
+ + + {t('summary_custom_settings')} + + + +
+ )} +
+ + + {this.getRestrictText()} + + + +
+
+
+ ); + } +} + +export default GhosteryFeatures; diff --git a/app/panel/components/BuildingBlocks/NotScanned.jsx b/app/panel/components/BuildingBlocks/NotScanned.jsx new file mode 100644 index 000000000..2e23dc151 --- /dev/null +++ b/app/panel/components/BuildingBlocks/NotScanned.jsx @@ -0,0 +1,42 @@ +/** + * Not Scanned Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ClassNames from 'classnames'; + +/** + * @class Implements the Not Scanned component displayed in the Summary view + * when a site is not scannable or has not yet been scanned. + * @memberof PanelBuildingBlocks + */ +const NotScanned = (props) => { + const notScannedClassNames = ClassNames('sub-component', 'not-scanned', { + small: props.isSmall, + }); + + return ( // eslint-disable-line arrow-parens +
+
+ {t('summary_page_not_scanned') } +
+
+ { t('summary_description_not_scanned_1') } +
+
+ { t('summary_description_not_scanned_2') } +
+
+ ); +}; + +export default NotScanned; diff --git a/app/panel/components/BuildingBlocks/PauseButton.jsx b/app/panel/components/BuildingBlocks/PauseButton.jsx new file mode 100644 index 000000000..ac688e11b --- /dev/null +++ b/app/panel/components/BuildingBlocks/PauseButton.jsx @@ -0,0 +1,191 @@ +/** + * Pause Button Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ClassNames from 'classnames'; +import Tooltip from '../Tooltip'; + +/** + * @class Implements the Pause button on the Summary view. + * @memberof PanelBuildingBlocks + */ +class PauseButton extends React.Component { + constructor(props) { + super(props); + this.state = { + showDropdown: false, + }; + + // Event Bindings + this.clickDropdownCaret = this.clickDropdownCaret.bind(this); + this.clickDropdownPause = this.clickDropdownPause.bind(this); + this.clickOutside = this.clickOutside.bind(this); + } + + /** + * Handles the click event for the Dropdown Caret + */ + clickDropdownCaret() { + if (!this.state.showDropdown) { + this.setState({ showDropdown: true }); + document.body.addEventListener('click', this.clickOutside); + } else { + this.setState({ showDropdown: false }); + document.body.removeEventListener('click', this.clickOutside); + } + } + + /** + * Handles clicking outside the dropdown menu when the menu is exposed + * @param {Object} event the click event + */ + clickOutside(event) { + const classes = event.target.className || ''; + if (classes && typeof classes === 'string' && (classes.indexOf('button-caret') !== -1 || classes.indexOf('dropdown-clickable') !== -1)) { + return; + } + document.body.removeEventListener('click', this.clickOutside); + this.setState({ showDropdown: false }); + } + + /** + * Handles the click event for timed pause in the dropdown list + */ + /** + * Handles the click event for timed pause in the dropdown list + * @param {int} time The time in minutes that Ghostery should be paused` + */ + clickDropdownPause(time) { + this.setState({ showDropdown: false }); + document.body.removeEventListener('click', this.clickOutside); + this.props.clickPause(time); + } + + /** + * Helper render function for the dropdown list + * @return {JSX} JSX for the dropdown list + */ + renderDropdown() { + const { isCondensed, isPausedTimeout } = this.props; + + function dropdownItemClassName(value) { + return ClassNames('dropdown-item', 'clickable', 'dropdown-clickable', { + selected: value === isPausedTimeout / 60000, + }); + } + + const dropdownStyles = { + width: `${this.pauseWidth + 26}px`, + }; + + return ( +
+ {this.props.dropdownItems.map(item => ( +
{ this.clickDropdownPause(item.val); }}> + + {!isCondensed ? item.name : item.name_condensed} + +
+ ))} +
+ ); + } + + /** + * Helper render function for Pause Button text + * @return {JSX} JSX for the Pause Button's text + */ + renderPauseButtonText() { + const { + isPaused, + isCondensed, + isAbPause, + } = this.props; + + if (isCondensed) { + return (); + } else if (isAbPause) { + return ( + + {isPaused ? t('summary_resume_ghostery_ab_pause') : t('summary_pause_ghostery_ab_pause')} + + ); + } + return ( + + {isPaused ? t('summary_resume_ghostery') : t('summary_pause_ghostery')} + + ); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Pause Button on the Summary View + */ + render() { + const pauseButtonClassNames = ClassNames('button', 'button-left', 'button-pause', { + 'g-tooltip': !this.props.isAbPause, + active: this.props.isPaused, + smaller: !this.props.isCentered, + smallest: this.props.isCentered && this.props.isCondensed, + 'no-border-radius': this.props.isCentered && this.props.isCondensed, + 'dropdown-open': this.state.showDropdown, + }); + const dropdownButtonClassNames = ClassNames('button', 'button-right', 'button-caret', { + active: this.state.showDropdown, + smaller: !this.props.isCentered, + smallest: this.props.isCentered && this.props.isCondensed, + 'no-border-radius': this.props.isCentered && this.props.isCondensed, + 'dropdown-open': this.state.showDropdown, + }); + const dropdownContainerClassNames = ClassNames('button-group', 'dropdown-container', { + centered: this.props.isCentered, + }); + const dropdownContainerStyles = { + left: `${(this.props.isCentered && this.props.isAbPause) ? this.pauseLeft : 0}px`, + }; + + return ( +
+
+
{ + this.pauseWidth = node && node.clientWidth; + this.pauseLeft = node && node.offsetLeft; + }} + > + {this.renderPauseButtonText()} + {!this.props.isAbPause && ( + + )} +
+
+ + {t('summary_show_menu')} + +
+
+
+ {this.state.showDropdown && this.renderDropdown()} +
+
+ ); + } +} + +export default PauseButton; diff --git a/app/panel/components/BuildingBlocks/RewardDetail.jsx b/app/panel/components/BuildingBlocks/RewardDetail.jsx new file mode 100644 index 000000000..8aa69bc18 --- /dev/null +++ b/app/panel/components/BuildingBlocks/RewardDetail.jsx @@ -0,0 +1,154 @@ +/** + * Reward Detail Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ClassNames from 'classnames'; +import { computeTimeDelta } from '../../utils/utils'; +import { sendMessage } from '../../utils/msg'; +import Tooltip from '../Tooltip'; + +/** + * @class Implements the details for a single reward for for the Rewards Panel + * @memberof PanelBuildingBlocks + */ +class RewardDetail extends React.Component { + constructor(props) { + super(props); + this.state = { + copyText: t('rewards_copy_code'), + }; + + // Event Bindings + this.handleCopyClick = this.handleCopyClick.bind(this); + this.handleRedeemClick = this.handleRedeemClick.bind(this); + } + + /** + * Lifecycle event + */ + componentWillMount() { + this.props.actions.setOfferRead(this.props.id); + } + + /** + * Handles clicking the copy button + */ + handleCopyClick() { + // Copy the reward code + this.copyNode.querySelector('input').select(); + document.execCommand('copy'); + + // Show a toast notification + this.props.actions.showNotification({ + text: t('rewards_code_copied_toast_notification'), + classes: 'purple', + }); + + // Update and reset Copy Code text + this.setState({ copyText: t('rewards_code_copied') }); + setTimeout(() => { + this.setState({ copyText: t('rewards_copy_code') }); + }, 3000); + + // Send a signal to the offers black box + this.props.actions.sendSignal('code_copied', this.props.id); + } + + /** + * Handles clicking the redeem button + * @param {Object} event the event object + */ + handleRedeemClick(event) { + event.preventDefault(); + this.props.actions.sendSignal('offer_ca_action', this.props.id); + sendMessage('openNewTab', { + url: this.props.redeemUrl, + become_active: true, + }); + window.close(); + } + + /** + * Helper render function for the expires text. + * @return {JSX} JSX for the Rewards Detail + */ + renderExpiresText() { + const { expires } = this.props; + const delta = computeTimeDelta(new Date(expires), new Date()); + return t('rewards_expires_in', [delta.count, t(`rewards_expires_in_${delta.type}`)]); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the details for a Reward + */ + render() { + const { + code, + text, + description, + conditions, + logoUrl, + pictureUrl, + redeemText + } = this.props; + + return ( +
+
+ + +
+ {text && ( +
+ { text } +
+ )} + {description && ( +
+ { description } +
+ )} + {code && ( +
+ { this.copyNode = node; }}> + { code } + + + + {this.state.copyText} + +
+ )} +
+
+ { this.renderExpiresText() } +
+ {conditions && ( +
+ + { t('rewards_terms_conditions') } + + +
+ )} +
+
+ { redeemText } +
+
+ ); + } +} + +export default RewardDetail; diff --git a/app/panel/components/BuildingBlocks/RewardListItem.jsx b/app/panel/components/BuildingBlocks/RewardListItem.jsx new file mode 100644 index 000000000..72e5f48b7 --- /dev/null +++ b/app/panel/components/BuildingBlocks/RewardListItem.jsx @@ -0,0 +1,122 @@ +/** + * Reward List Item Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import { Link } from 'react-router-dom'; +import ClassNames from 'classnames'; +import { computeTimeDelta } from '../../utils/utils'; + +/** + * @class Implements a single reward in a list for the Rewards Panel + * @memberof PanelBuildingBlocks + */ +class RewardListItem extends React.Component { + constructor(props) { + super(props); + this.state = {}; + + // Event Bindings + this.handleClick = this.handleClick.bind(this); + this.clickCloseButton = this.clickCloseButton.bind(this); + } + + /** + * Handle the click event: everything normal unless it is disabled + * @param {Object} event the click event + */ + handleClick(event) { + const { disabled, unread, id } = this.props; + if (disabled) { + event.preventDefault(); + } else { + if (unread) { + this.props.actions.sendSignal('offer_click_specific_new', id); + } + this.props.actions.sendSignal('offer_click_specific', id); + } + } + + /** + * Handle clicking on the close button + * @param {Object} event the click event + */ + clickCloseButton(event) { + // Prevent the event from propagating and linking to the Reward Detail + event.preventDefault(); + + const { id } = this.props; + this.props.actions.removeOffer(id); + this.props.actions.sendSignal('remove_offer_link', id); + } + + /** + * Helper render function for the expires text. + * @return {JSX} JSX for the Rewards Items List + */ + renderExpiresText() { + const { expires } = this.props; + const delta = computeTimeDelta(new Date(expires), new Date()); + return t('rewards_expires_in', [delta.count, t(`rewards_expires_in_${delta.type}`)]); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering a Reward within the Rewards List + */ + render() { + const { + id, + isLong, + text, + unread, + disabled, + logoUrl, + pictureUrl + } = this.props; + const itemClassName = ClassNames('RewardListItem', 'row', { + 'RewardListItem--greyscale': disabled, + 'RewardListItem--unread': unread, + 'RewardListItem--elongated': isLong, + 'not-clickable': disabled, + clickable: !disabled, + }); + + return ( + +
+
+ +
+
+
{ text }
+
{ this.renderExpiresText() }
+
+
+
+ + + +
+
+ + + +
+
+
+ + ); + } +} + +export default RewardListItem; diff --git a/app/panel/components/BuildingBlocks/ToggleSlider.jsx b/app/panel/components/BuildingBlocks/ToggleSlider.jsx new file mode 100644 index 000000000..cd430b289 --- /dev/null +++ b/app/panel/components/BuildingBlocks/ToggleSlider.jsx @@ -0,0 +1,83 @@ +/** + * Toggle Slider Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React, { Component } from 'react'; +import ClassNames from 'classnames'; + +/** + * @class Implements an on/off button as a slider component. + * Is used throughout the extension: Rewards Panel, (todo: more) + * @memberof PanelBuildingBlocks + */ +class ToggleSlider extends React.Component { + constructor(props) { + super(props); + this.state = { + checked: this.props.isChecked, + }; + + // Event Bindings + this._handleChange = this._handleChange.bind(this); + } + + /** + * Lifecycle event + */ + componentWillReceiveProps(nextProps) { + this.setState({ + checked: nextProps.isChecked, + }); + } + + /** + * Handles a change to the the slider. This will update the slider in one + * of two ways. It can use the `onChange` property to update the isChecked + * property in the parent. Or it can just set the state directly. + */ + _handleChange(event) { + if (typeof this.props.onChange === 'function') { + this.props.onChange(event); + } else { + this.setState({ + checked: !this.state.checked, + }); + } + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Toggle Slider used throghout the extension + */ + render() { + const compClassNames = ClassNames('ToggleSlider', this.props.className); + const labelClassNames = ClassNames('ToggleSlider__switch', { + disabled: this.props.isDisabled, + }); + + return ( +
+ +
+ ); + } +} + +export default ToggleSlider; diff --git a/app/panel/components/BuildingBlocks/index.js b/app/panel/components/BuildingBlocks/index.js new file mode 100644 index 000000000..061f6b840 --- /dev/null +++ b/app/panel/components/BuildingBlocks/index.js @@ -0,0 +1,37 @@ +/** + * Building Blocks Sub Components + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +/** + * @namespace PanelBuildingBlocks + */ +import ClickOutside from './ClickOutside'; +import CliqzFeatures from './CliqzFeatures'; +import DonutGraph from './DonutGraph'; +import GhosteryFeatures from './GhosteryFeatures'; +import NotScanned from './NotScanned'; +import PauseButton from './PauseButton'; +import ToggleSlider from './ToggleSlider'; +import RewardDetail from './RewardDetail'; +import RewardListItem from './RewardListItem'; + +export { + ClickOutside, + CliqzFeatures, + DonutGraph, + GhosteryFeatures, + NotScanned, + PauseButton, + ToggleSlider, + RewardDetail, + RewardListItem +}; diff --git a/app/panel/components/Detail.jsx b/app/panel/components/Detail.jsx index e0a602cdf..e623f2be4 100644 --- a/app/panel/components/Detail.jsx +++ b/app/panel/components/Detail.jsx @@ -13,12 +13,13 @@ import React, { Component } from 'react'; import { Route } from 'react-router-dom'; +import ClassNames from 'classnames'; import DetailMenu from './DetailMenu'; import Summary from '../containers/SummaryContainer'; import Blocking from '../containers/BlockingContainer'; import History from './History'; import Performance from './Performance'; -import Rewards from './Rewards'; +import Rewards from '../containers/RewardsContainer'; import Premium from './Premium'; /** * @class Implement wrapper of the detailed (expert) mode view. @@ -59,19 +60,21 @@ class Detail extends React.Component { * @return {ReactComponent} ReactComponent instance */ render() { + const condensedToggleClassNames = ClassNames('condensed-toggle', { + condensed: this.props.is_expanded, + }); + const { enable_offers, unread_offer_ids } = this.props; + return (
-
-
-
-
+
- + 0} />
); diff --git a/app/panel/components/DetailMenu.jsx b/app/panel/components/DetailMenu.jsx index 73405e037..174f471f8 100644 --- a/app/panel/components/DetailMenu.jsx +++ b/app/panel/components/DetailMenu.jsx @@ -79,66 +79,30 @@ class DetailMenu extends React.Component { render() { return (
-
-
+
+
- + - + { t('panel_detail_menu_list_title') }
-
- - - - - - - - - - - - { t('panel_detail_menu_history_title') } - -
-
- - - - - - - - - - { t('panel_detail_menu_performance_title') } - -
-
- - - - +
+ + + + + {this.props.hasReward && ( + + )} { t('panel_detail_menu_rewards_title') }
-
- - - - - - - - { t('panel_detail_menu_premium_title') } - -
); diff --git a/app/panel/components/Drawer.jsx b/app/panel/components/Drawer.jsx deleted file mode 100644 index f96870e9d..000000000 --- a/app/panel/components/Drawer.jsx +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Drawer Component - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2018 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ - -/* eslint react/no-string-refs: 0 */ - -import React, { Component } from 'react'; -import Tooltip from './Tooltip'; -/** - * @class Implement panel at the bottom of the main panel - * which slides up when user clicks on feature icon on the panel. - * It allows to toggle a feature and display its stats. - * @memberof PanelClasses - */ -class Drawer extends React.Component { - componentDidMount() { - document.body.addEventListener('click', this.clickOutsideHandler); - this.props.actions.getCliqzModuleData(); - } - /** - * Lifecycle event - */ - componentWillUnmount() { - document.body.removeEventListener('click', this.clickOutsideHandler); - } - /** - * Calculate total number of trackers being accosted by a specified feature - * @param {string} type name of the feature - * @return {number} total number of trackers - */ - getCount = (type) => { - let total = 0; - switch (type) { - case 'enable_anti_tracking': - for (const category in this.props.antiTracking) { - if (this.props.antiTracking.hasOwnProperty(category)) { - for (const app in this.props.antiTracking[category]) { - if (this.props.antiTracking[category][app] === 'unsafe') { - total++; - } - } - } - } - return total; - case 'enable_ad_block': - return this.props.adBlock && this.props.adBlock.totalCount || 0; - case 'enable_smart_block': - Object.keys(this.props.smartBlock.blocked).forEach((key) => { - total++; - }); - Object.keys(this.props.smartBlock.unblocked).forEach((key) => { - total++; - }); - return total; - default: - return 0; - } - } - - /** - * Map active feature name to a locator of the corresponding button. - * - * @return {string} style class name of the corresponding button - */ - getButtonClassName = () => { - switch (this.props.activeDrawerType) { - case 'enable_anti_tracking': - return 'anti-track-btn'; - case 'enable_ad_block': - return 'ad-block-btn'; - case 'enable_smart_block': - return 'smart-block-btn'; - default: - return false; - } - } - /** - * Handle clicks outside buttons. This action should close the drawer. - * @param {Object} evt mouseclick event - */ - clickOutsideHandler = (evt) => { - const activeClassName = this.getButtonClassName(); - if (!this.refs.drawer.contains(evt.target) - && (!evt.target.classList.contains('cliqz-control-btn') || - evt.target.classList.contains(activeClassName)) - && !evt.target.classList.contains('needs-reload-link')) { - evt.preventDefault(); - evt.stopPropagation(); - this.props.actions.closeDrawer(); - } - } - - isChecked = () => this.props[this.props.activeDrawerType] || false - - toggleSetting = () => { - this.props.actions.showNotification({ - updated: this.props.activeDrawerType, - reload: true, - }); - this.props.actions.toggleDrawerSetting(this.props.activeDrawerType, this.isChecked()); - } - /** - * Render drawer at the bottom of the main view. - * @return {ReactComponent} ReactComponent instance - */ - render() { - return ( -
-
- - { t(`drawer_title_${this.props.activeDrawerType}`) } - -
- -
-
-
-
-
-
-
- {this.getCount(this.props.activeDrawerType)} -
-
-
-
- { t(`drawer_label_${this.props.activeDrawerType}`) } -
- - -
-
-
{t(`drawer_desc_${this.props.activeDrawerType}`)}
-
-
-
- { t(`drawer_status_${this.props.activeDrawerType}`) } - {this.isChecked() ? t('drawer_on') : t('drawer_off')} -
- -
-
-
- ); - } -} - -export default Drawer; diff --git a/app/panel/components/Header.jsx b/app/panel/components/Header.jsx index 54eb1359f..fb820c2d0 100644 --- a/app/panel/components/Header.jsx +++ b/app/panel/components/Header.jsx @@ -10,14 +10,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ + import React, { Component } from 'react'; import { Link } from 'react-router-dom'; import ClassNames from 'classnames'; import HeaderMenu from './HeaderMenu'; -import { sendMessage } from '../utils/msg'; +import { sendMessage, sendMessageInPromise } from '../utils/msg'; import { log } from '../../../src/utils/common'; + /** - * @class Implement header component which is common to all panel views + * @class Implements header component which is common to all panel views * @memberof PanelClasses */ class Header extends React.Component { @@ -27,33 +29,60 @@ class Header extends React.Component { dropdownOpen: false, }; - // event bindings + // Event Bindings + this.clickSimpleTab = this.clickSimpleTab.bind(this); + this.clickDetailedTab = this.clickDetailedTab.bind(this); + this.toggleExpert = this.toggleExpert.bind(this); this.toggleDropdown = this.toggleDropdown.bind(this); - this.getKebab = this.getKebab.bind(this); this.clickSignInVerify = this.clickSignInVerify.bind(this); } + /** - * Initialize kebab menu icon with refrence to DOM elementiption] - * @param {Object} ref React reference attribute of the menu icon + * Handles clicking on the Simple View tab */ - getKebab(ref) { - this.kebab = ref; + clickSimpleTab() { + if (this.props.is_expert) { + this.toggleExpert(); + } } + /** - * Toggle drop-down pane with menu items + * Handles clicking on the Detailed View tab + */ + clickDetailedTab() { + if (!this.props.is_expert) { + this.toggleExpert(); + } + } + + /** + * Toggle between Simple and Detailed Views. + */ + toggleExpert() { + this.props.actions.toggleExpert(); + if (this.props.is_expert) { + this.props.history.push('/'); + } else { + this.props.history.push('/detail'); + } + } + + /** + * Handles toggling the drop-down pane open/closed */ toggleDropdown() { this.setState({ dropdownOpen: !this.state.dropdownOpen }); } + /** - * Click the sign in / verify link in the header + * Handles clicking the sign-in / verify link */ clickSignInVerify() { if (!this.props.logged_in) { sendMessage('ping', 'sign_in'); this.props.history.push('/login'); } else if (!this.props.is_validated) { - sendMessage('sendVerificationEmail').then((data) => { + sendMessageInPromise('sendVerificationEmail').then((data) => { this.props.actions.showNotification({ classes: 'success', text: t('panel_email_verification_sent', data.email), @@ -63,17 +92,40 @@ class Header extends React.Component { }); } } + /** - * Render header. - * @return {ReactComponent} ReactComponent instance - */ + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Header Component of the panel + */ render() { const { pathname } = this.props.location; + const showTabs = pathname === '/' || pathname.startsWith('/detail'); const headerLogoClasses = ClassNames('header-logo', { 'show-back-arrow': (pathname !== '/' && !pathname.startsWith('/detail')), }); + const tabSimpleClassNames = ClassNames('header-tab', { + active: !this.props.is_expert, + }); + const tabDetailedClassNames = ClassNames('header-tab', { + active: this.props.is_expert, + }); + return (
+ { showTabs && ( +
+
+ + {t('panel_header_simple_view')} + +
+
+ + {t('panel_header_detailed_view')} + +
+
+ )}
@@ -87,7 +139,11 @@ class Header extends React.Component { { !this.props.logged_in ? t('panel_header_sign_in') : (!this.props.is_validated ? t('panel_header_verify_account') : '') }
-
+
{ this.kebab = node; }} + />
{ this.state.dropdownOpen && ( // eslint-disable-line arrow-parens -
-
-
- {t('summary_page_not_scanned') } -
-
- { t('summary_description_not_scanned_1') } -

- { t('summary_description_not_scanned_2') } -
-
-
-); - -export default NotScanned; diff --git a/app/panel/components/Panel.jsx b/app/panel/components/Panel.jsx index ba8686d7f..bd7abd039 100644 --- a/app/panel/components/Panel.jsx +++ b/app/panel/components/Panel.jsx @@ -1,5 +1,5 @@ /** - * Drawer Component + * Panel Component * * Ghostery Browser Extension * https://www.ghostery.com/ @@ -14,7 +14,6 @@ import React, { Component } from 'react'; import URLSearchParams from 'url-search-params'; import Header from '../containers/HeaderContainer'; -import Drawer from '../containers/DrawerContainer'; import { sendMessage } from '../utils/msg'; /** * @class Implement base view with functionality common to all views. @@ -105,34 +104,61 @@ class Panel extends React.Component { this.closeNotification(); } + /** - * Render all child views from router. - * @return {ReactComponent} ReactComponent instance + * Helper render function for the notification callout + * @return {JSX} JSX for the notification callout */ - render() { - // this prevents double rendering when waiting for getPanelData() to finish - if (!this.props.initialized) { - return null; - } + renderNotification() { const needsReload = !!Object.keys(this.props.needsReload.changes).length; - const calloutText = needsReload ? ( - - { t('panel_needs_reload') } - { t('panel_click_to_reload') } - - ) : (this.props.notificationFilter === 'slow') ? - - - { t('panel_tracker_slow_non_secure_end') } - - : (this.props.notificationFilter === 'compatibility') ? + + if (this.props.notificationText) { + return ( + + + {needsReload && ( +
{ t('alert_reload') }
+ )} +
+ ); + } else if (needsReload) { + return ( + + {t('panel_needs_reload')} + { t('alert_reload') } + + ); + } else if (this.props.notificationFilter === 'slow') { + return ( + + + { t('panel_tracker_slow_non_secure_end') } + + ); + } else if (this.props.notificationFilter === 'compatibility') { + return ( { t('panel_tracker_breaking_page_end') } - : ( - - ); + ); + } + + return ( + + ); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Panel + */ + render() { + // this prevents double rendering when waiting for getPanelData() to finish + if (!this.props.initialized) { + return null; + } + return (
@@ -143,20 +169,12 @@ class Panel extends React.Component { - {calloutText} + {this.renderNotification()}
{ this.props.children } - { this.props.drawerIsOpen && - - }
); } diff --git a/app/panel/components/Rewards.jsx b/app/panel/components/Rewards.jsx index aed35d791..b5c5a7aff 100644 --- a/app/panel/components/Rewards.jsx +++ b/app/panel/components/Rewards.jsx @@ -12,58 +12,265 @@ */ import React, { Component } from 'react'; +import { Link, Route } from 'react-router-dom'; +import { ToggleSlider, RewardListItem, RewardDetail } from './BuildingBlocks'; import { sendMessage } from '../utils/msg'; +import globals from '../../../src/classes/Globals'; + +const IS_EDGE = (globals.BROWSER_INFO.name === 'edge'); +const IS_CLIQZ = (globals.BROWSER_INFO.name === 'cliqz'); + /** - * @class Implement Rewards view which opens from a button in - * the footer of the detailed view. See DetailMenu.jsx. + * @class The Rewards Panel shows offers generated by Ghostery Rewards. + * The panel is opened from a button in the Detailed View's footer. + * See DetailMenu.jsx. * @memberof PanelClasses */ class Rewards extends React.Component { constructor(props) { super(props); + this.state = { + rewardsArray: null, + }; // event bindings - this.openNewTab = this.openNewTab.bind(this); + this.toggleOffers = this.toggleOffers.bind(this); + + // helper render functions + this.renderRewardListComponent = this.renderRewardListComponent.bind(this); + this.renderRewardDetailComponent = this.renderRewardDetailComponent.bind(this); + this.handleBackClick = this.handleBackClick.bind(this); + this.handleFaqClick = this.handleFaqClick.bind(this); + } + + /** + * Lifecycle event + */ + componentDidMount() { + this.props.actions.getRewardsData(); + this.props.actions.sendSignal('hub_open'); + } + + /** + * Lifecycle event + */ + componentWillReceiveProps(nextProps) { + const dateNow = new Date(); + let rewardsArray = null; + if (nextProps.rewards) { + rewardsArray = Object.keys(nextProps.rewards).map((key) => { + const reward = nextProps.rewards[key].offer_data; + return { + id: reward.offer_id, + unread: nextProps.unread_offer_ids.indexOf(reward.offer_id) !== -1, + code: reward.ui_info.template_data.code, + text: reward.ui_info.template_data.title, + description: reward.ui_info.template_data.desc, + conditions: reward.ui_info.template_data.conditions, + logo_url: reward.ui_info.template_data.logo_url, + picture_url: reward.ui_info.template_data.picture_url, + redeem_url: reward.ui_info.template_data.call_to_action.url, + redeem_text: reward.ui_info.template_data.call_to_action.text, + expires: Math.round((new Date()).setDate(dateNow.getDate() + reward.expirationMs / 60 / 60 / 24)), + }; + }); + } + this.setState({ rewardsArray }); + } + + /** + * Lifecycle event + */ + componentWillUnmount() { + this.props.actions.sendSignal('hub_closed'); } + + /** + * Handles clicking the back button + */ + handleBackClick() { + const offerId = this.props.location.pathname.split('/detail/rewards/detail/')[1]; + this.props.actions.sendSignal('offer_return_hub', offerId); + } + /** - * Open informational page from 'Learn More' button on the view. + * Handles clicking the learn more button */ - openNewTab() { + handleFaqClick() { sendMessage('openNewTab', { url: 'https:\/\/www.ghostery.com/faqs/what-new-ghostery-features-can-we-expect-in-the-future/', become_active: true, }); sendMessage('ping', 'rewards_learn'); - window.close(); } + /** - * Render Rewards view. - * @return {ReactComponent} ReactComponent instance + * Handles toggling rewards on/off */ - render() { + toggleOffers() { + const { enable_offers } = this.props; + this.props.actions.showNotification({ + text: !enable_offers ? t('rewards_on_toast_notification') : t('rewards_off_toast_notification'), + classes: 'purple', + }); + this.props.actions.toggleOffersEnabled(!enable_offers); + this.props.actions.sendSignal(enable_offers ? 'rewards_off' : 'rewards_on'); + } + + /** + * Helper render function for the Rewards Header + * @return {JSX} JSX for the Rewards Header + */ + renderRewardsHeader() { + const { enable_offers, location } = this.props; + const showBack = location.pathname.indexOf('/detail/rewards/detail') !== -1; + const showToggle = location.pathname === '/detail/rewards/list'; + + return ( +
+ {showBack && ( + + + + + + )} + { t('panel_detail_rewards_title') } + {showToggle && !IS_EDGE && !IS_CLIQZ && ( + + + {enable_offers ? t('rewards_on') : t('rewards_off')} + + + + )} +
+ ); + } + + /** + * Helper render function for Reward Icon SVG + * @return {JSX} JSX for the Rewards Icon SVG + */ + renderRewardSvg() { return ( -
-
{ t('panel_detail_rewards_title') }
-
-
-
- - - - - -
-
-
-
{ t('panel_detail_rewards_text') }
-
-
-
-
- { t('panel_detail_learn_more') } -
+ + + + + + ); + } + + /** + * Helper render function for the list of Rewards Items + * @return {JSX} JSX for the Rewards Items List + */ + renderRewardListComponent() { + const { actions, enable_offers, is_expanded } = this.props; + const { rewardsArray } = this.state; + + if (IS_CLIQZ) { + return ( +
+ { this.renderRewardSvg() } +
{ t('panel_detail_rewards_cliqz_text') }
+
+
+ { t('panel_detail_learn_more') }
+ ); + } else if (IS_EDGE) { + return ( +
+ { this.renderRewardSvg() } +
{ t('panel_detail_rewards_coming_soon') }
+
+
+ { t('panel_detail_learn_more') } +
+
+ ); + } else if (enable_offers && !rewardsArray) { + return ( +
+ { this.renderRewardSvg() } +
{ t('panel_detail_rewards_loading') }
+
+ ); + } else if (enable_offers && rewardsArray.length === 0) { + return ( +
+ { this.renderRewardSvg() } +
{ t('panel_detail_rewards_none_found') }
+
+ ); + } else if (!enable_offers && (!rewardsArray || rewardsArray.length === 0)) { + return ( +
+ { this.renderRewardSvg() } +
{ t('panel_detail_rewards_off') }
+
+ ); + } + + const rewardsList = rewardsArray.map((reward, index) => ( + + )); + return
{ rewardsList }
; + } + + /** + * Helper render function for an individual Reward Item + * @return {JSX} JSX for the Rewards Detail Item + */ + renderRewardDetailComponent(routeProps) { + const { id } = routeProps.match.params; + const reward = this.state.rewardsArray.find(el => el.id === id); + + return ( + + ); + } + + /** + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Rewards portion of the Detailed View + */ + render() { + return ( +
+ {this.renderRewardsHeader()} + +
); } diff --git a/app/panel/components/SelectButton.jsx b/app/panel/components/SelectButton.jsx deleted file mode 100644 index dc9425869..000000000 --- a/app/panel/components/SelectButton.jsx +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Select Button Component - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2018 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ - -import React, { Component } from 'react'; -/** - * @class Implement generic split button component - * used currently in Pause Ghostery button on Summary view. - * @memberof PanelClasses - */ -class SelectButton extends React.Component { - constructor(props) { - super(props); - - this.state = { - isOpen: false, - }; - } - /** - * Handler for mouse clicks outside of the Select Button. - * @param {Object} e mouseclick event - */ - clickOutside = (e) => { - // skip if clicking on right button or select menu to avoid - // click event conflicts - if (this.rightButton.contains(e.target) || this.selectMenu.contains(e.target)) { - return; - } - this.setState({ isOpen: false }); - } - /** - * Toogle showing of the menu - * @return {Object} iOpen as its property - */ - toggleMenu = () => { - this.setState((prevState, props) => { - if (!prevState.isOpen) { - document.body.addEventListener('click', this.clickOutside); - } else { - document.body.removeEventListener('click', this.clickOutside); - } - return { isOpen: !prevState.isOpen }; - }); - } - /** - * Handle click on a menu item - */ - listClickHandler = (item) => { - this.toggleMenu(); - this.props.callback(item.val); - } - /** - * Handle click on the button itself - */ - buttonClickHandler = () => { - if (this.state.isOpen) { - this.toggleMenu(); - } - this.props.callback(); - } - /** - * Render Select Button component. - * @return {ReactComponent} ReactComponent instance - */ - render() { - const listItems = this.props.menuItems.map((item, idx) => ( -
  • { this.listClickHandler(item); }}> -
    -
    - {item.name} -
    -
  • - )); - - return ( -
    -
    - -
    - {this.state.isOpen ? -
    { this.selectMenu = ref; }}> -
      - {listItems} -
    -
    - : - null - } -
    - ); - } -} - -export default SelectButton; diff --git a/app/panel/components/Settings.jsx b/app/panel/components/Settings.jsx index 3f4895e02..a1bfbc173 100644 --- a/app/panel/components/Settings.jsx +++ b/app/panel/components/Settings.jsx @@ -65,6 +65,9 @@ class Settings extends React.Component { * @param {Object} event checking a checkbox event */ toggleCheckbox(event) { + if (event.currentTarget.name === 'enable_offers') { + this.props.actions.sendSignal(event.currentTarget.checked ? 'rewards_off' : 'rewards_on'); + } this.props.actions.toggleCheckbox({ event: event.currentTarget.name, checked: event.currentTarget.checked, diff --git a/app/panel/components/Settings/GlobalBlocking.jsx b/app/panel/components/Settings/GlobalBlocking.jsx index 5ddc0285f..a28578e1e 100644 --- a/app/panel/components/Settings/GlobalBlocking.jsx +++ b/app/panel/components/Settings/GlobalBlocking.jsx @@ -12,6 +12,7 @@ */ import React, { Component } from 'react'; +import ClassNames from 'classnames'; import Categories from '../Blocking/Categories'; import BlockingHeader from '../Blocking/BlockingHeader'; /** @@ -40,12 +41,12 @@ class GlobalBlocking extends React.Component { const categories = this.props.settingsData ? this.props.settingsData.categories : []; const filterText = this.props.settingsData ? this.props.settingsData.filterText : t('settings_filter_all_label'); const expandAll = this.props.settingsData ? this.props.settingsData.expand_all_trackers : false; + const condensedToggleClassNames = ClassNames('condensed-toggle', { + condensed: settingsData.is_expanded, + }); return (
    -
    -
    -
    -
    +
    {
    {!IS_EDGE && !IS_CLIQZ && -
    -
    - - -
    - +
    +
    +
    + + +
    + +
    -
    - } - {settingsData.enable_metrics_abtest && -
    -
    - - -
    - +
    +
    + + +
    + +
    diff --git a/app/panel/components/Summary.jsx b/app/panel/components/Summary.jsx index 338759617..9d4651fdd 100644 --- a/app/panel/components/Summary.jsx +++ b/app/panel/components/Summary.jsx @@ -14,17 +14,23 @@ import React, { Component } from 'react'; import ClassNames from 'classnames'; import { sendMessage } from '../utils/msg'; -import DonutGraph from './DonutGraph'; -import SelectButton from './SelectButton'; -import Tooltip from './Tooltip'; -import NotScanned from './NotScanned'; import globals from '../../../src/classes/Globals'; -import { updateSummaryBlockingCount } from '../utils/blocking'; +import { + CliqzFeatures, + DonutGraph, + GhosteryFeatures, + NotScanned, + PauseButton +} from './BuildingBlocks'; -const { BROWSER_INFO } = globals; const { IS_CLIQZ } = globals; +const AB_PAUSE_BUTTON = false; + /** - * @class Implement Summary view. + * @class Implements the Summary View, which is displayed as the entire panel + * as the Simple View or condensed as part of the Detailed View. Summary View + * displays site information, aggregate tracker data, and options for toggling + * Ghostery and Cliqz features. * @memberof PanelClasses */ class Summary extends React.Component { @@ -33,47 +39,49 @@ class Summary extends React.Component { this.state = { trackerLatencyTotal: '', disableBlocking: false, + abPause: AB_PAUSE_BUTTON, }; - // event bindings - this.clickGhosteryPause = this.clickGhosteryPause.bind(this); - this.clickSitePolicy = this.clickSitePolicy.bind(this); + // Event Bindings + this.toggleExpert = this.toggleExpert.bind(this); + this.clickPauseButton = this.clickPauseButton.bind(this); + this.clickDonut = this.clickDonut.bind(this); + this.clickTrackersCount = this.clickTrackersCount.bind(this); this.clickTrackersBlocked = this.clickTrackersBlocked.bind(this); - this.clickTrackersAlerts = this.clickTrackersAlerts.bind(this); + this.clickSitePolicy = this.clickSitePolicy.bind(this); + this.clickCliqzFeature = this.clickCliqzFeature.bind(this); this.clickMapTheseTrackers = this.clickMapTheseTrackers.bind(this); - this.toggleExpert = this.toggleExpert.bind(this); - this.openDrawer = this.openDrawer.bind(this); this.pauseOptions = [ - { name: t('pause_30_min'), val: 30 }, - { name: t('pause_1_hour'), val: 60 }, - { name: t('pause_24_hours'), val: 1440 }, + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, ]; } + /** - * Lifecycle event. + * Lifecycle event */ componentWillMount() { this.setTrackerLatency(this.props); this.updateSiteNotScanned(this.props); } + /** - * Lifecycle event. + * Lifecycle event */ componentWillReceiveProps(nextProps) { - // triggered by update to the redux store this.setTrackerLatency(nextProps); this.updateSiteNotScanned(nextProps); - if (nextProps.alertCounts.total !== this.props.alertCounts.total) { - this.updateTrackerCountAlert(nextProps); - } + // Set page title for Firefox for Android window.document.title = `Ghostery's findings for ${this.props.pageUrl}`; } + /** - * Calculate pageLatency and set to state - * @param {Object} props nextProps - */ + * Calculates total tracker latency and sets it to state + * @param {Object} props Summary's props, either this.props or nextProps. + */ setTrackerLatency(props) { const { performanceData } = props; let pageLatency = ''; @@ -94,46 +102,66 @@ class Summary extends React.Component { this.setState({ trackerLatencyTotal: `${pageLatency}` }); } } + /** - * Open feature drawer - * @param {Object} event clicking on feature button event + * Disable controls when Ghostery cannot or has not yet scanne a page. + * @param {Object} props Summary's props, either this.props or nextProps. */ - openDrawer(event) { - if (this.state.disableBlocking || this.props.paused_blocking || this.props.sitePolicy !== false) { return; } - - const type = event.target.value; - switch (type) { - case 'antiTrackBtn': { - if (!IS_CLIQZ) { - this.props.actions.openDrawer('enable_anti_tracking'); - } - break; - } - case 'adBlockBtn': { - if (!IS_CLIQZ) { - this.props.actions.openDrawer('enable_ad_block'); - } - break; - } - case 'smartBlockBtn': { - this.props.actions.openDrawer('enable_smart_block'); - break; - } - default: { - break; - } + updateSiteNotScanned(props) { + const { siteNotScanned, categories } = props; + const pageUrl = props.pageUrl || ''; + + if (siteNotScanned || !categories || pageUrl.search('http') === -1) { + this.setState({ disableBlocking: true }); + } else { + this.setState({ disableBlocking: false }); + } + } + + /** + * Handles clicking on the Pause Ghostery button. + * @param {Int} time Optional number of minutes after which Ghostery should un-pause. + */ + clickPauseButton(time) { + const ghosteryPaused = this.props.paused_blocking; + const text = ghosteryPaused ? t('alert_ghostery_resumed') : t('alert_ghostery_paused'); + sendMessage('ping', ghosteryPaused ? 'resume' : 'pause'); + if (typeof time === 'number') { + sendMessage('ping', 'pause_snooze'); } + + this.props.actions.updateGhosteryPaused({ + ghosteryPaused: (typeof time === 'number' ? true : !ghosteryPaused), + time: time * 60000, + }); + this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); + this.props.actions.showNotification({ + updated: 'ghosteryPaused', + reload: true, + text, + }); } + /** - * Wrapper of toggleExpert call + * Handles clicking on any part of the Donut graph + * @param {Object} data Properties of the click and resulting filter */ - toExpert = () => { + clickDonut(data) { if (!this.props.is_expert) { this.toggleExpert(); } + this.props.actions.filterTrackers(data); + } + + /** + * Handles clicking on the total trackers count on the condensed view + */ + clickTrackersCount() { + this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); } + /** - * Toggle between simple and detail (expert) views + * Toggle between Simple and Detailed Views. */ toggleExpert() { this.props.actions.toggleExpert(); @@ -143,94 +171,48 @@ class Summary extends React.Component { this.props.history.push('/detail'); } } - /** - * Disable controls for a site that cannot be scanned by - * Ghostery or has not yet been scanned. - * @param {Object} props nextProps - */ - updateSiteNotScanned(props) { - const { siteNotScanned, categories } = props; - const pageUrl = props.pageUrl || ''; - if (siteNotScanned || !categories || pageUrl.search('http') === -1) { - this.setState({ disableBlocking: true }); - } else { - this.setState({ disableBlocking: false }); - } - } /** - * Trigger actions which display notifications - * about slow or non-secure trackers. - * @param {Object} props nextProps - */ - updateTrackerCountAlert(props) { - const { alertCounts } = props; - - if (alertCounts.total) { - // Set notification on Panel View - if (alertCounts.compatibility) { - if (BROWSER_INFO.name === 'edge') { - let text = t('panel_tracker_breaking_page'); - text = text.replace('$1', alertCounts.compatibility); - text = text.replace('$2', (alertCounts.compatibility === 1) ? t('tracker_signular') : t('tracker_plural')); - props.actions.showNotification({ - classes: 'hideous', - filter: 'compatibility', - text, - }); - } else { - props.actions.showNotification({ - classes: 'hideous', - filter: 'compatibility', - text: t( - 'panel_tracker_breaking_page', - [alertCounts.compatibility, - (alertCounts.compatibility === 1) ? t('tracker_signular') : t('tracker_plural')], - ), - }); - } - } else if (BROWSER_INFO.name === 'edge') { - let text = t('panel_tracker_slow_non_secure'); - text = text.replace('$1', alertCounts.total - alertCounts.compatibility); - text = text.replace('$2', (alertCounts.total - alertCounts.compatibility === 1) ? t('tracker_signular') : t('tracker_plural')); - props.actions.showNotification({ - classes: 'hideous', - filter: 'slow', - text, - }); + * Handles clicking on Trackers Blocked. Triggers a filter action + */ + clickTrackersBlocked() { + const { sitePolicy, is_expert } = this.props; + if (is_expert) { + if (sitePolicy === 1) { + this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); } else { - props.actions.showNotification({ - classes: 'hideous', - filter: 'slow', - text: t( - 'panel_tracker_slow_non_secure', - [alertCounts.total - alertCounts.compatibility, - (alertCounts.total - alertCounts.compatibility === 1) ? t('tracker_signular') : t('tracker_plural')], - ), - }); + this.props.actions.filterTrackers({ type: 'trackers', name: 'blocked' }); } } } + + /** - * Implement handler for clicks on the 'trust' and 'restrict' buttons - * @param {Object} event click event - */ - clickSitePolicy(event) { - const { ghosteryPaused, sitePolicy } = this.props; - const targetClasses = event.currentTarget.classList || []; - const type = targetClasses.contains('controls-trust') ? 'whitelist' : 'blacklist'; - let updated_site_policy; + * Handles clicking on Ghostery Features: Trust Site, Restrict Site, Custom Settings + * @param {String} button The button that was clicked: trust, restrict, custom + */ + clickSitePolicy(button) { + const { paused_blocking, sitePolicy } = this.props; + let type; + let text; + let classes; - if (this.state.disableBlocking || ghosteryPaused) { + if (this.state.disableBlocking || paused_blocking) { return; } - if (type === 'whitelist') { + if (button === 'trust' || (button === 'custom' && sitePolicy === 2)) { sendMessage('ping', 'trust_site'); - updated_site_policy = (sitePolicy === 1 || !sitePolicy) ? 2 : false; - } else { + type = 'whitelist'; + text = (sitePolicy === 2) ? t('alert_site_trusted_off') : t('alert_site_trusted'); + classes = (sitePolicy === 2) ? 'warning' : 'success'; + } else if (button === 'restrict' || (button === 'custom' && sitePolicy === 1)) { sendMessage('ping', 'restrict_site'); - updated_site_policy = (sitePolicy === 2 || !sitePolicy) ? 1 : false; + type = 'blacklist'; + text = (sitePolicy === 1) ? t('alert_site_restricted_off') : t('alert_site_restricted'); + classes = (sitePolicy === 1) ? 'warning' : 'alert'; + } else { + return; } this.props.actions.updateSitePolicy({ @@ -242,52 +224,33 @@ class Summary extends React.Component { this.props.actions.showNotification({ updated: type, reload: true, + classes, + text, }); } /** - * Implement handler for clicks on the 'pause' button. Trigger appropriate actions. - */ - clickGhosteryPause(time) { - const ghosteryPaused = this.props.paused_blocking; - sendMessage('ping', ghosteryPaused ? 'resume' : 'pause'); - if (typeof time === 'number') { - sendMessage('ping', 'pause_snooze'); - } - - this.props.actions.updateGhosteryPaused({ - ghosteryPaused: (typeof time === 'number' ? true : !ghosteryPaused), - time: time * 60000, - }); - this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); + * Handles clicking on Cliqz Features: AntiTracking, AdBlocking, SmartBlocking + * @param {Object} options options including: + * feature: enable_anti_tracking, enable_ad_block, enable_smart_block + * status: whether the feature should be turned on or off + * text: the text for the notification. + */ + clickCliqzFeature(options) { + const { feature, status, text } = options; this.props.actions.showNotification({ - updated: 'ghosteryPaused', + updated: feature, reload: true, + text, }); - } - /** - * Implement handler for clicking on the blocked tracker count. Trigger a filter action. - */ - clickTrackersBlocked(event) { - const { sitePolicy } = this.props; - - if (sitePolicy === 1) { - this.props.actions.filterTrackers({ type: 'trackers', name: 'all' }); - } else { - this.props.actions.filterTrackers({ type: 'trackers', name: 'blocked' }); - } - } - /** - * Implement handler for clicking on the slow and/or non-secure tracker count. Trigger a filter action. - */ - clickTrackersAlerts(event) { - this.props.actions.filterTrackers({ type: 'trackers', name: 'warning' }); + this.props.actions.toggleCliqzFeature(feature, status); } /** - * Implement handler for clicking 'Map These Trackers' which opens Evidon page. - */ + * Handles clicking on Map These Trackers, which opens Evidon page. + */ clickMapTheseTrackers() { + if (this.state.disableBlocking) { return; } sendMessage('ping', 'live_scan'); sendMessage('openNewTab', { url: `https:\/\/www.evidon.com/solutions/trackermap/?url=${this.props.pageUrl}&utm_source=Ghostery&utm_medium=referral&utm_term=&utm_content=&utm_campaign=GhosteryMapTrackers`, @@ -296,169 +259,150 @@ class Summary extends React.Component { }); window.close(); // for firefox } + /** - * Render Summary view. - * @return {ReactComponent} ReactComponent instance - */ + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Summary View of the panel + */ render() { - const showBody = (!this.props.is_expanded || !this.props.is_expert); + const { abPause } = this.state; + const { is_expert, is_expanded } = this.props; + const showCondensed = is_expert && is_expanded; - const getTooltipClass = () => ((!this.props.is_expert && 'top') - || ((this.props.is_expert && this.props.is_expanded) && 'right')); + const summaryClassNames = ClassNames('', { + expert: is_expert, + condensed: showCondensed, + 'ab-pause': abPause, + }); - const summaryClassNames = [ - this.props.is_expanded && this.props.is_expert ? 'expanded' : '', - this.props.is_expert || this.props.is_android ? 'expert' : 'simple', - this.state.disableBlocking ? 'not-scanned' : '', - ]; - const loadInfoClasses = ClassNames('columns small-12 medium-4 text-left load-info g-tooltip', { + const blockedTrackersClassNames = ClassNames('blocked-trackers', { + clickable: is_expert, + }); + const pageLoadClassNames = ClassNames('page-load', { fast: +this.state.trackerLatencyTotal < 5, slow: +this.state.trackerLatencyTotal > 10, }); + const mapTheseTrackersClassNames = ClassNames('map-these-trackers', { + clickable: !this.state.disableBlocking, + 'not-clickable': this.state.disableBlocking + }); + return ( -
    - - {(!this.props.is_expanded || !this.props.is_expert) && -
    -
    - -
    +
    + {abPause && ( +
    + +
    + )} + + {this.state.disableBlocking && !showCondensed && ( + + )} + + {abPause && !this.state.disableBlocking && is_expert && !showCondensed && ( +
    + {this.props.pageHost}
    - } + )} -
    -
    + {!this.state.disableBlocking && !showCondensed && ( +
    + +
    + )} + {!this.state.disableBlocking && showCondensed && ( +
    {this.props.trackerCounts.allowed + this.props.trackerCounts.blocked || 0}
    -
    + )} -
    -
    + {!this.state.disableBlocking && (!abPause || !is_expert) && !showCondensed && ( +
    {this.props.pageHost}
    -
    + )} - { this.state.disableBlocking ? - - : -
    -
    - {t('summary_blocked')}:  - {this.props.trackerCounts.blocked} - { !showBody && - - } -
    -
    - { (this.props.alertCounts.total === 1) ? t('summary_alert') : t('summary_alerts') }:  - {this.props.alertCounts.total} - { !showBody && - - } -
    -
    - { t('page_load') }:  - {this.state.trackerLatencyTotal ? `${this.state.trackerLatencyTotal} ${t('settings_seconds')}` : '–'} - { !showBody && - - } -
    -
    - } - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    + {!this.state.disableBlocking && ( +
    +
    + {t('trackers_blocked')} + + {this.props.trackerCounts.blocked || 0} +
    -
    -
    -
    - -
    -
    - -
    -
    - - - -
    -
    +
    + {t('page_load')} + + {this.state.trackerLatencyTotal ? `${this.state.trackerLatencyTotal} ${t('settings_seconds')}` : '-'} +
    - {(this.props.is_expert && !this.props.is_expanded) && -
    { t('summary_map_these_trackers') }
    - }
    + )} + + {this.state.disableBlocking && is_expert && showCondensed && ( +
    + )} + +
    + + + {!abPause && ( + + )} +
    + +
    +
    + + {is_expert && !showCondensed && ( +
    + { t('summary_map_these_trackers') } +
    + )} +
    ); } diff --git a/app/panel/components/Tooltip.jsx b/app/panel/components/Tooltip.jsx index 02f2264ca..bb28f6128 100644 --- a/app/panel/components/Tooltip.jsx +++ b/app/panel/components/Tooltip.jsx @@ -13,8 +13,10 @@ import React, { Component } from 'react'; import ReactDOM from 'react-dom'; +import ClassNames from 'classnames'; + /** - * @class Implements tooltip component used throughout the views. + * @class Implements a Tooltip component that is used in many panel views. * @memberof PanelClasses */ class Tooltip extends React.Component { @@ -23,7 +25,13 @@ class Tooltip extends React.Component { this.state = { show: false, }; + + // Event Bindings + this.delayHover = this.delayHover.bind(this); + this.enter = this.enter.bind(this); + this.leave = this.leave.bind(this); } + /** * Lifecycle event. Set listeners. */ @@ -34,6 +42,7 @@ class Tooltip extends React.Component { this.parentNode.addEventListener('mouseleave', this.leave); this.parentNode.addEventListener('click', this.leave); } + /** * Lifecycle event. Remove listeners. */ @@ -42,34 +51,47 @@ class Tooltip extends React.Component { this.parentNode.removeEventListener('mouseleave', this.leave); this.parentNode.removeEventListener('click', this.leave); } + /** - * Set 1 sec delay for showing the tooltip. + * Implements mouseenter. Sets a delay for showing the tooltip with a default of 1 second. */ - delayHover = (e) => { + delayHover() { + const delayType = typeof this.props.delay; + const delay = (delayType === 'number' || delayType === 'string') ? +this.props.delay : 1000; this.delay = setTimeout(() => { this.enter(); - }, 1000); + }, delay); } + /** - * Set tooltip show state. + * Sets the state for Show. */ - enter = () => { + enter() { this.setState({ show: true }); + if (this.props.disabled && this.props.showNotification && this.props.alertText) { + this.props.showNotification({ text: this.props.alertText, classes: 'warning', filter: 'tooltip' }); + } } + /** - * Implement handler for mouseleave event and hide the tooltip. + * Implements mouseleave. */ - leave = (e) => { + leave() { clearTimeout(this.delay); this.setState({ show: false }); } + /** - * Render Tooltip component. - * @return {ReactComponent} ReactComponent instance + * React's required render function. Returns JSX + * @return {JSX} JSX for rendering the Tooltip component */ render() { + const compClassNames = ClassNames({ + 'dark-theme': this.props.theme === 'dark', + }); + return ( - + {this.state.show && {this.props.header && diff --git a/app/panel/components/__tests__/PauseButton.jsx b/app/panel/components/__tests__/PauseButton.jsx new file mode 100644 index 000000000..b0e78f2cb --- /dev/null +++ b/app/panel/components/__tests__/PauseButton.jsx @@ -0,0 +1,163 @@ +/** + * Pause Button Test Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React from 'react'; +import renderer from 'react-test-renderer'; +import { shallow } from 'enzyme'; +import PauseButton from '../BuildingBlocks/PauseButton'; + +// Fake the translation function to only return the translation key +global.t = function (str) { + return str; +}; + +// Fake the Tooltip implementation +jest.mock('../Tooltip'); + +describe('app/panel/components/BuildingBlocks/PauseButton.jsx', () => { + describe('Snapshot tests with react-test-renderer', () => { + test('unpaused state in simple view', () => { + const initialState = { + isAbPause: false, + isPaused: false, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: true, + isCondensed: false, + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('paused state in detailed view', () => { + const initialState = { + isAbPause: false, + isPaused: true, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: false, + isCondensed: false, + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('paused state in detailed condensed view', () => { + const initialState = { + isAbPause: true, + isPaused: true, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: false, + isCondensed: true, + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); + }); + }); + + describe('Shallow snapshot tests rendered with Enzyme', () => { + test('the state of the pause button correctly when Ghostery is not paused', () => { + const initialState = { + isPaused: false, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: false, + isCondensed: false, + }; + const component = shallow(); + expect(component.find('.button').length).toBe(2); + expect(component.find('.button.button-pause').length).toBe(1); + expect(component.find('.button.button-pause.active').length).toBe(0); + expect(component.find('.button.button-pause.smaller').length).toBe(1); + expect(component.find('.button.button-pause.smallest').length).toBe(0); + expect(component.find('.dropdown-container').length).toBe(1); + expect(component.find('.dropdown-container .dropdown-item').length).toBe(0); + expect(component.find('.button-caret').length).toBe(1); + expect(component.find('.button-caret.active').length).toBe(0); + component.setState({ showDropdown: true }); + expect(component.find('.dropdown-container .dropdown-item').length).toBe(3); + expect(component.find('.dropdown-container .dropdown-item.selected').length).toBe(0); + expect(component.find('.button-caret.active').length).toBe(1); + }); + + test('the state of the pause button correctly when Ghostery is paused', () => { + const initialState = { + isPaused: true, + isPausedTimeout: 1800000, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: true, + isCondensed: false, + }; + const component = shallow(); + expect(component.find('.button').length).toBe(2); + expect(component.find('.button.button-pause').length).toBe(1); + expect(component.find('.button.button-pause.active').length).toBe(1); + expect(component.find('.button.button-pause.smaller').length).toBe(0); + expect(component.find('.button.button-pause.smallest').length).toBe(0); + expect(component.find('.dropdown-container').length).toBe(1); + expect(component.find('.dropdown-container .dropdown-item').length).toBe(0); + expect(component.find('.button-caret').length).toBe(1); + expect(component.find('.button-caret.active').length).toBe(0); + component.setState({ showDropdown: true }); + expect(component.find('.dropdown-container .dropdown-item').length).toBe(3); + expect(component.find('.dropdown-container .dropdown-item.selected').length).toBe(1); + expect(component.find('.button-caret.active').length).toBe(1); + }); + + test('the pause button correctly it is centered and condensed', () => { + const initialState = { + isPaused: false, + isPausedTimeout: null, + clickPause: () => {}, + dropdownItems: [ + { name: t('pause_30_min'), name_condensed: t('pause_30_min_condensed'), val: 30 }, + { name: t('pause_1_hour'), name_condensed: t('pause_1_hour_condensed'), val: 60 }, + { name: t('pause_24_hours'), name_condensed: t('pause_24_hours_condensed'), val: 1440 }, + ], + isCentered: true, + isCondensed: true, + }; + const component = shallow(); + expect(component.find('.button').length).toBe(2); + expect(component.find('.button.button-pause').length).toBe(1); + expect(component.find('.button.button-pause.smaller').length).toBe(0); + expect(component.find('.button.button-pause.smallest').length).toBe(1); + }); + }); +}); diff --git a/app/panel/components/__tests__/RewardDetail.jsx b/app/panel/components/__tests__/RewardDetail.jsx new file mode 100644 index 000000000..ccbd45a48 --- /dev/null +++ b/app/panel/components/__tests__/RewardDetail.jsx @@ -0,0 +1,179 @@ +/** + * Reward Detail Test Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React from 'react'; +import renderer from 'react-test-renderer'; +import { shallow } from 'enzyme'; +import RewardDetail from '../BuildingBlocks/RewardDetail'; + +// Fake the translation function to only return the translation key +global.t = function (str) { + return str; +}; + +// Fake the Tooltip implementation +jest.mock('../Tooltip'); + +describe('app/panel/components/BuildingBlocks/RewardDetail.jsx', () => { + describe('Snapshot tests with react-test-renderer', () => { + test('reward detail is rendered with all values present', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + code: 'test_code', + conditions: 'test reward conditions', + description: 'test reward description', + expires: 1527880170315, + id: 'test_reward_id', + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + pictureUrl: 'https://www.ghostery.com/wp-content/uploads/2017/12/simple-detailed-1024x833.png', + redeemUrl: 'https://www.offer-redeem-test.com', + redeemText: 'redeem now', + text: 'test reward title' + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('reward detail is rendered with missing text', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + code: 'test_code', + conditions: 'test reward conditions', + description: 'test reward description', + expires: 1527880170315, + id: 'test_reward_id', + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + pictureUrl: 'https://www.ghostery.com/wp-content/uploads/2017/12/simple-detailed-1024x833.png', + redeemUrl: 'https://www.offer-redeem-test.com', + redeemText: 'redeem now', + text: '' + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('reward detail is rendered with missing description', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + code: 'test_code', + conditions: 'test reward conditions', + description: '', + expires: 1527880170315, + id: 'test_reward_id', + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + pictureUrl: 'https://www.ghostery.com/wp-content/uploads/2017/12/simple-detailed-1024x833.png', + redeemUrl: 'https://www.offer-redeem-test.com', + redeemText: 'redeem now', + text: 'test reward title' + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('reward detail is rendered with missing code', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + code: '', + conditions: 'test reward conditions', + description: 'test reward description', + expires: 1527880170315, + id: 'test_reward_id', + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + pictureUrl: 'https://www.ghostery.com/wp-content/uploads/2017/12/simple-detailed-1024x833.png', + redeemUrl: 'https://www.offer-redeem-test.com', + redeemText: 'redeem now', + text: 'test reward title' + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('reward detail is rendered with missing conditions', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + code: 'test_code', + conditions: '', + description: 'test reward description', + expires: 1527880170315, + id: 'test_reward_id', + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + pictureUrl: 'https://www.ghostery.com/wp-content/uploads/2017/12/simple-detailed-1024x833.png', + redeemUrl: 'https://www.offer-redeem-test.com', + redeemText: 'redeem now', + text: 'test reward title' + }; + const component = renderer.create().toJSON(); + expect(component).toMatchSnapshot(); + }); + }); + + describe('Shallow snapshot tests rendered with Enzyme', () => { + test('reward detail is rendered correctly the code is copied', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + code: 'test_code', + conditions: 'test reward conditions', + description: 'test reward description', + expires: 1527880170315, + id: 'test_reward_id', + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + pictureUrl: 'https://www.ghostery.com/wp-content/uploads/2017/12/simple-detailed-1024x833.png', + redeemUrl: 'https://www.offer-redeem-test.com', + redeemText: 'redeem now', + text: 'test reward title' + }; + const component = shallow(); + expect(component.text()).toEqual(expect.stringContaining('rewards_copy_code')); + expect(component.text()).not.toEqual(expect.stringContaining('rewards_code_copied')); + component.setState({ copyText: t('rewards_code_copied') }); + expect(component.text()).not.toEqual(expect.stringContaining('rewards_copy_code')); + expect(component.text()).toEqual(expect.stringContaining('rewards_code_copied')); + }); + }); +}); diff --git a/app/panel/components/__tests__/RewardListItem.jsx b/app/panel/components/__tests__/RewardListItem.jsx new file mode 100644 index 000000000..ec8e6440e --- /dev/null +++ b/app/panel/components/__tests__/RewardListItem.jsx @@ -0,0 +1,156 @@ +/** + * Reward List Item Test Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React from 'react'; +import renderer from 'react-test-renderer'; +import { MemoryRouter } from 'react-router'; +import RewardListItem from '../BuildingBlocks/RewardListItem'; + +// Fake the translation function to only return the translation key +global.t = function (str) { + return str; +}; + +describe('app/panel/components/BuildingBlocks/RewardListItem.jsx', () => { + describe('Snapshot tests with react-test-renderer', () => { + test('reward list item is rendered correctly', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + disabled: false, + expires: 1527885633645, + id: 'test_reward_id', + index: 0, + isLong: false, + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + text: 'test reward title', + unread: false + }; + const component = renderer.create( + + + + ).toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('reward list item is rendered correctly when disabled', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + disabled: true, + expires: 1527885633645, + id: 'test_reward_id', + index: 0, + isLong: false, + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + text: 'test reward title', + unread: false + }; + const component = renderer.create( + + + + ).toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('reward list item is rendered correctly when unread', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + disabled: false, + expires: 1527885633645, + id: 'test_reward_id', + index: 0, + isLong: false, + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + text: 'test reward title', + unread: true + }; + const component = renderer.create( + + + + ).toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('reward list item is rendered correctly when elongated', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + disabled: false, + expires: 1527885633645, + id: 'test_reward_id', + index: 0, + isLong: true, + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + text: 'test reward title', + unread: false + }; + const component = renderer.create( + + + + ).toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('reward list item is rendered correctly when disabled, unread, and elongated', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + toggleOffersEnabled: () => {}, + removeOffer: () => {}, + setOfferRead: () => {}, + sendSignal: () => {} + }, + disabled: true, + expires: 1527885633645, + id: 'test_reward_id', + index: 0, + isLong: true, + logoUrl: 'https://www.ghostery.com/wp-content/themes/ghostery/images/ghostery_logo.svg', + text: 'test reward title', + unread: true + }; + const component = renderer.create( + + + + ).toJSON(); + expect(component).toMatchSnapshot(); + }); + }); +}); diff --git a/app/panel/components/__tests__/Rewards.jsx b/app/panel/components/__tests__/Rewards.jsx new file mode 100644 index 000000000..8ceb2cf7a --- /dev/null +++ b/app/panel/components/__tests__/Rewards.jsx @@ -0,0 +1,66 @@ +/** + * Rewards Test Component + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import React from 'react'; +import renderer from 'react-test-renderer'; +import { MemoryRouter } from 'react-router'; +import Rewards from '../Rewards'; + +// Fake the translation function to only return the translation key +global.t = function (str) { + return str; +}; + +describe('app/panel/components/Rewards.jsx', () => { + describe('Snapshot tests with react-test-renderer', () => { + test('rewards is rendered correctly when rewards is on and rewards is null', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + sendSignal: () => {}, + }, + location: { + pathname: '/detail/rewards/list', + }, + enable_offers: true, + is_expanded: false + }; + const component = renderer.create( + + + + ).toJSON(); + expect(component).toMatchSnapshot(); + }); + + test('rewards is rendered correctly when rewards is off and rewards is null', () => { + const initialState = { + actions: { + getRewardsData: () => {}, + sendSignal: () => {}, + }, + location: { + pathname: '/detail/rewards/list', + }, + enable_offers: false, + is_expanded: false + }; + const component = renderer.create( + + + + ).toJSON(); + expect(component).toMatchSnapshot(); + }); + }); +}); diff --git a/app/panel/components/__tests__/__snapshots__/PauseButton.jsx.snap b/app/panel/components/__tests__/__snapshots__/PauseButton.jsx.snap new file mode 100644 index 000000000..d76978d58 --- /dev/null +++ b/app/panel/components/__tests__/__snapshots__/PauseButton.jsx.snap @@ -0,0 +1,116 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`app/panel/components/BuildingBlocks/PauseButton.jsx Snapshot tests with react-test-renderer paused state in detailed condensed view 1`] = ` +
    +
    +
    + +
    +
    + + summary_show_menu + +
    +
    +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/PauseButton.jsx Snapshot tests with react-test-renderer paused state in detailed view 1`] = ` +
    +
    +
    + + summary_resume_ghostery + +
    +
    + + summary_show_menu + +
    +
    +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/PauseButton.jsx Snapshot tests with react-test-renderer unpaused state in simple view 1`] = ` +
    +
    +
    + + summary_pause_ghostery + +
    +
    + + summary_show_menu + +
    +
    +
    +
    +`; diff --git a/app/panel/components/__tests__/__snapshots__/RewardDetail.jsx.snap b/app/panel/components/__tests__/__snapshots__/RewardDetail.jsx.snap new file mode 100644 index 000000000..a6eb32169 --- /dev/null +++ b/app/panel/components/__tests__/__snapshots__/RewardDetail.jsx.snap @@ -0,0 +1,339 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`app/panel/components/BuildingBlocks/RewardDetail.jsx Snapshot tests with react-test-renderer reward detail is rendered with all values present 1`] = ` +
    +
    + + +
    +
    + test reward title +
    +
    + test reward description +
    +
    + + + test_code + + + + + rewards_copy_code + +
    +
    +
    + rewards_expires_in +
    +
    + + rewards_terms_conditions + +
    +
    +
    + redeem now +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/RewardDetail.jsx Snapshot tests with react-test-renderer reward detail is rendered with missing code 1`] = ` +
    +
    + + +
    +
    + test reward title +
    +
    + test reward description +
    + +
    +
    + rewards_expires_in +
    +
    + + rewards_terms_conditions + +
    +
    +
    + redeem now +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/RewardDetail.jsx Snapshot tests with react-test-renderer reward detail is rendered with missing conditions 1`] = ` +
    +
    + + +
    +
    + test reward title +
    +
    + test reward description +
    +
    + + + test_code + + + + + rewards_copy_code + +
    +
    +
    + rewards_expires_in +
    + +
    +
    + redeem now +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/RewardDetail.jsx Snapshot tests with react-test-renderer reward detail is rendered with missing description 1`] = ` +
    +
    + + +
    +
    + test reward title +
    + +
    + + + test_code + + + + + rewards_copy_code + +
    +
    +
    + rewards_expires_in +
    +
    + + rewards_terms_conditions + +
    +
    +
    + redeem now +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/RewardDetail.jsx Snapshot tests with react-test-renderer reward detail is rendered with missing text 1`] = ` +
    +
    + + +
    + +
    + test reward description +
    +
    + + + test_code + + + + + rewards_copy_code + +
    +
    +
    + rewards_expires_in +
    +
    + + rewards_terms_conditions + +
    +
    +
    + redeem now +
    +
    +`; diff --git a/app/panel/components/__tests__/__snapshots__/RewardListItem.jsx.snap b/app/panel/components/__tests__/__snapshots__/RewardListItem.jsx.snap new file mode 100644 index 000000000..cb4237378 --- /dev/null +++ b/app/panel/components/__tests__/__snapshots__/RewardListItem.jsx.snap @@ -0,0 +1,331 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`app/panel/components/BuildingBlocks/RewardListItem.jsx Snapshot tests with react-test-renderer reward list item is rendered correctly 1`] = ` + +
    +
    + +
    +
    +
    + test reward title +
    +
    + rewards_expires_in +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/RewardListItem.jsx Snapshot tests with react-test-renderer reward list item is rendered correctly when disabled 1`] = ` + +
    +
    + +
    +
    +
    + test reward title +
    +
    + rewards_expires_in +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/RewardListItem.jsx Snapshot tests with react-test-renderer reward list item is rendered correctly when disabled, unread, and elongated 1`] = ` + +
    +
    + +
    +
    +
    + test reward title +
    +
    + rewards_expires_in +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/RewardListItem.jsx Snapshot tests with react-test-renderer reward list item is rendered correctly when elongated 1`] = ` + +
    +
    + +
    +
    +
    + test reward title +
    +
    + rewards_expires_in +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +`; + +exports[`app/panel/components/BuildingBlocks/RewardListItem.jsx Snapshot tests with react-test-renderer reward list item is rendered correctly when unread 1`] = ` + +
    +
    + +
    +
    +
    + test reward title +
    +
    + rewards_expires_in +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +`; diff --git a/app/panel/components/__tests__/__snapshots__/Rewards.jsx.snap b/app/panel/components/__tests__/__snapshots__/Rewards.jsx.snap new file mode 100644 index 000000000..88bdf5132 --- /dev/null +++ b/app/panel/components/__tests__/__snapshots__/Rewards.jsx.snap @@ -0,0 +1,133 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`app/panel/components/Rewards.jsx Snapshot tests with react-test-renderer rewards is rendered correctly when rewards is off and rewards is null 1`] = ` +
    +
    + + panel_detail_rewards_title + + + + rewards_off + +
    + +
    +
    +
    +
    + + + + + +
    + panel_detail_rewards_off +
    +
    +
    +`; + +exports[`app/panel/components/Rewards.jsx Snapshot tests with react-test-renderer rewards is rendered correctly when rewards is on and rewards is null 1`] = ` +
    +
    + + panel_detail_rewards_title + + + + rewards_on + +
    + +
    +
    +
    +
    + + + + + +
    + panel_detail_rewards_loading +
    +
    +
    +`; diff --git a/app/panel/constants/constants.js b/app/panel/constants/constants.js index 4ac0dcd96..3641211e0 100644 --- a/app/panel/constants/constants.js +++ b/app/panel/constants/constants.js @@ -14,7 +14,9 @@ // panel export const GET_PANEL_DATA = 'GET_PANEL_DATA'; export const SHOW_NOTIFICATION = 'SHOW_NOTIFICATION'; +export const TOGGLE_CLIQZ_FEATURE = 'TOGGLE_CLIQZ_FEATURE'; export const CLOSE_NOTIFICATION = 'CLOSE_NOTIFICATION'; +export const TOGGLE_EXPERT = 'TOGGLE_EXPERT'; export const LOGIN_SUCCESS = 'LOGIN_SUCCESS'; export const LOGIN_FAILED = 'LOGIN_FAILED'; export const LOGOUT = 'LOGOUT'; @@ -22,8 +24,6 @@ export const CREATE_ACCOUNT_SUCCESS = 'CREATE_ACCOUNT_SUCCESS'; export const CREATE_ACCOUNT_FAILED = 'CREATE_ACCOUNT_FAILED'; export const FORGOT_PASSWORD_SUCCESS = 'FORGOT_PASSWORD_SUCCESS'; export const FORGOT_PASSWORD_FAILED = 'FORGOT_PASSWORD_FAILED'; -export const TOGGLE_DRAWER_SETTING = 'TOGGLE_DRAWER_SETTING'; -export const UPDATE_NOTIFICATION_STATUS = 'UPDATE_NOTIFICATION_STATUS'; // summary export const GET_SUMMARY_DATA = 'GET_SUMMARY_DATA'; @@ -31,11 +31,17 @@ export const UPDATE_TRACKER_COUNTS = 'UPDATE_TRACKER_COUNTS'; export const UPDATE_GHOSTERY_PAUSED = 'UPDATE_GHOSTERY_PAUSED'; export const UPDATE_SITE_POLICY = 'UPDATE_SITE_POLICY'; export const FILTER_TRACKERS = 'FILTER_TRACKERS'; -export const TOGGLE_EXPERT = 'TOGGLE_EXPERT'; // detail export const TOGGLE_EXPANDED = 'TOGGLE_EXPANDED'; +// rewards +export const GET_REWARDS_DATA = 'GET_REWARDS_DATA'; +export const TOGGLE_OFFERS_ENABLED = 'TOGGLE_OFFERS_ENABLED'; +export const REMOVE_OFFER = 'REMOVE_OFFER'; +export const SET_OFFER_READ = 'SET_OFFER_READ'; +export const SEND_SIGNAL = 'SEND_SIGNAL'; + // blocking export const GET_BLOCKING_DATA = 'GET_BLOCKING_DATA'; export const UPDATE_CATEGORIES = 'UPDATE_CATEGORIES'; @@ -55,6 +61,7 @@ export const EXPORT_SETTINGS = 'EXPORT_SETTINGS'; export const SELECT_ITEM = 'SELECT_ITEM'; export const TOGGLE_CHECKBOX = 'TOGGLE_CHECKBOX'; export const UPDATE_DATABASE = 'UPDATE_DATABASE'; +export const UPDATE_NOTIFICATION_STATUS = 'UPDATE_NOTIFICATION_STATUS'; export const UPDATE_SETTINGS_BLOCK_ALL_TRACKERS = 'UPDATE_SETTINGS_BLOCK_ALL_TRACKERS'; export const UPDATE_SETTINGS_CATEGORY_BLOCKED = 'UPDATE_SETTINGS_CATEGORY_BLOCKED'; export const UPDATE_SETTINGS_TRACKER_BLOCKED = 'UPDATE_SETTINGS_TRACKER_BLOCKED'; @@ -63,8 +70,3 @@ export const SETTINGS_TOGGLE_EXPAND_ALL = 'SETTINGS_TOGGLE_EXPAND_ALL'; export const SETTINGS_TOGGLE_EXPAND_CATEGORY = 'SETTINGS_TOGGLE_EXPAND_CATEGORY'; export const SETTINGS_UPDATE_SEARCH_VALUE = 'SETTINGS_UPDATE_SEARCH_VALUE'; export const SETTINGS_FILTER = 'SETTINGS_FILTER'; - -// drawer -export const GET_CLIQZ_MODULE_DATA = 'GET_CLIQZ_MODULE_DATA'; -export const CLOSE_DRAWER = 'CLOSE_DRAWER'; -export const OPEN_DRAWER = 'OPEN_DRAWER'; diff --git a/app/panel/containers/BlockingContainer.js b/app/panel/containers/BlockingContainer.js index 58c809157..0af7a577c 100644 --- a/app/panel/containers/BlockingContainer.js +++ b/app/panel/containers/BlockingContainer.js @@ -27,6 +27,7 @@ import { showNotification } from '../actions/PanelActions'; * in this case it won't be passed by React (see https://github.com/reactjs/react-redux/blob/master/docs/api.md). */ const mapStateToProps = (state, ownProps) => Object.assign({}, state.blocking, { + is_expanded: state.panel.is_expanded, language: state.panel.language, pageHost: state.summary.pageHost, paused_blocking: state.summary.paused_blocking, diff --git a/app/panel/containers/DetailContainer.js b/app/panel/containers/DetailContainer.js index 63c586b2a..1ae6ccece 100644 --- a/app/panel/containers/DetailContainer.js +++ b/app/panel/containers/DetailContainer.js @@ -26,6 +26,8 @@ import * as actions from '../actions/DetailActions'; */ const mapStateToProps = (state, ownProps) => Object.assign({}, state.detail, { is_expanded: state.panel.is_expanded, + enable_offers: state.panel.enable_offers, + unread_offer_ids: state.panel.unread_offer_ids, }); /** * Bind Detailed view action creators using Redux's bindActionCreators diff --git a/app/panel/containers/PanelContainer.js b/app/panel/containers/PanelContainer.js index 2bfff2956..30d32e1ed 100644 --- a/app/panel/containers/PanelContainer.js +++ b/app/panel/containers/PanelContainer.js @@ -39,7 +39,7 @@ const mapStateToProps = (state, ownProps) => Object.assign({}, state.panel, stat * @return {function} to be used as an argument in redux connect call */ const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(Object.assign(panelActions, { filterTrackers }), dispatch), + actions: bindActionCreators(Object.assign({}, panelActions, { filterTrackers }), dispatch), }); /** * Connects Panel component to the Redux store. Pass updated match, location, and history props to the wrapped component. diff --git a/app/panel/containers/DrawerContainer.js b/app/panel/containers/RewardsContainer.js similarity index 54% rename from app/panel/containers/DrawerContainer.js rename to app/panel/containers/RewardsContainer.js index 1efac8c12..45f48fb3a 100644 --- a/app/panel/containers/DrawerContainer.js +++ b/app/panel/containers/RewardsContainer.js @@ -1,5 +1,5 @@ /** - * Drawer Container + * Rewards Container * * Ghostery Browser Extension * https://www.ghostery.com/ @@ -12,36 +12,42 @@ */ import { connect } from 'react-redux'; +import { withRouter } from 'react-router-dom'; import { bindActionCreators } from 'redux'; -import Drawer from '../components/Drawer'; -import * as drawerActions from '../actions/DrawerActions'; +import Rewards from '../components/Rewards'; +import * as actions from '../actions/RewardsActions'; import { showNotification } from '../actions/PanelActions'; + /** - * Map redux store state properties to Drawer component own properties. - * @memberOf PanelContainers + * Map redux store state properties to Rewards view own properties. + * @memberof PanelContainers * @param {Object} state entire Redux store's state * @param {Object} ownProps props passed to the connected component - * @return {function} this function returns plain object, which will be merged into Drawer component props + * @return {function} this function returns plain object, which will be merged into Detailed view props * @todo We are not using ownProps, so we better not specify it explicitly, * in this case it won't be passed by React (see https://github.com/reactjs/react-redux/blob/master/docs/api.md). */ -const mapStateToProps = (state, ownProps) => Object.assign({}, state.drawer); +const mapStateToProps = (state, ownProps) => Object.assign({}, state.rewards, { + is_expanded: state.panel.is_expanded, +}); + /** - * Bind Drawer component action creators using Redux's bindActionCreators - * @memberOf PanelContainers + * Bind Rewards view action creators using Redux's bindActionCreators + * @memberof PanelContainers * @param {function} dispatch redux store method which dispatches actions - * @param {Object} ownProps Drawer component own props + * @param {Object} ownProps Detailed view component own props * @return {function} to be used as an argument in redux connect call */ const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(Object.assign(drawerActions, { showNotification }), dispatch), + actions: bindActionCreators(Object.assign(actions, { showNotification }), dispatch) }); + /** - * Connects Drawer component to the Redux store. - * @memberOf PanelContainers - * @param {function} mapStateToProps maps redux store state properties to Drawer component own properties - * @param {function} mapDispatchToProps binds Drawer component action creators + * Connects Rewards view component to the Redux store. Pass updated match, location, and history props to the wrapped component. + * @memberof PanelContainers + * @param {function} mapStateToProps maps redux store state properties to Detailed view own properties + * @param {function} mapDispatchToProps binds Detailed view component action creators * @return {Object} A higher-order React component class that passes state and action - * creators into Drawer component. Used by React framework. + * creators into Detailed view component. Used by React framework. */ -export default connect(mapStateToProps, mapDispatchToProps)(Drawer); +export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Rewards)); diff --git a/app/panel/containers/SettingsContainer.js b/app/panel/containers/SettingsContainer.js index 0cb873d39..894555a3d 100644 --- a/app/panel/containers/SettingsContainer.js +++ b/app/panel/containers/SettingsContainer.js @@ -16,6 +16,7 @@ import Settings from '../components/Settings'; import * as settingsActions from '../actions/SettingsActions'; import { toggleExpanded } from '../actions/DetailActions'; import { updateSitePolicy } from '../actions/SummaryActions'; +import { sendSignal } from '../actions/RewardsActions'; /** * Map redux store state properties to Settings view component own properties. * @memberOf PanelContainers @@ -50,6 +51,7 @@ const mapDispatchToProps = (dispatch, ownProps) => ({ actions: bindActionCreators(Object.assign(settingsActions, { toggleExpanded, updateSitePolicy, + sendSignal, }), dispatch), }); /** diff --git a/app/panel/containers/SummaryContainer.js b/app/panel/containers/SummaryContainer.js index e48b29cff..d128280c6 100644 --- a/app/panel/containers/SummaryContainer.js +++ b/app/panel/containers/SummaryContainer.js @@ -16,7 +16,6 @@ import { bindActionCreators } from 'redux'; import Summary from '../components/Summary'; import * as summaryActions from '../actions/SummaryActions'; import * as panelActions from '../actions/PanelActions'; -import * as drawerActions from '../actions/DrawerActions'; /** * Map redux store state properties to Summary view component own properties. * @memberOf PanelContainers @@ -26,7 +25,7 @@ import * as drawerActions from '../actions/DrawerActions'; * @todo We are not using ownProps, so we better not specify it explicitly, * in this case it won't be passed by React (see https://github.com/reactjs/react-redux/blob/master/docs/api.md). */ -const mapStateToProps = (state, ownProps) => Object.assign({}, state.summary, state.panel, state.drawer, { +const mapStateToProps = (state, ownProps) => Object.assign({}, state.summary, state.panel, { is_expanded: state.panel.is_expanded, is_expert: state.panel.is_expert, tab_id: state.panel.tab_id, @@ -39,7 +38,7 @@ const mapStateToProps = (state, ownProps) => Object.assign({}, state.summary, st * @return {function} to be used as an argument in redux connect call */ const mapDispatchToProps = (dispatch, ownProps) => ({ - actions: bindActionCreators(Object.assign(summaryActions, panelActions, drawerActions), dispatch), + actions: bindActionCreators(Object.assign(summaryActions, panelActions), dispatch), }); /** * Connects Summary view component to the Redux store. Pass updated match, location, and history props to the wrapped component. diff --git a/app/panel/reducers/__tests__/rewards.js b/app/panel/reducers/__tests__/rewards.js new file mode 100644 index 000000000..ee109941f --- /dev/null +++ b/app/panel/reducers/__tests__/rewards.js @@ -0,0 +1,132 @@ +/** + * Test file for the Rewards Reducer + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import Immutable from 'seamless-immutable'; +import rewardsReducer from '../rewards'; +import { + GET_REWARDS_DATA, + TOGGLE_OFFERS_ENABLED, + REMOVE_OFFER, + SET_OFFER_READ, + SEND_SIGNAL +} from '../../constants/constants'; + +// Copied from app/panel/reducers/rewards.js +const initialState = Immutable({ + rewards: null, + enable_offers: false, + unread_offer_ids: [], +}); + +describe('app/panel/reducers/rewards.js', () => { + test('initial state is correct', () => { + expect(rewardsReducer(undefined, {})).toEqual(initialState); + }); + + test('reducer correctly handles GET_REWARDS_DATA', () => { + const data = { test: true }; + const action = { data, type: GET_REWARDS_DATA }; + const initState = Immutable({}); + + expect(rewardsReducer(initState, action)).toEqual(data); + }); + + test('reducer correctly handles TOGGLE_OFFERS_ENABLED', () => { + const data = { enabled: true }; + const action = { data, type: TOGGLE_OFFERS_ENABLED }; + + const updatedState = Immutable.merge(initialState, { + enable_offers: action.data.enabled, + }); + + expect(rewardsReducer(initialState, action)).toEqual(updatedState); + }); + + test('reducer correctly handles REMOVE_OFFER', () => { + const data = { id: 'test_reward_id' }; + const action = { data, type: REMOVE_OFFER }; + + const initState = Immutable({ + rewards: { + test_reward_id: { reward: 'test' }, + test_reward_id_alt: { reward: 'test_alt' }, + }, + enable_offers: true, + unread_offer_ids: ['test_reward_id', 'test_reward_id_alt'], + }); + + expect(rewardsReducer(initState, action)).toEqual({ + rewards: { + test_reward_id_alt: { reward: 'test_alt' }, + }, + enable_offers: true, + unread_offer_ids: ['test_reward_id_alt'], + }); + }); + + test('reducer correctly handles SET_OFFER_READ', () => { + const data = { id: 'test_reward_id' }; + const action = { data, type: SET_OFFER_READ }; + + const initState = Immutable({ + rewards: { + test_reward_id: { reward: 'test' }, + test_reward_id_alt: { reward: 'test_alt' }, + }, + enable_offers: true, + unread_offer_ids: ['test_reward_id', 'test_reward_id_alt'], + }); + + expect(rewardsReducer(initState, action)).toEqual({ + rewards: { + test_reward_id: { reward: 'test' }, + test_reward_id_alt: { reward: 'test_alt' }, + }, + enable_offers: true, + unread_offer_ids: ['test_reward_id_alt'], + }); + }); + + test('reducer correctly handles SET_OFFER_READ when offer is not new', () => { + const data = { id: 'test_reward_id' }; + const action = { data, type: SET_OFFER_READ }; + + const initState = Immutable({ + rewards: { + test_reward_id: { reward: 'test' }, + test_reward_id_alt: { reward: 'test_alt' }, + }, + enable_offers: true, + unread_offer_ids: ['test_reward_id_alt'], + }); + + expect(rewardsReducer(initState, action)).toEqual({ + rewards: { + test_reward_id: { reward: 'test' }, + test_reward_id_alt: { reward: 'test_alt' }, + }, + enable_offers: true, + unread_offer_ids: ['test_reward_id_alt'], + }); + }); + + test('reducer correctly handles SEND_SIGNAL', () => { + const data = { + actionId: 'action_id', + offerId: 'offer_id', + }; + const action = { data, type: SEND_SIGNAL }; + + expect(rewardsReducer(initialState, action)).toEqual(initialState); + }); +}); diff --git a/app/panel/reducers/__tests__/summary.js b/app/panel/reducers/__tests__/summary.js new file mode 100644 index 000000000..c198fa0a1 --- /dev/null +++ b/app/panel/reducers/__tests__/summary.js @@ -0,0 +1,102 @@ +/** + * Test file for the Summary Reducer + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import Immutable from 'seamless-immutable'; +import summaryReducer from '../summary'; +import { + GET_SUMMARY_DATA, + UPDATE_TRACKER_COUNTS, + UPDATE_GHOSTERY_PAUSED, + UPDATE_SITE_POLICY +} from '../../constants/constants'; + +// Copied from app/panel/reducers/summary.js +const initialState = Immutable({ + alertCounts: { + total: 0, + }, + pageHost: '', + pageUrl: '', + paused_blocking: false, + siteNotScanned: false, + trackerCounts: { + allowed: 0, + blocked: 0, + }, + tab_id: 0, +}); + +describe('app/panel/reducers/summary.js', () => { + test('initial state is correct', () => { + expect(summaryReducer(undefined, {})).toEqual(initialState); + }); + + test('reducer correctly handles GET_SUMMARY_DATA', () => { + const data = { test: true }; + const action = { data, type: GET_SUMMARY_DATA }; + const initState = Immutable({}); + + expect(summaryReducer(initState, action)).toEqual(data); + }); + + test('reducer correctly handles UPDATE_GHOSTERY_PAUSED', () => { + const data = { time: null, ghosteryPaused: true }; + const action = { data, type: UPDATE_GHOSTERY_PAUSED }; + + const updatedState = Immutable.merge(initialState, { + paused_blocking: data.ghosteryPaused, + paused_blocking_timeout: data.time + }); + + expect(summaryReducer(undefined, action)).toEqual(updatedState); + }); + + test('reducer correctly handles UPDATE_SITE_POLICY', () => { + const data = { type: 'blacklist' }; + const action = { data, type: UPDATE_SITE_POLICY }; + + const initState = Immutable({ + pageHost: 'www.cnn.com', + sitePolicy: 2, + site_blacklist: [], + site_whitelist: ['cnn.com'] + }); + + expect(summaryReducer(initState, action)).toEqual({ + pageHost: 'www.cnn.com', + sitePolicy: 1, + site_blacklist: ['cnn.com'], + site_whitelist: [] + }); + }); + + test('reducer correctly handles UPDATE_TRACKER_COUNTS', () => { + const data = { + num_blocked: 3, + num_total: 8, + num_ss_blocked: 1, + num_ss_allowed: 2 + }; + const action = { data, type: UPDATE_TRACKER_COUNTS }; + const initState = Immutable({}); + + expect(summaryReducer(initState, action)).toEqual({ + trackerCounts: { + blocked: 3, + allowed: 5, + ssBlocked: 1, + ssAllowed: 2 + } + }); + }); +}); diff --git a/app/panel/reducers/blocking.js b/app/panel/reducers/blocking.js index ce691ed99..d1ec55feb 100644 --- a/app/panel/reducers/blocking.js +++ b/app/panel/reducers/blocking.js @@ -12,7 +12,8 @@ */ /* eslint no-use-before-define: 0 */ -import { GET_BLOCKING_DATA, +import { + GET_BLOCKING_DATA, FILTER_TRACKERS, UPDATE_BLOCK_ALL_TRACKERS, UPDATE_CATEGORIES, @@ -20,7 +21,8 @@ import { GET_BLOCKING_DATA, UPDATE_TRACKER_BLOCKED, UPDATE_TRACKER_TRUST_RESTRICT, TOGGLE_EXPAND_ALL, - TOGGLE_EXPAND_CATEGORY } from '../constants/constants'; + TOGGLE_EXPAND_CATEGORY +} from '../constants/constants'; import { updateTrackerBlocked, updateCategoryBlocked, updateBlockAllTrackers, toggleExpandAll, toggleExpandCategory } from '../utils/blocking'; import { removeFromObject, updateObject } from '../utils/utils'; import { sendMessage } from '../utils/msg'; diff --git a/app/panel/reducers/drawer.js b/app/panel/reducers/drawer.js deleted file mode 100644 index 88c371668..000000000 --- a/app/panel/reducers/drawer.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Drawer Reducer - * - * Ghostery Browser Extension - * https://www.ghostery.com/ - * - * Copyright 2018 Ghostery, Inc. All rights reserved. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0 - */ -import { GET_CLIQZ_MODULE_DATA, - OPEN_DRAWER, - CLOSE_DRAWER } from '../constants/constants'; - -const initialState = { - activeDrawerType: null, - adBlock: {}, - antiTracking: {}, - drawerIsOpen: false, -}; -/** - * Default export for drawer component reducer. - * @memberOf PanelReactReducers - * - * @param {Object} state current state - * @param {Object} action action which provides data - * @return {Object} updated state clone - */ -export default (state = initialState, action) => { - switch (action.type) { - case GET_CLIQZ_MODULE_DATA: { - return Object.assign({}, state, { adBlock: action.data.adblock, antiTracking: action.data.antitracking }); - } - case OPEN_DRAWER: { - return Object.assign({}, state, { - drawerIsOpen: true, - activeDrawerType: action.data, - }); - } - case CLOSE_DRAWER: { - return Object.assign({}, state, { drawerIsOpen: false }); - } - default: return state; - } -}; diff --git a/app/panel/reducers/index.js b/app/panel/reducers/index.js index a32f293ac..fa627f7f1 100644 --- a/app/panel/reducers/index.js +++ b/app/panel/reducers/index.js @@ -17,12 +17,12 @@ import { combineReducers } from 'redux'; import panel from './panel'; import summary from './summary'; import detail from './detail'; +import rewards from './rewards'; import blocking from './blocking'; import login from './login'; import createAccount from './createAccount'; import settings from './settings'; import forgotPassword from './forgotPassword'; -import drawer from './drawer'; /** * Export combined reducers object which provides * the full list of reducers. To be imported by React. @@ -35,12 +35,12 @@ const Reducers = combineReducers({ panel, summary, detail, + rewards, blocking, login, createAccount, settings, forgotPassword, - drawer, }); export default Reducers; diff --git a/app/panel/reducers/panel.js b/app/panel/reducers/panel.js index d896a51b0..c6c537023 100644 --- a/app/panel/reducers/panel.js +++ b/app/panel/reducers/panel.js @@ -13,7 +13,8 @@ /* eslint no-use-before-define: 0 */ -import { GET_PANEL_DATA, +import { + GET_PANEL_DATA, SHOW_NOTIFICATION, CLOSE_NOTIFICATION, LOGIN_SUCCESS, @@ -21,9 +22,14 @@ import { GET_PANEL_DATA, CREATE_ACCOUNT_SUCCESS, TOGGLE_EXPANDED, TOGGLE_EXPERT, - TOGGLE_DRAWER_SETTING, - UPDATE_NOTIFICATION_STATUS } from '../constants/constants'; -import { sendMessage } from '../utils/msg'; + TOGGLE_CLIQZ_FEATURE, + UPDATE_NOTIFICATION_STATUS, + TOGGLE_CHECKBOX, + TOGGLE_OFFERS_ENABLED, + REMOVE_OFFER, + SET_OFFER_READ +} from '../constants/constants'; +import { sendMessage, sendMessageInPromise } from '../utils/msg'; const initialState = { enable_ad_block: true, @@ -71,7 +77,6 @@ export default (state = initialState, action) => { return Object.assign({}, state, updated); } case CREATE_ACCOUNT_SUCCESS: - sendMessage('ping', 'create_account_extension'); return Object.assign({}, state, { logged_in: true, email: action.data.ClaimEmailAddress, @@ -93,9 +98,9 @@ export default (state = initialState, action) => { decoded_user_token: action.data.decoded_user_token, }); } - case TOGGLE_DRAWER_SETTING: { + case TOGGLE_CLIQZ_FEATURE: { let pingName = ''; - switch (action.data.settingName) { + switch (action.data.featureName) { case 'enable_anti_tracking': pingName = action.data.isEnabled ? 'antitrack_off' : 'antitrack_on'; break; @@ -108,11 +113,12 @@ export default (state = initialState, action) => { default: break; } - if (pingName) { - sendMessage('ping', pingName); - } - sendMessage('setPanelData', { [action.data.settingName]: !action.data.isEnabled }); - return Object.assign({}, state, { [action.data.settingName]: !action.data.isEnabled }); + sendMessageInPromise('setPanelData', { [action.data.featureName]: !action.data.isEnabled }).then(() => { + if (pingName) { + sendMessage('ping', pingName); + } + }); + return Object.assign({}, state, { [action.data.featureName]: !action.data.isEnabled }); } case TOGGLE_EXPANDED: { sendMessage('setPanelData', { is_expanded: !state.is_expanded }); @@ -139,6 +145,27 @@ export default (state = initialState, action) => { const updated = _updateNotificationStatus(state, action); return Object.assign({}, state, updated); } + case TOGGLE_CHECKBOX: { + if (action.data.event === 'enable_offers') { + const enable_offers = action.data.checked; + return Object.assign({}, state, { enable_offers }); + } + return state; + } + case TOGGLE_OFFERS_ENABLED: { + const enable_offers = action.data.enabled; + return Object.assign({}, state, { enable_offers }); + } + case REMOVE_OFFER: + case SET_OFFER_READ: { + const unread_offer_ids = state.unread_offer_ids.slice(); + const idx = unread_offer_ids.indexOf(action.data.id); + if (idx !== -1) { + unread_offer_ids.splice(idx, 1); + return Object.assign({}, state, { unread_offer_ids }); + } + return state; + } default: return state; } }; @@ -185,13 +212,13 @@ const _showNotification = (state, action) => { sendMessage('setPanelData', { needsReload: updated_needsReload }); // if we have changes and the user wants to see banners, then show - if (Object.keys(updated_needsReload.changes).length > 0 && reloadBannerStatus.show && nowTime > reloadBannerStatus.show_time) { + if ((msg.text || Object.keys(updated_needsReload.changes).length > 0) && reloadBannerStatus.show && nowTime > reloadBannerStatus.show_time) { updated_notificationShown = true; } else { updated_notificationShown = false; } - updated_notificationClasses = 'warning'; + updated_notificationClasses = msg.classes || 'warning'; } else { // Notification banners (success/warnings) if (trackersBannerStatus.show && nowTime > trackersBannerStatus.show_time) { @@ -200,9 +227,11 @@ const _showNotification = (state, action) => { updated_notificationShown = false; } - updated_notificationClasses = msg.classes; + updated_notificationClasses = msg.classes || ''; + if (msg.filter === 'tooltip') { + updated_needsReload.changes = {}; + } } - return { needsReload: updated_needsReload, notificationClasses: updated_notificationClasses, diff --git a/app/panel/reducers/rewards.js b/app/panel/reducers/rewards.js new file mode 100644 index 000000000..626fd517e --- /dev/null +++ b/app/panel/reducers/rewards.js @@ -0,0 +1,82 @@ +/** + * Rewards Reducer + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +import { + GET_REWARDS_DATA, + TOGGLE_OFFERS_ENABLED, + REMOVE_OFFER, + SET_OFFER_READ, + SEND_SIGNAL +} from '../constants/constants'; +import { sendMessage, sendRewardMessage } from '../utils/msg'; + +const initialState = { + rewards: null, + enable_offers: false, + unread_offer_ids: [], +}; + +/** + * Default export for rewards view reducer. + * @memberof PanelReactReducers + * + * @param {Object} state current state + * @param {Object} action action which provides data + * @return {Object} unaltered state + */ +export default (state = initialState, action) => { + switch (action.type) { + case GET_REWARDS_DATA: { + return Object.assign({}, state, action.data); + } + case TOGGLE_OFFERS_ENABLED: { + const enable_offers = action.data.enabled; + sendMessage('setPanelData', { enable_offers }); + return Object.assign({}, state, { enable_offers }); + } + + case REMOVE_OFFER: { + // Remove offer from unread array + const unread_offer_ids = [...state.unread_offer_ids]; + const idx = unread_offer_ids.indexOf(action.data.id); + if (idx !== -1) { + unread_offer_ids.splice(idx, 1); + } + + // Remove offer from offers list + const rewards = Object.assign({}, state.rewards); + delete rewards[action.data.id]; + + sendRewardMessage('deleteReward', { offerId: action.data.id }); + return Object.assign({}, state, { unread_offer_ids, rewards }); + } + + case SET_OFFER_READ: { + const unread_offer_ids = [...state.unread_offer_ids]; + const idx = unread_offer_ids.indexOf(action.data.id); + if (idx !== -1) { + unread_offer_ids.splice(idx, 1); + sendRewardMessage('rewardSeen', { offerId: action.data.id }); + return Object.assign({}, state, { unread_offer_ids }); + } + return state; + } + + case SEND_SIGNAL: { + sendRewardMessage('rewardSignal', action.data); + return state; + } + + default: return state; + } +}; diff --git a/app/panel/reducers/settings.js b/app/panel/reducers/settings.js index 8f8021188..6549dcb2d 100644 --- a/app/panel/reducers/settings.js +++ b/app/panel/reducers/settings.js @@ -14,7 +14,8 @@ /* eslint no-use-before-define: 0 */ import moment from 'moment/min/moment-with-locales.min'; -import { GET_SETTINGS_DATA, +import { + GET_SETTINGS_DATA, IMPORT_SETTINGS_DIALOG, IMPORT_SETTINGS_NATIVE, IMPORT_SETTINGS_FAILED, @@ -28,7 +29,8 @@ import { GET_SETTINGS_DATA, SETTINGS_TOGGLE_EXPAND_ALL, SETTINGS_TOGGLE_EXPAND_CATEGORY, SETTINGS_UPDATE_SEARCH_VALUE, - SETTINGS_FILTER } from '../constants/constants'; + SETTINGS_FILTER +} from '../constants/constants'; import { updateTrackerBlocked, updateCategoryBlocked, updateBlockAllTrackers, toggleExpandAll, toggleExpandCategory } from '../utils/blocking'; import { removeFromObject, updateObject } from '../utils/utils'; import { sendMessage } from '../utils/msg'; diff --git a/app/panel/reducers/summary.js b/app/panel/reducers/summary.js index 0b6bc92cc..91779e6d5 100644 --- a/app/panel/reducers/summary.js +++ b/app/panel/reducers/summary.js @@ -13,10 +13,12 @@ /* eslint no-use-before-define: 0 */ -import { GET_SUMMARY_DATA, +import { + GET_SUMMARY_DATA, UPDATE_GHOSTERY_PAUSED, UPDATE_SITE_POLICY, - UPDATE_TRACKER_COUNTS } from '../constants/constants'; + UPDATE_TRACKER_COUNTS +} from '../constants/constants'; import { addToArray, removeFromArray } from '../utils/utils'; import { sendMessage } from '../utils/msg'; diff --git a/app/panel/utils/msg.js b/app/panel/utils/msg.js index 9c0d77150..e1faf68f5 100644 --- a/app/panel/utils/msg.js +++ b/app/panel/utils/msg.js @@ -85,3 +85,27 @@ export function sendMessage(name, message, callback = function () {}) { message, }, callback); } + +/** + * Send a message to the handlers in src/background relating to rewards. + * This should be used for messages that don't require a callback. + * @memberOf PanelUtils + * + * @param {string} name message name + * @param {Object} message message data + * @param {function} callback callback message + * @return {Object} response + * @todo runtime.sendMessage does not return any value. + */ +export function sendRewardMessage(name, message, callback = function () {}) { + log('Panel sendMessage: sending to background', name); + // @EDGE chrome.runtime.sendMessage(message) works, but + // const callback; chrome.runtime.sendMessage(message, callback) fails to execute and chrome.runtime.lastError is undefined. + // const fallback = function () {}; // Workaround for Edge. callback cannot be undefined. + // callback = callback || fallback; + return chrome.runtime.sendMessage({ + name, + message, + origin: 'rewardsPanel', + }, callback); +} diff --git a/app/panel/utils/utils.js b/app/panel/utils/utils.js index d5b6e884c..1beb7c6bf 100644 --- a/app/panel/utils/utils.js +++ b/app/panel/utils/utils.js @@ -63,6 +63,53 @@ export function removeFromArray(array, position) { return array.filter((item, index) => index !== position); } +/** + * Calculates the time difference between two dates and returns the + * value in a computer interpretable way. + * @param {datetime} start the beginning date-time + * @param {datetime} end the ending date-time + * @return {Object} An object with: + * type: days, hours, minutes, seconds + * count: the number of days, hours, minutes, seconds + */ +export function computeTimeDelta(start, end) { + const time_delta = Math.abs(end.getTime() - start.getTime()); + + const day_ms = 1000 * 60 * 60 * 24; + const num_days = Math.round(time_delta / day_ms); + if (num_days >= 2) { + return { + count: num_days, + type: 'days', + }; + } + + const hour_ms = 1000 * 60 * 60; + const num_hours = Math.round(time_delta / hour_ms); + if (num_hours >= 2) { + return { + count: num_hours, + type: 'hours' + }; + } + + const min_ms = 1000 * 60; + const num_mins = Math.round(time_delta / min_ms); + if (num_mins >= 2) { + return { + count: num_mins, + type: 'mins' + }; + } + + const sec_ms = 1000; + const num_secs = Math.round(time_delta / sec_ms); + return { + count: num_secs, + type: 'secs' + }; +} + /** * Check for valid email * @memberOf PanelUtils diff --git a/app/scss/panel.scss b/app/scss/panel.scss index fe6153ac0..535314ba9 100644 --- a/app/scss/panel.scss +++ b/app/scss/panel.scss @@ -8,7 +8,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -26,6 +26,11 @@ html body { } *:focus {outline: none;} +// Function helper with color variables +@function url-friendly-colour($colour) { + @return '%23' + str-slice('#{$colour}', 2, -1) +} + // Foundation Helpers .collapse-left {padding-left: 0;} .collapse-right {padding-right: 0;} @@ -36,20 +41,27 @@ html body { background-color: white; height: 516px; width: 580px; + overflow: hidden; margin: 0px; padding: 0px; } // Partial View SASS files +@import './partials/_svgs'; @import './partials/_header'; @import './partials/_callout'; @import './partials/_summary'; @import './partials/_detail'; @import './partials/_blocking'; +@import './partials/_rewards'; @import './partials/_settings'; @import './partials/_help'; @import './partials/_account'; @import './partials/_drawer'; -@import './partials/_select_button'; +@import './partials/_toggle_slider'; +@import './partials/_pause_button'; +@import './partials/_donut_graph'; +@import './partials/_ghostery_features'; +@import './partials/_cliqz_features'; @import './partials/_tooltip'; @import './partials/_not_scanned'; diff --git a/app/scss/partials/_blocking.scss b/app/scss/partials/_blocking.scss index f478c413c..6180a5480 100644 --- a/app/scss/partials/_blocking.scss +++ b/app/scss/partials/_blocking.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -75,7 +75,7 @@ } &.smart-blocked .warning-image, &.smart-unblocked .warning-image { - background-image: buildSmartBlockIcon($button-purple); + background-image: buildIconSmartBlockingNoCircle(#1dafed); } } } @@ -294,58 +294,6 @@ } } -.expertTab { - @extend %pointer; - position: absolute; - top: 200px; - left: -26px; - width: 25px; - height: 50px; - .dash { - height: 20px; - width: 3px; - border-radius: 2px; - background-color: #D1D9DC; - margin-right: 7px; - } - .reverse-dash { - @extend .dash; - margin-right: -12px !important; - } - .moon { - display: none; - position: inherit; - } - .reverse-moon { - @extend .moon; - right: -26px !important; - } - &:hover { - .dash .reverse-dash { - display: none; - } - .moon { - display: block; - &:after { - content: url('../../app/images/panel/left-left-moon.svg'); - } - } - .reverse-moon { - display: block; - &:after { - content: url('../../app/images/panel/right-right-moon.svg') !important; - } - } - } - &.expanded { - &:hover { - .moon:after { - content: url('../../app/images/panel/left-right-moon.svg'); - } - } - } -} - @import './partials/_blocking_category'; @import './partials/_blocking_tracker'; @import './partials/_blocking_header'; diff --git a/app/scss/partials/_blocking_tracker.scss b/app/scss/partials/_blocking_tracker.scss index 284e40085..b48aeba93 100644 --- a/app/scss/partials/_blocking_tracker.scss +++ b/app/scss/partials/_blocking_tracker.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -35,10 +35,10 @@ } .warning-image { display: block; - width: 18px; - height: 18px; - margin-right: 5px; - background-size: auto 18px; + width: 32px; + height: 25px; + margin-right: -12px; + background-size: auto 25px; background-repeat: no-repeat; } } diff --git a/app/scss/partials/_callout.scss b/app/scss/partials/_callout.scss index b41e18e9a..7e7e6cf2e 100644 --- a/app/scss/partials/_callout.scss +++ b/app/scss/partials/_callout.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -37,6 +37,11 @@ .callout-text {color: #ffffff;} .close-button path {stroke: #ffffff;} } + &.purple { + background-color: #5b0059; + .callout-text {color: #ffffff;} + .close-button path {stroke: #ffffff;} + } &.hideous { background-color: #ff9d00; .callout-text {color: #ffffff;} diff --git a/app/scss/partials/_cliqz_features.scss b/app/scss/partials/_cliqz_features.scss new file mode 100644 index 000000000..5c8350567 --- /dev/null +++ b/app/scss/partials/_cliqz_features.scss @@ -0,0 +1,122 @@ +/** + * Cliqz Features Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +.sub-component.cliqz-features { + .cliqz-feature { + display: inline-block; + width: 150px; + margin: 0 10px; + } + &.smaller .cliqz-feature { + width: 55px; + margin: 0 10px; + } + &.smaller.condensed .cliqz-feature { + width: 40px; + margin: 0 0 5px; + .count { + line-height: 14px; + } + .icon { + width: 40px; + height: 40px; + background-size: 30px 30px; + } + } + + .count { + color: rgba(#c8c7c2, 0); + text-align: center; + font-size: 14px; + line-height: 28px; + font-weight: 600; + transition: color 0.25s ease-out; + + background-repeat: no-repeat; + background-position: center center; + background-size: 10px 10px; + transition: background-image 0.25s ease-out; + background-image: buildIconDash(#c8c7c2); + } + .active .count { + color: #1dafed; + background: none; + } + &.inactive .count { + color: rgba(#dedede, 0); + background-image: buildIconDash(#dedede); + } + &.inactive .active .count { + color: #a4d4f2; + background: none; + } + + .icon { + margin: 0 auto; + height: 50px; + width: 50px; + background-repeat: no-repeat; + background-position: center center; + background-size: 50px 50px; + transition: background-image 0.25s ease-out; + } + .anti-tracking .icon { background-image: buildIconAntiTracking(#c8c7c2); } + .active.anti-tracking .icon { background-image: buildIconAntiTracking(#1dafed); } + &.inactive .anti-tracking .icon { background-image: buildIconAntiTracking(#dedede); } + &.inactive .active.anti-tracking .icon { background-image: buildIconAntiTracking(#a4d4f2); } + + .ad-blocking .icon { background-image: buildIconAdBlocking(#c8c7c2); } + .active.ad-blocking .icon { background-image: buildIconAdBlocking(#1dafed); } + &.inactive .ad-blocking .icon { background-image: buildIconAdBlocking(#dedede); } + &.inactive .active.ad-blocking .icon { background-image: buildIconAdBlocking(#a4d4f2); } + + .smart-blocking .icon { background-image: buildIconSmartBlocking(#c8c7c2); } + .active.smart-blocking .icon { background-image: buildIconSmartBlocking(#1dafed); } + &.inactive .smart-blocking .icon { background-image: buildIconSmartBlocking(#dedede); } + &.inactive .active.smart-blocking .icon { background-image: buildIconSmartBlocking(#a4d4f2); } + + .feature-name { + color: #c8c7c2; + text-align: center; + font-size: 11px; + line-height: 26px; + font-weight: 600; + transition: color 0.25s ease-out; + + white-space: nowrap; + overflow-x: hidden; + text-overflow: ellipsis; + } + .active .feature-name { color: #1dafed; } + &.inactive .feature-name { color: #dedede; } + &.inactive .active .feature-name { color: #a4d4f2; } + &.smaller .feature-name { display: none; } + + .cliqz-feature.clickable:hover { + .count { background-image: buildIconDash(#a4a4a4); } + &.anti-tracking .icon { background-image: buildIconAntiTracking(#a4a4a4); } + &.ad-blocking .icon { background-image: buildIconAdBlocking(#a4a4a4); } + &.smart-blocking .icon { background-image: buildIconSmartBlocking(#a4a4a4); } + .feature-name { color: #a4a4a4; } + } + .cliqz-feature.active.clickable:hover { + .count { + color: #0093bd; + background: none; + } + &.anti-tracking .icon { background-image: buildIconAntiTracking(#0093bd); } + &.ad-blocking .icon { background-image: buildIconAdBlocking(#0093bd); } + &.smart-blocking .icon { background-image: buildIconSmartBlocking(#0093bd); } + .feature-name { color: #0093bd; } + } +} diff --git a/app/scss/partials/_colors.scss b/app/scss/partials/_colors.scss index c9981bdd0..0f21aebc6 100644 --- a/app/scss/partials/_colors.scss +++ b/app/scss/partials/_colors.scss @@ -8,7 +8,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -41,7 +41,8 @@ $button-primary: #3AA2CF; /* MARKETING COLORS */ $red: #E74055; $purple: #720174; -$dark-magenta: #910194; +$dark-purple: #5B005C; +$dark-magenta: #920094; $sinopia: #D3451E; $apple: #67A73A; //button_special $caper: #CEECAF; //success-color @@ -56,9 +57,3 @@ $transparent-green: rgba($apple, 0.08); $transparent-red: rgba($red, 0.08); /* ADD PROJECT COLORS HERE */ - -$button-grey: 979797; -$button-dark-grey: 4A4A4A; -$button-purple: 930194; -$button-white: ffffff; -$button-purple-f: unquote("##{$button-purple}"); diff --git a/app/scss/partials/_detail.scss b/app/scss/partials/_detail.scss index 995d08eb4..37dd7a5c1 100644 --- a/app/scss/partials/_detail.scss +++ b/app/scss/partials/_detail.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -49,6 +49,9 @@ .no-fill {fill: none;} .stroke {stroke: rgb(74,74,74);} } + + .menu-item { + border-left: 1px solid #cccccc; + } } } @@ -63,13 +66,34 @@ } #content-detail { - @include expanding-panel(70px); + @include expanding-panel(66px); } #settings-global-blocking { @include expanding-panel(2px); } +.condensed-toggle { + position: absolute; + height: 50px; + width: 25px; + top: 198px; + z-index: 2; + cursor: pointer; + background-position: 7px center; + background-size: 3px 20px; + background-repeat: no-repeat; + background-image: url('../../app/images/panel/line-empty-moon.svg'); + &:hover { + background-size: 25px 50px; + background-position: center; + background-image: url('../../app/images/panel/right-left-moon.svg'); + } + &.condensed:hover { + background-image: url('../../app/images/panel/right-right-moon.svg'); + } +} + .coming-soon { background-color: #fff; .detail-header { diff --git a/app/scss/partials/_donut_graph.scss b/app/scss/partials/_donut_graph.scss new file mode 100644 index 000000000..af2d8d9fa --- /dev/null +++ b/app/scss/partials/_donut_graph.scss @@ -0,0 +1,66 @@ +/** + * Donut Graph Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +.sub-component.donut-graph { + .show-on-big { display: none; } + &.big .show-on-big { display: block; } + + .graph-text { + text-transform: capitalize; + text-align: center; + font-size: 12px; + line-height: 16px; + font-weight: 500; + color: #4a4a4a; + } + &.big .graph-text { + margin-top: -125px; + padding-top: 22px; + height: 120px; + } + &.small .graph-text { + margin-top: -99px; + padding-top: 18px; + height: 94px; + } + .graph-text-count { + font-size: 30px; + line-height: 41px; + font-weight: 700; + } + &.small .graph-text-count { + font-size: 28px; + line-height: 35px; + } + + .tooltip-container { + position: relative; + height: 0; + width: 0; + .tooltip { + white-space: nowrap; + pointer-events: none; + opacity: 0; + visibility: hidden; + transition: opacity .2s ease-in; + } + .tooltip.show { + visibility: visible; + opacity: 1; + } + .tooltip::before { + left: 50%; + margin-left: -8px; + } + } +} diff --git a/app/scss/partials/_ghostery_features.scss b/app/scss/partials/_ghostery_features.scss new file mode 100644 index 000000000..954152bf6 --- /dev/null +++ b/app/scss/partials/_ghostery_features.scss @@ -0,0 +1,160 @@ +/** + * Ghostery Features Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +.sub-component.ghostery-features { + .button { + width: 150px; + height: 45px; + font-size: 11px; + line-height: 1.5; + color: #4a4a4a; + border-color: #cccccc; + background-color: #ffffff; + margin-bottom: 0; + box-shadow: inset 0 0 0 0 rgba($white, 0); + + transition: background-image 0.25s ease-out, + background-color 0.25s ease-out, + border-color 0.25s ease-out, + box-shadow 0.25 ease-out, + color 0.25s ease-out; + &:hover { + background-color: #efefef; + } + } + .button.active.button-trust { + color: #ffffff; + border-color: #85b329; + background-color: #9ecc42; + box-shadow: inset 0px 1px 7px 2px #85b329; + &:hover { + background-color: #85b329; + } + } + .button.active.button-restrict { + color: #ffffff; + border-color: #ce273c; + background-color: #e74055; + box-shadow: inset 0px 1px 7px 2px #ce273c; + &:hover { + background-color: #ce273c; + } + } + .button.active.ab-pause { + color: #ffffff; + border-color: #2092bf; + background-color: #1dafed; + box-shadow: inset 0px 1px 7px 2px #2092bf; + &:hover { + background-color: #0093bd; + } + } + + .full-height { height: 100%; } + .button-trust .button-text, + .button-restrict .button-text { + padding: 0 10px 0 30px; + background-repeat: no-repeat; + background-position: 0 center; + background-size: 14px 14px; + } + .button-trust .button-text { + background-image: buildIconTrust(#4a4a4a); + } + .button-trust.active .button-text { + background-image: buildIconTrust(#ffffff); + } + .button-restrict .button-text { + background-image: buildIconRestrict(#4a4a4a); + } + .button-restrict.active .button-text { + background-image: buildIconRestrict(#ffffff); + } + + .button-group.inactive { + .button { + color: #a4a4a4; + border-color: #e5e5e5; + background-color: #ffffff; + box-shadow: inset 0 0 0 0 rgba($white, 0); + } + .button.active.button-trust { + color: #ffffff; + border-color: #b8e65c; + background-color: #b8e65c; + } + .button.active.button-restrict { + color: #ffffff; + border-color: #ff8da2; + background-color: #ff8da2; + } + .button.active.ab-pause { + color: #ffffff; + border-color: #a4d4f2; + background-color: #a4d4f2; + } + .button-trust .button-text { + background-image: buildIconTrust(#a4a4a4); + } + .button-trust.active .button-text { + background-image: buildIconTrust(#ffffff); + } + .button-restrict .button-text { + background-image: buildIconRestrict(#a4a4a4); + } + .button-restrict.active .button-text { + background-image: buildIconRestrict(#ffffff); + } + } + + .button-group.stacked .button { + height: 35px; + margin-bottom: 0; + } + .button-group.stacked .button.condensed { + width: 66px; + height: 41px; + .button-text { + padding: 10px; + font-size: 9px; + background-position: center center; + } + } + + .button-top { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-bottom: 0; + } + .button-left { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + .button-center { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + .button-bottom { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-top: 0; + } + .button-right { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: 0; + } +} diff --git a/app/scss/partials/_header.scss b/app/scss/partials/_header.scss index 8af95ceb5..c40978638 100644 --- a/app/scss/partials/_header.scss +++ b/app/scss/partials/_header.scss @@ -5,13 +5,37 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ #ghostery-header { + .header-tab-group { + position: absolute; + height: 36px; + width: 280px; + left: calc(50% - 140px); + } + .header-tab { + cursor: pointer; + height: 20px; + width: 140px; + text-align: center; + color: $white; + background-color: #2092bf; + } + .header-tab.active { + color: #4a4a4a; + background-color: $white; + } + .header-tab-text { + text-align: center; + width: 100%; + font-size: 10px; + } + .top-bar { background-color: $ghosty-blue; color: $white; diff --git a/app/scss/partials/_not_scanned.scss b/app/scss/partials/_not_scanned.scss index c478414c1..425dcd5cf 100644 --- a/app/scss/partials/_not_scanned.scss +++ b/app/scss/partials/_not_scanned.scss @@ -1,73 +1,42 @@ /** - * Panel Not Scanned Sass + * Not Scanned Sass * * Ghostery Browser Extension * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -#panel { - .not-scanned-wrapper { - .title { - font-size: 18px; - color: #4a90e2; - } - .text { - font-size: 12px; - color: #4a4a4a; - max-width: 270px; - margin: 0 auto; - } +.sub-component.not-scanned { + text-align: center; + margin: 0 auto; + overflow: hidden; + + height: 247px; + max-width: 300px; + padding-top: 57px; + &.small { + height: 200px; + max-width: 160px; + padding-top: 30px; + } + + .not-scanned-header { + font-size: 18px; + color: #1dafed; + margin-bottom: 10px; } - #content-summary { - .not-scanned-wrapper { - .title { - padding-top: 90px; - padding-bottom: 45px; - } - .text { - margin: 0 auto; - } - } - &.expert { - .not-scanned-wrapper { - .title { - padding-top: 36px; - padding-bottom: 37px; - } - .text { - padding: 0 40px; - } - } - } - &.expanded.expert { - .not-scanned-wrapper { - display: none; - } - } + .not-scanned-text { + color: #4a4a4a; + font-size: 14px; + margin-bottom: 10px; } - #content-detail { - #content-blocking { - .not-scanned-wrapper { - .title { - padding-top: 92px; - } - .text { - padding-top: 44px; - } - } - } - &:not(.expanded) { - #content-blocking { - .not-scanned-wrapper { - display: none; - } - } - } + &.small .not-scanned-text { + font-size: 12px; + margin-bottom: 20px; } } diff --git a/app/scss/partials/_pause_button.scss b/app/scss/partials/_pause_button.scss new file mode 100644 index 000000000..91ec1c37d --- /dev/null +++ b/app/scss/partials/_pause_button.scss @@ -0,0 +1,201 @@ +/** + * Pause Button Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +.sub-component.pause-button { + .button { + color: #4a4a4a; + border-color: #cccccc; + background-color: #ffffff; + margin-bottom: 0; + + transition: background-image 0.25s ease-out, + background-color 0.25s ease-out, + border-color 0.25s ease-out, + color 0.25s ease-out; + } + .button.active { + color: #ffffff; + border-color: #1dafed; + background-color: #1dafed; + box-shadow: inset 0px 1px 7px 2px rgba(#1dafed, 0); + & + .button.active { + border-left-color: #efefea; + } + } + .button:hover { background-color: #efefef; } + .button.active:hover { + border-color: #0093bd; + background-color: #0093bd; + } + + .button-pause { + min-width: 125px; + max-width: 125px; + line-height: 17px; + .pause-button-text { + overflow-x: hidden; + text-overflow: clip; + font-size: 11px; + } + .pause-button-icon { + padding: 0 10px 0 30px; + background-repeat: no-repeat; + background-position: 0 center; + background-size: 14px 16px; + background-image: buildIconPause(#4a4a4a); + white-space: nowrap; + text-overflow: ellipsis; + overflow-x: hidden; + } + &.active .pause-button-icon { + background-image: buildIconPlay(#ffffff); + } + &.smaller { + min-width: 100px; + max-width: 150px; + } + &.smallest { + min-width: 41px; + max-width: 41px; + padding-left: 17px; + .pause-button-icon { + padding: 0 0 0 15px; + } + } + } + .button-caret { + width: 25px; + padding-top: 21px; + padding-right: 0; + background-repeat: no-repeat; + background-position: center center; + background-size: 9px 5px; + background-image: buildIconCaretDown(#4a4a4a); + &.active { + background-image: buildIconCaretDown(#ffffff); + } + } + + .button-left { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + &.dropdown-open { + border-bottom-left-radius: 0; + } + } + .button-right { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + &.dropdown-open { + border-bottom-right-radius: 0; + } + } + + .dropdown-container { + position: relative; + width: 0; + height: 0; + top: 0; + + .dropdown { + text-align: center; + background-color: #ffffff; + border: 1px solid #cccccc; + border-top: 0; + margin: 0 auto; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + } + .dropdown-item { + padding: 12px 0; + background-color: #ffffff; + + white-space: nowrap; + text-overflow: ellipsis; + overflow-x: hidden; + } + .dropdown-item:hover { + background-color: #ebebeb; + } + .dropdown-item.selected { + background-color: #ebebeb; + .dropdown-clickable { + padding: 0 0 0 10px; + background-repeat: no-repeat; + background-position: 0 center; + background-size: 4px 4px; + background-image: buildIconCircle(#4a4a4a); + } + } + } + + .no-border-radius { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; + } +} + +.ghostery-features-container .sub-component.pause-button { + .button-pause { + height: 35px; + line-height: 16px; + } + .button-caret { + height: 35px; + } + .button-pause.smaller { + height: 45px; + min-width: 125px; + max-width: 125px; + line-height: 26px; + } + .button-caret.smaller { + height: 45px; + } + .button.active { + border-color: #0093bd; + background-color: #1dafed; + box-shadow: inset 0px 1px 7px 2px #0093bd; + &:hover { + background-color: #0093bd; + } + } + .button-pause.smallest { + padding-left: 15px; + height: 41px; + line-height: 27px; + border-top: none; + border-bottom-left-radius: 3px; + &.dropdown-open { + border-bottom-left-radius: 0; + } + } + .button-caret.smallest { + height: 41px; + border-top: none; + border-bottom-right-radius: 3px; + &.dropdown-open { + border-bottom-right-radius: 0; + } + } + .dropdown { + position: absolute; + z-index: 1; + } + .dropdown-container.centered .dropdown-item { + padding: 9px 0; + } +} diff --git a/app/scss/partials/_placeholders.scss b/app/scss/partials/_placeholders.scss index 688ca67d9..d914669d2 100644 --- a/app/scss/partials/_placeholders.scss +++ b/app/scss/partials/_placeholders.scss @@ -8,7 +8,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 diff --git a/app/scss/partials/_rewards.scss b/app/scss/partials/_rewards.scss new file mode 100644 index 000000000..33e67d758 --- /dev/null +++ b/app/scss/partials/_rewards.scss @@ -0,0 +1,267 @@ +/** + * Rewards Panel Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +// Universal Classes +.full-height { + height: 100%; +} +.full-width { + width: 100%; +} +.display-inline-block { + display: inline-block; +} +.send-left-with-padding { + position: absolute; + left: 0; + padding: 5px 13px; +} +.send-right-with-padding { + position: absolute; + right: 0; + padding: 5px 13px; +} +.clickable { + @extend %pointer; +} +.not-clickable { + cursor: not-allowed; +} + +// Rewards Panel Component Classes +.RewardsPanel { + background-color: #ffffff; +} +.RewardsPanel__header { + padding: 10px 0; + background-color: $whisper; +} +.RewardPanel__back svg { + @include transition(fill 0.2s); + fill: #9b9b9b; +} +.RewardPanel__back:hover svg { fill: #4a4a4a; } + +.RewardsPanel__title { + text-transform: uppercase; + font-size: 14px; + color: #9b9b9b; +} +.RewardsPanel__slider_text { + text-transform: uppercase; + padding-right: 7px; +} +.RewardsPanel__scroll_content { + height: 377px; + overflow-y: scroll; +} +.RewardsPanel__info { + margin: 0 40px; + text-align: center; + font-size: 14px; +} +.RewardsPanel__reward_icon { + margin: 70px 0 20px; + fill: #9b9b9b; +} +.RewardsPanel__learn_more { + margin-top: 10px; +} + +// Reward List Item Component Classes +.RewardListItem { + height: 72px; + border: 1px solid #cecece; + border-left-width: 0; + border-radius: 0; + padding: 10px 0 10px 10px; +} +.RewardListItem.RewardListItem--unread + .RewardListItem.RewardListItem--unread, +.RewardListItem:not(.RewardListItem--unread) + .RewardListItem:not(.RewardListItem--unread) { + height: 71px; + border-top: 0; +} +.RewardListItem__image_container { + height: 52px; + width: 100px; + text-align: center; + padding-right: 8px; + border-right: 1px solid #cecece; + margin-right: 18px; +} +.RewardListItem__image { + height: 52px; + width: auto; + background-color: #e0e0e0; +} +.RewardListItem--greyscale .RewardListItem__image { + -webkit-filter: grayscale(100%); /* Safari 6.0 - 9.0 */ + filter: grayscale(100%); +} +.RewardListItem__text { + color: #4a4a4a; + font-size: 13.5px; + font-weight: 600; + max-width: 188px; + margin-bottom: 7px; + line-height: 20px; + max-height: 40px; + text-overflow: ellipsis; + overflow: hidden; + word-wrap: break-word; +} +.RewardListItem--greyscale .RewardListItem__text { + color: #9b9b9b; +} +.RewardListItem__expires { + color: #9b9b9b; + font-size: 11px; + max-width: 188px; +} +.RewardListItem--elongated .RewardListItem__text, +.RewardListItem--elongated .RewardListItem__expires { + max-width: 354px; +} + +.RewardListItem--greyscale .RewardListItem__close_button, +.RewardListItem--greyscale .RewardListItem__details_link { + display: none; +} +.RewardListItem__close_button { + line-height: 0; + padding: 5px 10px; + margin-top: -5px; +} +.RewardListItem__details_link { + line-height: 0; + padding: 5px 10px; + margin-bottom: -5px; +} +.RewardListItem__close_button svg, +.RewardListItem__details_link svg { + @include transition(fill 0.2s); +} +.RewardListItem__close_button svg { fill: #9b9b9b; } +.RewardListItem__close_button:hover svg { fill: #4a4a4a; } + +.RewardListItem__details_link svg { fill: rgba(#4a4a4a, 0); } +.RewardListItem:hover .RewardListItem__details_link svg { fill: rgba(#4a4a4a, 1); } +.RewardListItem__close_button:hover + .RewardListItem__details_link svg { fill: rgba(#4a4a4a, 0); } + +.RewardListItem--unread { + border-color: #5b0059; + border-left-width: 7px; +} +.RewardListItem--unread .RewardListItem__image_container { + border-color: #5b0059; + margin-left: -7px; +} +.RewardListItem--greyscale.RewardListItem--unread, +.RewardListItem--greyscale.RewardListItem--unread .RewardListItem__image_container { + border-color: #cecece; +} + +// Reward Detail Component Classes +.RewardDetail { + height: 377px; +} +.RewardDetail__image_container { + height: 167px; + width: 100%; +} +.RewardDetail__picture { + height: 100%; + width: 100%; + background-color: #efefef; +} +.RewardDetail__logo { + position: absolute; + height: 52px; + width: auto; + margin: 16px 17px; + background-color: #4a4a4a; +} +.RewardDetail__title { + margin: 0 17px; + font-size: 18px; + line-height: 24px; + max-height: 48px; + color: #4a4a4a; + overflow: hidden; + text-overflow: ellipsis; +} +.RewardDetail__description { + margin: 0 17px; + font-size: 13px; + line-height: 18px; + max-height: 36px; + color: #4a4a4a; +} +.RewardDetail__code_container { + margin: 0 17px; + padding: 10px; + background-color: #efefef; + border: 1px solid #cccccc; + border-radius: 3px; +} +.RewardDetail__code { + font-size: 13px; + color: #494949; + font-weight: 600; +} +.RewardDetail__code input { + height: 10px; + width: 10px; + padding: 0; + margin: 0; + display: inline-block; + opacity: 0; + cursor: default; +} +.RewardDetail__copy { + font-size: 10px; + color: #5b005c; + font-weight: 600; + text-transform: uppercase; +} +.RewardDetail__details_container { + margin: 0 17px; +} +.RewardDetail__expires { + font-size: 12px; + font-weight: 600; + color: #4a4a4a; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.RewardDetail__terms { + font-size: 11px; + color: #9b9b9b; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.RewardDetail__redeem_button { + background-color: #5b0059; + color: #ffffff; + font-size: 14px; + font-weight: 600; + text-align: center; + margin: 0 17px 8px; + padding: 10px; + text-transform: uppercase; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} diff --git a/app/scss/partials/_select_button.scss b/app/scss/partials/_select_button.scss index 655aa3235..f6bab77f7 100644 --- a/app/scss/partials/_select_button.scss +++ b/app/scss/partials/_select_button.scss @@ -13,6 +13,57 @@ $grey: #ccc; $dark-grey: #4a4a4a; +$menu-height: 102px; + +$menuItemDot: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%224px%22%20height%3D%224px%22%20viewBox%3D%220%200%204%204%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EOval%209%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Simple-View-Panel---Trust/Restric/Pause%22%20transform%3D%22translate%28-813.000000%2C%20-2171.000000%29%22%20fill%3D%22%234A4A4A%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Ccircle%20id%3D%22Oval-9%22%20cx%3D%22815%22%20cy%3D%222173%22%20r%3D%222%22%3E%3C/circle%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); + +%select-menu-base { + overflow-y: auto; + height: $menu-height; + position: absolute; + top: -$menu-height; + left: 0; + right: 0; + border: 1px solid $grey; + width: 100%; + border-bottom: 0px; + box-shadow: inset 2px 2px 2px -2px $grey, inset 2px 2px 2px -2px $grey, inset -2px 2px 2px -1px $grey; + background-color: #fff; + ul { + list-style-type: none; + margin: 0px; + text-align: center; + li { + cursor: pointer; + &.selected { + background-color: #A6A6A6; + .bullet { + background-image: $menuItemDot; + } + } + .item-wrapper { + line-height: 33px; + position: relative; + height: 33px; + display: inline-block; + } + .bullet { + position: absolute; + top: 14px; + left: -12px; + height: 4px; + width: 4px; + background-repeat: no-repeat; + } + &:not(.selected):hover { + background-color: #ebebeb; + .bullet { + background-image: $menuItemDot; + } + } + } + } +} #panel { #content-summary { @@ -45,54 +96,8 @@ $dark-grey: #4a4a4a; } } - $menuItemDot: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%224px%22%20height%3D%224px%22%20viewBox%3D%220%200%204%204%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EOval%209%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Simple-View-Panel---Trust/Restric/Pause%22%20transform%3D%22translate%28-813.000000%2C%20-2171.000000%29%22%20fill%3D%22%234A4A4A%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Ccircle%20id%3D%22Oval-9%22%20cx%3D%22815%22%20cy%3D%222173%22%20r%3D%222%22%3E%3C/circle%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); - .select-menu { - overflow-y: auto; - height: 100px; - position: absolute; - top: -100px; - left: 0; - right: 0; - border: 1px solid $grey; - width: 100%; - border-bottom: 0px; - box-shadow: inset 2px 2px 2px -2px $grey, inset 2px 2px 2px -2px $grey, inset -2px 2px 2px -1px $grey; - background-color: #fff; - ul { - list-style-type: none; - margin: 0px; - text-align: center; - li { - cursor: pointer; - &.selected { - background-color: #A6A6A6; - .bullet { - background-image: $menuItemDot; - } - } - .item-wrapper { - line-height: 33px; - position: relative; - height: 33px; - display: inline-block; - } - .bullet { - position: absolute; - top: 14px; - left: -12px; - height: 4px; - width: 4px; - background-repeat: no-repeat; - } - &:not(.selected):hover { - background-color: #ebebeb; - .bullet { - background-image: $menuItemDot; - } - } - } - } + @extend %select-menu-base; } } } @@ -114,6 +119,13 @@ $dark-grey: #4a4a4a; width: 20px; } } + .select-menu { + @extend %select-menu-base; + top: -$menu-height + 1px; + width: 170%; + border-bottom: 1px solid $grey; + z-index: 2; + } } } } diff --git a/app/scss/partials/_summary.scss b/app/scss/partials/_summary.scss index 5c38faba0..2047732bb 100644 --- a/app/scss/partials/_summary.scss +++ b/app/scss/partials/_summary.scss @@ -5,381 +5,196 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -@mixin controls-btns { +#content-summary { position: absolute; - background-repeat: no-repeat; - left: 13px; -} - -@function buildIconTrust($stroke-color) { - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EOval%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Card-view---list-expanded-MAX---HOVER%22%20transform%3D%22translate%28-687.000000%2C%20-498.000000%29%22%20stroke-width%3D%222%22%20stroke%3D%22%23#{$stroke-color}%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Ccircle%20id%3D%22Oval%22%20cx%3D%22693.875%22%20cy%3D%22504.875%22%20r%3D%225.875%22%3E%3C/circle%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} - -@function buildIconRestrict($stroke-color) { - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3Eicon-%20restrict%20site%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Card-view---list-expanded-MAX---HOVER%22%20transform%3D%22translate%28-687.000000%2C%20-536.000000%29%22%20stroke%3D%22%23#{$stroke-color}%22%20stroke-width%3D%222%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22icon--restrict-site%22%20transform%3D%22translate%28688.000000%2C%20537.000000%29%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M1.95833333%2C1.95833333%20L9.79166667%2C9.79166667%22%20id%3D%22Line%22%20stroke-linecap%3D%22square%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ccircle%20id%3D%22Oval%22%20cx%3D%225.75260417%22%20cy%3D%225.75260417%22%20r%3D%225.75260417%22%3E%3C/circle%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} - -@function buildIconPause($stroke-color) { - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2210px%22%20height%3D%2213px%22%20viewBox%3D%220%200%2010%2013%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EShape%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Card-view---list-expanded-MAX---HOVER%22%20transform%3D%22translate%28-684.000000%2C%20-575.000000%29%22%20fill%3D%22%23#{$stroke-color}%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Group-2%22%20transform%3D%22translate%28684.000000%2C%20575.000000%29%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22pause%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C12.173913%20L2.60869565%2C12.173913%20L2.60869565%2C0%20L0%2C0%20L0%2C12.173913%20L0%2C12.173913%20Z%20M6.95652174%2C0%20L6.95652174%2C12.173913%20L9.56521739%2C12.173913%20L9.56521739%2C0%20L6.95652174%2C0%20L6.95652174%2C0%20Z%22%20id%3D%22Shape%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} + height: 479px; + width: 100%; + &.expert { width: 235px; } + &.expert.condensed { + width: 66px; + background-color: #f9f6f6; + } -@function buildIconResume($stroke-color) { - @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%20version%3D%221.1%22%20x%3D%220px%22%20y%3D%220px%22%20viewBox%3D%220%200%20100%20100%22%20enable-background%3D%22new%200%200%20100%20100%22%20xml%3Aspace%3D%22preserve%22%20fill%3D%22%23fff%22%3E%3Cpath%20d%3D%22M72%2C48.3l-42-24c-1.313-0.875-3%2C0.295-3%2C1.7v48c0%2C1.533%2C1.767%2C2.523%2C3%2C1.7l42-24C73.589%2C50.639%2C73.047%2C48.824%2C72%2C48.3z%20%20%20M31%2C70.6V29.4L67%2C50L31%2C70.6z%22%3E%3C/path%3E%3C/svg%3E%0A'); + .clickable { cursor: pointer; } + .not-clickable { cursor: not-allowed; } - // url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20100%20100%22%20fill%3D%22%23#{$stroke-color}%22%3E%3Cpath%20d%3D%22M72%2048.3l-42-24c-1.313-.875-3%20.295-3%201.7v48c0%201.533%201.767%202.523%203%201.7l42-24c1.59-1.06%201.047-2.876%200-3.4zM31%2070.6V29.4L67%2050%2031%2070.6z%22/%3E%3C/svg%3E'); -} + &.ab-pause .pause-button-container { + padding: 10px 0 0 10px; + text-align: left; + } + &.ab-pause .sub-component.pause-button { + .button-pause { + font-size: 11px; + } + } + &.expert.ab-pause .pause-button-container { + padding: 10px 0 0 0; + text-align: center; + } + &.expert.condensed.ab-pause .pause-button-container { + padding: 0; + text-align: left; + } -// cliqz drawer buttons -@function buildAntiTrackIcon($stroke-color){ - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2222px%22%20height%3D%2222px%22%20viewBox%3D%220%200%2022%2022%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EPage%201%20Copy%202%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Simple-View-Panel---hover---adblocing%22%20transform%3D%22translate%28-1082.000000%2C%20-690.000000%29%22%20stroke%3D%22%23#{$stroke-color}%22%20stroke-width%3D%222%22%20fill%3D%22none%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M1093.2127%2C691.032068%20C1093.08497%2C690.989311%201092.91503%2C690.989311%201092.7873%2C691.032068%20L1083.63836%2C693.457515%20C1083.25545%2C693.542485%201083%2C693.882908%201083%2C694.265816%20C1083.04276%2C700.776614%201086.53196%2C706.81899%201092.53185%2C710.861584%20C1092.65958%2C710.946554%201092.82979%2C710.989311%201093%2C710.989311%20C1093.17021%2C710.989311%201093.34042%2C710.946554%201093.46815%2C710.861584%20C1099.46804%2C706.81899%201102.95724%2C700.776614%201103%2C694.265816%20C1103%2C693.882908%201102.74455%2C693.542485%201102.36164%2C693.457515%20L1093.2127%2C691.032068%20Z%22%20id%3D%22Page-1-Copy-2%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} + .page-host { + color: #4a4a4a; + text-align: center; + font-size: 11px; + font-weight: 600; + margin-bottom: 36px; + } + &.ab-pause .page-host { + margin-bottom: 30px; + } + &.expert .page-host { + margin-top: 20px; + margin-bottom: 20px; + } + &.expert.ab-pause .page-host { + margin-top: 8px; + margin-bottom: 8px; + } -@function buildAdBlockIcon($stroke-color){ - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2224px%22%20height%3D%2224px%22%20viewBox%3D%220%200%2024%2024%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EFill%201%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Simple-View-Panel---hover---adblocing%22%20transform%3D%22translate%28-1166.000000%2C%20-735.000000%29%22%20stroke%3D%22%23#{$stroke-color}%22%20stroke-width%3D%220.5%22%20fill%3D%22%23#{$stroke-color}%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M1171.71317%2C754.301569%20C1172.4562%2C755.045891%201173.19537%2C755.790213%201173.94227%2C756.528096%20C1173.99635%2C756.582182%201174.10195%2C756.610513%201174.18565%2C756.610513%20C1176.73025%2C756.614376%201179.27356%2C756.615664%201181.81816%2C756.609225%20C1181.91088%2C756.609225%201182.02806%2C756.56029%201182.09374%2C756.495903%20C1183.89659%2C754.700773%201185.69429%2C752.901779%201187.4907%2C751.098923%20C1187.55638%2C751.03196%201187.60918%2C750.91735%201187.60918%2C750.824631%20C1187.6169%2C748.272302%201187.61561%2C745.72126%201187.61304%2C743.16893%20C1187.61175%2C743.099391%201187.5963%2C743.007961%201187.55252%2C742.961601%20C1186.80562%2C742.203114%201186.05357%2C741.451065%201185.31054%2C740.704168%20C1180.77122%2C745.242215%201176.24734%2C749.766097%201171.71317%2C754.301569%20M1170.68168%2C753.279092%20C1175.21843%2C748.74362%201179.74488%2C744.215875%201184.27648%2C739.684266%20C1183.54761%2C738.955397%201182.80844%2C738.212362%201182.06154%2C737.474479%20C1182.00617%2C737.420393%201181.90186%2C737.389487%201181.82073%2C737.389487%20C1179.27614%2C737.384336%201176.73154%2C737.384336%201174.18823%2C737.390775%20C1174.09422%2C737.390775%201173.97575%2C737.435846%201173.91007%2C737.501522%20C1172.10207%2C739.301803%201170.29664%2C741.104659%201168.49637%2C742.912667%20C1168.43971%2C742.970616%201168.39077%2C743.068485%201168.39077%2C743.147038%20C1168.38562%2C745.714821%201168.38562%2C748.281316%201168.38948%2C750.847811%20C1168.38948%2C750.91735%201168.41524%2C751.003629%201168.46289%2C751.049988%20C1169.20463%2C751.802037%201169.95281%2C752.548935%201170.68168%2C753.279092%20M1188.99608%2C747.014165%20C1188.99608%2C748.386912%201188.99093%2C749.75837%201188.99995%2C751.129829%20C1189.00252%2C751.4273%201188.90981%2C751.655233%201188.6999%2C751.865137%20C1186.75025%2C753.805783%201184.80574%2C755.75158%201182.86381%2C757.699953%20C1182.66163%2C757.903418%201182.44143%2C758%201182.1504%2C758%20C1179.38559%2C757.993561%201176.6195%2C757.993561%201173.85213%2C758%20C1173.56367%2C758%201173.34346%2C757.905994%201173.13871%2C757.702529%20C1171.19292%2C755.749005%201169.24198%2C753.798057%201167.28717%2C751.850972%20C1167.08885%2C751.653945%201167%2C751.437602%201167.00129%2C751.156872%20C1167.00644%2C748.390775%201167.00644%2C745.624678%201167%2C742.857293%20C1167%2C742.568836%201167.08757%2C742.347343%201167.29232%2C742.14259%20C1169.24713%2C740.195505%201171.19807%2C738.245844%201173.14515%2C736.291033%20C1173.34218%2C736.094006%201173.55594%2C736%201173.83667%2C736%20C1176.61049%2C736.005151%201179.38431%2C736.005151%201182.15812%2C736%20C1182.44014%2C736%201182.6552%2C736.090143%201182.85093%2C736.288457%20C1184.80445%2C738.24842%201186.76184%2C740.203231%201188.72051%2C742.156755%20C1188.91109%2C742.347343%201189.00124%2C742.558534%201188.99995%2C742.830251%20C1188.99222%2C744.224889%201188.99608%2C745.619527%201188.99608%2C747.014165%22%20id%3D%22Fill-1%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} + .donut-graph-container { + margin: 26px auto; + height: 120px; + width: 120px; + } + &.ab-pause .donut-graph-container { + margin-top: 0px; + margin-bottom: 30px; + } + &.expert .donut-graph-container { + height: 94px; + width: 94px; + margin-top: 21px; + margin-bottom: 20px; + } + &.expert.ab-pause .donut-graph-container { + margin-top: 0px; + margin-bottom: 16px; + } -@function buildSmartBlockIcon($stroke-color){ - @return url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Csvg%20width%3D%2218px%22%20height%3D%2228px%22%20viewBox%3D%220%200%2018%2028%22%20version%3D%221.1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20xmlns%3Axlink%3D%22http%3A//www.w3.org/1999/xlink%22%3E%0A%20%20%20%20%3C%21--%20Generator%3A%20Sketch%2047.1%20%2845422%29%20-%20http%3A//www.bohemiancoding.com/sketch%20--%3E%0A%20%20%20%20%3Ctitle%3EGroup%2011%3C/title%3E%0A%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C/desc%3E%0A%20%20%20%20%3Cdefs%3E%3C/defs%3E%0A%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Simple-View-Panel---hover---adblocing%22%20transform%3D%22translate%28-1105.000000%2C%20-711.000000%29%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22Group-11%22%20transform%3D%22translate%281105.000000%2C%20711.000000%29%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22icon--smart-blocking-light-bulb%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M15.9766215%2C9.23905085%20C15.8801207%2C10.9165559%2015.2802076%2C12.3962344%2014.3232416%2C13.7536786%20C13.8922048%2C14.3648501%2013.456343%2C14.9711966%2013.038173%2C15.5936266%20C12.4414766%2C16.4814337%2011.9637978%2C17.4255329%2011.7804463%2C18.4918664%20C11.7498877%2C18.6671761%2011.6389118%2C18.6543094%2011.5166775%2C18.6543094%20C10.6755125%2C18.652701%209.83434744%2C18.652701%208.99157404%2C18.652701%20C8.16005907%2C18.652701%207.32854409%2C18.647876%206.49542077%2C18.6559177%20C6.31367765%2C18.6575261%206.24934381%2C18.606059%206.21235184%2C18.4178825%20C6.01452526%2C17.3869326%205.55453826%2C16.4637419%204.9707086%2C15.60006%20C4.47372963%2C14.8666541%203.95584216%2C14.146115%203.45725484%2C13.4127092%20C2.5501476%2C12.0826069%202.07568548%2C10.6109701%202.01135163%2C9.00101562%20C1.8987674%2C6.18158477%203.4974635%2C3.72242346%206.19626838%2C2.58049768%20C9.65421266%2C1.118511%2013.7426286%2C2.58532272%2015.3622332%2C5.87439065%20C15.8833374%2C6.93589913%2016.044172%2C8.0633498%2015.9766215%2C9.23905085%20L15.9766215%2C9.23905085%20Z%20M6.35227796%2C21.3000388%20L11.6566037%2C21.3000388%20L11.6566037%2C20.6695671%20L6.35227796%2C20.6695671%20L6.35227796%2C21.3000388%20Z%20M11.1113743%2C23.9811519%20L6.89589897%2C23.9811519%20C6.38766158%2C23.9811519%206.2943775%2C23.8733927%206.36031969%2C23.3281634%20L11.6405202%2C23.3281634%20C11.7145041%2C23.865351%2011.6180033%2C23.9811519%2011.1113743%2C23.9811519%20L11.1113743%2C23.9811519%20Z%20M17.3501491%2C5.40475357%20C15.9010292%2C2.2363116%2013.3839675%2C0.476780878%209.96462348%2C0.0698692952%20C7.05190855%2C-0.277533479%204.51876332%2C0.679432497%202.45364683%2C2.74294064%20C0.148886755%2C5.04930906%20-0.40438433%2C7.86713156%200.26468768%2C10.9841065%20C0.615307147%2C12.6133611%201.41304685%2C14.0303141%202.36840448%2C15.3732832%20C2.80587464%2C15.9908881%203.23691142%2C16.6165348%203.63899796%2C17.2566565%20C4.01052593%2C17.8501363%204.2742947%2C18.4982998%204.30002824%2C19.2027554%20C4.33058682%2C20.0165786%204.30806997%2C20.8304018%204.30806997%2C21.6442249%20L4.34023689%2C21.6442249%20C4.34023689%2C22.3197303%204.33862855%2C22.9952357%204.34184524%2C23.6707411%20C4.34827862%2C24.8753924%205.29398618%2C25.8918672%206.49220408%2C25.9706761%20C6.649822%2C25.9819346%206.70289743%2C26.0269683%206.74149774%2C26.1845862%20C6.99722478%2C27.242878%207.92684887%2C27.9746755%208.99157404%2C27.9762838%20C10.0772077%2C27.9778922%2011.0003984%2C27.2541364%2011.2657755%2C26.1781528%20C11.2995508%2C26.0382267%2011.3381511%2C25.9835429%2011.490944%2C25.9722845%20C12.7325872%2C25.8790004%2013.6622113%2C24.8753924%2013.665428%2C23.6353575%20C13.665428%2C22.3776308%2013.6750781%2C21.1199041%2013.6622113%2C19.860569%20C13.6509529%2C18.9196865%2013.869688%2C18.0447462%2014.3682753%2C17.2502232%20C14.7703619%2C16.6101014%2015.1997903%2C15.9828464%2015.6420855%2C15.3700665%20C16.9046372%2C13.6137525%2017.7972694%2C11.7175123%2017.9645374%2C9.52694482%20C18.0739049%2C8.10355845%2017.9468456%2C6.71073066%2017.3501491%2C5.40475357%20L17.3501491%2C5.40475357%20Z%22%20id%3D%22Page-1%22%20fill%3D%22%23#{$stroke-color}%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M9.09571339%2C7.21443826%20C9.03823634%2C7.19518725%208.96176366%2C7.19518725%208.90428661%2C7.21443826%20L4.78726273%2C8.3064732%20C4.61495411%2C8.34472999%204.5%2C8.49800235%204.5%2C8.67040311%20C4.51924072%2C11.6018291%206.08938152%2C14.3223522%208.7893325%2C16.1424922%20C8.84680955%2C16.180749%208.92340478%2C16.2%209%2C16.2%20C9.07659522%2C16.2%209.15319045%2C16.180749%209.2106675%2C16.1424922%20C11.9106185%2C14.3223522%2013.4807593%2C11.6018291%2013.5%2C8.67040311%20C13.5%2C8.49800235%2013.3850459%2C8.34472999%2013.2127373%2C8.3064732%20L9.09571339%2C7.21443826%20Z%22%20id%3D%22Page-1-Copy-2%22%20stroke%3D%22%23#{$stroke-color}%22%20stroke-width%3D%221.5%22%3E%3C/path%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%20%20%20%20%3C/g%3E%0A%20%20%20%20%3C/g%3E%0A%3C/svg%3E'); -} + &.expert.condensed .total-tracker-count { + text-align: center; + padding: 0; + color: #4a4a4a; + font-size: 24px; + font-weight: 600; + margin: 18px 0; + } + &.expert.condensed.ab-pause .total-tracker-count { + margin: 13px 0; + } -@mixin purple-dot { - position: absolute; - display: block; - background-color: $button-purple-f; - border-radius: 50%; - height: 4px; - width: 4px; - top: -8px; - margin-left: auto; - margin-right: auto; - left: 0; - right: 0; - content: ''; -} + .page-stats { + color: #4a4a4a; + text-align: center; + font-size: 14px; + line-height: 21px; + font-weight: 600; + margin-bottom: 40px; + .blocked-trackers .value { color: #e74055; } + .page-load .value { color: #ffc063; } + .page-load.fast .value { color: #9ecc42; } + .page-load.slow .value { color: #e74055; } -#content-summary { - position: absolute; - height: 479px; - width: 100%; - &.not-scanned { - .tracker-count-total, - .tracker-found-text, - .tracker-category-wheel, - #tracker-host { - display: none; + .blocked-trackers, + .page-load { + display: inline-block; + padding: 0 20px; } } - .tracker-category-wheel { - margin-top: 42px; - position: relative; - #categories-donut { - margin: 0 auto; - position: relative; - height: 121px; - width: 121px; - .donut-text { - font-size: 12px; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - text-align: center; - .categories-donut-count { - @extend %pointer; - font-size: 30px; - font-weight: 700; - color: #4a4a4a; - text-align: center; - } - } - } - // Wheel tooltip. Difficult to change content of :before dynamically, - // So we treat tooltip and its tip as elements (tip being a child of tooltip) - .w-tooltip { - @extend %g-tooltip-body; - position: absolute; - } - .w-tip { - @extend %g-tip-body; - border-width: 6px 6px 0 6px; - } - .tooltip { + &.expert .page-stats { + margin-bottom: 21px; + .blocked-trackers, + .page-load { + display: block; + text-overflow: ellipsis; white-space: nowrap; - pointer-events: none; - opacity: 0; - visibility: hidden; - transition: opacity .2s ease-in; - } - .tooltip.show { - visibility: visible; - opacity: 1; + overflow-x: hidden; } - .tooltip::before { - left: 50%; - margin-left: -8px; + } + &.expert.ab-pause .page-stats { + margin-bottom: 16px; + } + &.expert.condensed .page-stats { + div { + text-align: center; + padding: 0; + margin: 21px 0; } + .text { display: none; } } - .tracker-count-total-expanded-expert { - display: none; + &.expert.condensed.ab-pause .page-stats { + margin-bottom: 0; + div { margin: 13px 0; } } - #tracker-host { - color: #9b9b9b; - font-size: 11px; - margin-top: 25px; + + .not-scanned-expert-condensed-space-taker { + height: 162px; } - .info { - font-size: 14px; - color: #4a4a4a; - font-weight: 600; - margin: 30px auto; - > .row { - margin-top: 11px; - } - .block-info { - .value { - color: $red; - } - } - .load-info, - .alert-info { - .value { - color: #f5a623; - } - } - .load-info.fast .value { - color: $atlantis; - } - .load-info.slow .value { - color: $red; - } + &.ab-pause .not-scanned-expert-condensed-space-taker { + height: 130px; } - #controls { - bottom: 0; - left: 0; - padding-bottom: 60px; - right: 0; - #cliqz-controls { - width: 314px; - height: 59px; - border-top: 1px solid #ebebeb; - border-bottom: 1px solid #ebebeb; - margin: 0 auto; - button { - height: 35px; - width: 35px; - margin-top: 15px; - margin-bottom: 8px; - padding: 0; - background-color: transparent; - border-radius: 50%; - background-size: auto 25px; - background-position: center; - &:hover:not(.disabled) { - background-color: #EBEBEB; - } - } - } - #ghostery-controls { - margin-top: 41px; - background-color: #fff; - > .row > .columns { - padding: 0 16px; - } - .button { - height: 31px; - width: 125px; - margin-bottom: 0px; - font-size: 11px; - background-color: #fff; - border: 1px solid #ccc; - border-radius: 3px; - color: #4a4a4a; - line-height: 14px; - text-align: left; - .title, .select-title, .undo { - margin-left: 30px; - margin-right: 1em; - position: absolute; - left: 0; - right: 0; - text-align: center; - top: 50%; - transform: translateY(-50%); - } - .icon { - margin-top: 1px; - fill: #4a4a4a; - @include controls-btns; - height: 14px; - width: 14px; - position: absolute; - top: 50%; - transform: translateY(-50%); - &.pause { - left: 14px; - } - } - .undo { - display: none; - } - &.active, - &:hover:not(.disabled) { - color: #fff; - } - &.active:hover:not(.disabled) { - .title { - display: none; - } - .undo { - display: inline-block; - } - } - &.controls-trust { - &.active, - &:hover:not(.disabled) { - border-color: #9ecc42; - background-color: #9ecc42; - } - &.active .icon, - &:hover:not(.disabled) .icon { - background-image: buildIconTrust($button-white); - } - .icon { - background-image: buildIconTrust($button-dark-grey); - } - } - &.controls-restrict { - &.active, - &:hover:not(.disabled) { - border-color: #e74055; - background-color: #e74055; - } - &.active .icon, - &:hover:not(.disabled) .icon { - background-image: buildIconRestrict($button-white); - } - .icon { - background-image: buildIconRestrict($button-dark-grey); - } - } - &.controls-pause { - &.active, - &:hover:not(.disabled) { - border-color: $ghosty-blue; - background-color: $ghosty-blue; - } - &:hover:not(.disabled) .icon { - background-image: buildIconPause($button-white); - } - &.active:hover:not(.disabled) { - .title { - display: block; - } - } - .icon { - background-image: buildIconPause($button-dark-grey); - &.resume { - width: 25px; - height: 100%; - left: 8px; - } - } - &.active .icon, &.active:hover .icon { - background-image: buildIconResume($button-white); - } - } - } + .ghostery-features-container { + text-align: center; + .ghostery-features, + .pause-button { + display: inline-block; } } - .toggleExpert { - background-image: url('../images/panel/icon-list-view.svg'); - background-repeat: no-repeat; - background-size: auto; - border: none; - height: 21px; + &.ab-pause .ghostery-features-container { + margin-bottom: 22px; + .ghostery-features { display: block; } + } + &.expert.ab-pause .ghostery-features-container { + margin-bottom: 16px; + } + &.expert.condensed.ab-pause .ghostery-features-container { + margin-bottom: -8px; + } + .ghostery-features-container .button-restrict { + margin: 12px 28px; + } + &.expert.condensed .ghostery-features-container .button-restrict { margin: 0; - padding: 0px; - position: absolute; - right: 18px; - top: 22px; - width: 21px; - z-index: 2; } -} - -.anti-track-btn { - background-position: center; - height: 24px; - background-image: buildAntiTrackIcon($button-grey); - background-repeat: no-repeat; - &.active { - background-image: buildAntiTrackIcon($button-purple); - &:after { - @include purple-dot; - } + &.ab-pause .ghostery-features-container .button-restrict { + margin: 0; } -} -.ad-block-btn { - background-position: center; - height: 25px; - background-repeat: no-repeat; - background-image: buildAdBlockIcon($button-grey); - &.active { - background-image: buildAdBlockIcon($button-purple); - &:after { - @include purple-dot; - } + .cliqz-features-container { + text-align: center; } -} - -.smart-block-btn { - background-position: center; - height: 30px; - background-repeat: no-repeat; - background-image: buildSmartBlockIcon($button-grey); - &.active { - background-image: buildSmartBlockIcon($button-purple); - &:after { - @include purple-dot; + &.expert .cliqz-features-container { + margin-top: 10px; + margin-bottom: 6px; + } + &.expert.ab-pause .cliqz-features-container { + margin-top: 0; + margin-bottom: 16px; + } + &.expert.condensed.ab-pause .cliqz-features-container { + margin-top: 14px; + } + &.expert.condensed .cliqz-features-container { + margin-bottom: 0; + .cliqz-feature:last-of-type { + margin-bottom: 0; } } -} - -// trust + restrict + pause buttons -.controls-trust, .controls-restrict, .controls-pause { - position: relative; -} - -.icon-trust { - @include controls-btns; - height: 14px; - width: 14px; - background-image: buildIconTrust($button-dark-grey); -} -.icon-restrict { - @include controls-btns; - height: 14px; - width: 14px; - background-image: buildIconRestrict($button-dark-grey); -} - -.active { - & .icon-trust { - background-image: buildIconTrust($button-white); - } - & .icon-restrict { - background-image: buildIconRestrict($button-white); + .map-these-trackers { + text-align: center; + font-size: 10px; + color: #9b9b9b; } } - -@import "./summary_expert"; -@import "./summary_expert_collapsed"; diff --git a/app/scss/partials/_summary_expert.scss b/app/scss/partials/_summary_expert.scss index 83bdf4637..22c47940a 100644 --- a/app/scss/partials/_summary_expert.scss +++ b/app/scss/partials/_summary_expert.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -51,10 +51,15 @@ @extend %pointer; } .block-info, - .load-info, .alert-info { padding-top: 10px; } + .load-info { + padding-top: 10px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } .tracker-count-alerts { width: 100%; text-align: center; diff --git a/app/scss/partials/_svgs.scss b/app/scss/partials/_svgs.scss new file mode 100644 index 000000000..f33625732 --- /dev/null +++ b/app/scss/partials/_svgs.scss @@ -0,0 +1,68 @@ +/** + * SVGs Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +// Used in Blocking +@function buildIconSmartBlockingNoCircle($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2250%22%20height%3D%2250%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20fill%3D%22#{url-friendly-colour($stroke-color)}%22%20d%3D%22M31.977%2020.24c-.097%201.677-.697%203.156-1.654%204.514-.43.61-.867%201.217-1.285%201.84-.597.887-1.074%201.832-1.258%202.898-.03.175-.141.162-.263.162l-2.525-.001c-.832%200-1.663-.005-2.497.003-.181.002-.246-.05-.283-.238-.197-1.031-.657-1.954-1.241-2.818-.497-.733-1.015-1.454-1.514-2.187A8.257%208.257%200%200%201%2018.011%2020c-.112-2.82%201.486-5.279%204.185-6.42%203.458-1.462%207.547.004%209.166%203.293.521%201.062.682%202.19.615%203.365zM22.352%2032.3v-.63h5.305v.63h-5.305zm4.76%202.681h-4.216c-.508%200-.602-.108-.536-.653h5.28c.075.537-.022.653-.529.653zm6.238-18.576c-1.449-3.169-3.966-4.928-7.385-5.335-2.913-.348-5.446.61-7.511%202.673-2.305%202.306-2.858%205.124-2.19%208.241.351%201.63%201.149%203.046%202.104%204.39.438.617.869%201.243%201.271%201.883.372.593.635%201.241.661%201.946.03.814.008%201.627.008%202.441h.032c0%20.676-.001%201.351.002%202.027.006%201.204.952%202.22%202.15%202.3.158.01.21.056.25.214a2.322%202.322%200%200%200%204.524-.007c.034-.14.072-.194.225-.206a2.329%202.329%200%200%200%202.174-2.337c0-1.257.01-2.515-.003-3.774-.011-.941.208-1.816.706-2.61.402-.64.832-1.268%201.274-1.88%201.263-1.757%202.155-3.653%202.323-5.844.109-1.423-.018-2.816-.615-4.122z%22/%3E%3Cpath%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20stroke-width%3D%221.5%22%20fill%3D%22none%22%20d%3D%22M25.096%2018.214a.324.324%200%200%200-.192%200l-4.117%201.092a.37.37%200%200%200-.287.364c.02%202.932%201.59%205.652%204.29%207.472a.387.387%200%200%200%20.21.058c.077%200%20.153-.02.21-.058%202.7-1.82%204.27-4.54%204.29-7.472a.37.37%200%200%200-.287-.364l-4.117-1.092z%22/%3E%3C/svg%3E'); +} + + +// Used in Cliqz Features +@function buildIconAntiTracking($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2250%22%20height%3D%2250%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20stroke-width%3D%222%22%20fill%3D%22none%22%3E%3Ccircle%20cx%3D%2225%22%20cy%3D%2225%22%20r%3D%2223%22/%3E%3Cpath%20d%3D%22M25.213%2015.032a.721.721%200%200%200-.426%200l-9.149%202.427a.82.82%200%200%200-.638.809c.043%206.514%203.532%2012.56%209.532%2016.604A.859.859%200%200%200%2025%2035c.17%200%20.34-.043.468-.128%206-4.045%209.49-10.09%209.532-16.604a.82.82%200%200%200-.638-.81l-9.15-2.426z%22/%3E%3C/g%3E%3C/svg%3E'); +} + +// Used in Cliqz Features +@function buildIconAdBlocking($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2250%22%20height%3D%2250%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%3E%3Ccircle%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20stroke-width%3D%222%22%20fill%3D%22none%22%20cx%3D%2225%22%20cy%3D%2225%22%20r%3D%2223%22/%3E%3Cpath%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20stroke-width%3D%222%22%20fill%3D%22none%22%20fill-rule%3D%22nonzero%22%20transform%3D%22translate%2814%2C14%29%22%20d%3D%22M14.873%201.312l-7.973.07-5.588%205.686.07%207.973%205.686%205.589%207.973-.07%205.589-5.687-.07-7.973-5.687-5.588z%22/%3E%3Cpath%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20stroke-width%3D%222%22%20d%3D%22M31.5%2C18.5%20L18.5%2C31.5%22/%3E%3C/g%3E%3C/svg%3E'); +} + +// Used in Cliqz Features +@function buildIconSmartBlocking($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2250%22%20height%3D%2250%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Ccircle%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20stroke-width%3D%222%22%20fill%3D%22none%22%20cx%3D%2225%22%20cy%3D%2225%22%20r%3D%2223%22/%3E%3Cpath%20fill%3D%22#{url-friendly-colour($stroke-color)}%22%20d%3D%22M31.977%2020.24c-.097%201.677-.697%203.156-1.654%204.514-.43.61-.867%201.217-1.285%201.84-.597.887-1.074%201.832-1.258%202.898-.03.175-.141.162-.263.162l-2.525-.001c-.832%200-1.663-.005-2.497.003-.181.002-.246-.05-.283-.238-.197-1.031-.657-1.954-1.241-2.818-.497-.733-1.015-1.454-1.514-2.187A8.257%208.257%200%200%201%2018.011%2020c-.112-2.82%201.486-5.279%204.185-6.42%203.458-1.462%207.547.004%209.166%203.293.521%201.062.682%202.19.615%203.365zM22.352%2032.3v-.63h5.305v.63h-5.305zm4.76%202.681h-4.216c-.508%200-.602-.108-.536-.653h5.28c.075.537-.022.653-.529.653zm6.238-18.576c-1.449-3.169-3.966-4.928-7.385-5.335-2.913-.348-5.446.61-7.511%202.673-2.305%202.306-2.858%205.124-2.19%208.241.351%201.63%201.149%203.046%202.104%204.39.438.617.869%201.243%201.271%201.883.372.593.635%201.241.661%201.946.03.814.008%201.627.008%202.441h.032c0%20.676-.001%201.351.002%202.027.006%201.204.952%202.22%202.15%202.3.158.01.21.056.25.214a2.322%202.322%200%200%200%204.524-.007c.034-.14.072-.194.225-.206a2.329%202.329%200%200%200%202.174-2.337c0-1.257.01-2.515-.003-3.774-.011-.941.208-1.816.706-2.61.402-.64.832-1.268%201.274-1.88%201.263-1.757%202.155-3.653%202.323-5.844.109-1.423-.018-2.816-.615-4.122z%22/%3E%3Cpath%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20stroke-width%3D%221.5%22%20fill%3D%22none%22%20d%3D%22M25.096%2018.214a.324.324%200%200%200-.192%200l-4.117%201.092a.37.37%200%200%200-.287.364c.02%202.932%201.59%205.652%204.29%207.472a.387.387%200%200%200%20.21.058c.077%200%20.153-.02.21-.058%202.7-1.82%204.27-4.54%204.29-7.472a.37.37%200%200%200-.287-.364l-4.117-1.092z%22/%3E%3C/svg%3E'); +} + +// Used in Cliqz Features +@function buildIconDash($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2210%22%20height%3D%2210%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20stroke-width%3D%223%22%20d%3D%22M1%205h8%22/%3E%3C/svg%3E'); +} + +// Used in Ghostery Features +@function buildIconTrust($stroke-color) { + @return url('data:image/svg+xml;charset%3DUS-ASCII,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22>%3Ccircle%20cx%3D%227%22%20cy%3D%227%22%20r%3D%226%22%20stroke-width%3D%222%22%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20fill%3D%22none%22/%3E%3C/svg%3E'); +} + +// Used in Ghostery Features +@function buildIconRestrict($stroke-color) { + @return url('data:image/svg+xml;charset%3DUS-ASCII,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cg%20stroke%3D%22#{url-friendly-colour($stroke-color)}%22%20fill%3D%22none%22%20stroke-width%3D%222%22%3E%3Ccircle%20cx%3D%227%22%20cy%3D%227%22%20r%3D%226%22/%3E%3Cpath%20d%3D%22M3%203l8%208%22/%3E%3C/g%3E%3C/svg%3E'); +} + +// Used in Pause Button +@function buildIconPause($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width=%2214%22%20height=%2216%22%20xmlns=%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d=%22M1%2015h3V1H1v14zM9%201v14h3V1H9z%22%20fill=%22#{url-friendly-colour($stroke-color)}%22/%3E%3C/svg%3E'); +} + +// Used in Pause Button +@function buildIconPlay($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width=%2214%22%20height=%2216%22%20xmlns=%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d=%22M12.74%207.543a.532.532%200%200%201%200%20.915L1.782%2014.92c-.322.222-.783-.045-.783-.458V1.54c0-.378.44-.693.783-.458l10.956%206.462zM2.043%2013.547L11.435%208%202.044%202.454v11.093z%22%20fill=%22#{url-friendly-colour($stroke-color)}%22/%3E%3C/svg%3E'); +} + +// Used in Pause Button +@function buildIconCaretDown($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width=%229%22%20height=%225%22%20xmlns=%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d=%22M0%200h9L4.5%205%200%200%22%20fill=%22#{url-friendly-colour($stroke-color)}%22/%3E%3C/svg%3E'); +} + +// Used in Pause Button +@function buildIconCircle($stroke-color) { + @return url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width=%224%22%20height=%224%22%20xmlns=%22http%3A//www.w3.org/2000/svg%22%3E%3Ccircle%20cx=%222%22%20cy=%222%22%20r=%222%22%20fill=%22#{url-friendly-colour($stroke-color)}%22/%3E%3C/svg%3E'); +} diff --git a/app/scss/partials/_toggle_slider.scss b/app/scss/partials/_toggle_slider.scss new file mode 100644 index 000000000..2701ea0c4 --- /dev/null +++ b/app/scss/partials/_toggle_slider.scss @@ -0,0 +1,55 @@ +/** + * Toggle Slider Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +.ToggleSlider__switch {} +.ToggleSlider__switch { + @extend %pointer; + position: relative; + input { display:none; } +} +.ToggleSlider__slider { + position: relative; + display: block; + height: 14px; + width: 37px; + border-radius: 34px; + background-color: #c1c0c0; + -webkit-transition: .4s; + transition: .4s; +} +.ToggleSlider__slider_circle { + content: ""; + position: absolute; + left: 0px; + top: -3px; + height: 20px; + width: 20px; + border-radius: 50%; + background-color: #f1f1f1; + border: 0.5px solid #979797; + -webkit-transition: .1s; + transition: .1s; +} +.ToggleSlider input:checked + .ToggleSlider__slider { + background-color: #ad80ac; +} +.ToggleSlider input:focus + .ToggleSlider__slider { + box-shadow: 0 0 1px #2196f3; +} +.ToggleSlider input:checked + .ToggleSlider__slider + .ToggleSlider__slider_circle { + background-color: #5b0059; + border-color: #5b0059; + -webkit-transform: translateX(17px); + -ms-transform: translateX(17px); + transform: translateX(17px); +} diff --git a/app/scss/partials/_tooltip.scss b/app/scss/partials/_tooltip.scss index 7e59daac4..2c46db29e 100644 --- a/app/scss/partials/_tooltip.scss +++ b/app/scss/partials/_tooltip.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 @@ -17,12 +17,13 @@ .tooltip-content { color: #4a4a4a; font-size: 11px; + line-height: 1.5; padding: 11px 10px; width: 150px; background-color: $mystic; text-align: center; position: absolute; - z-index: 2; + z-index: 3; box-shadow: 0px 2px 2px 0 rgba(0, 0, 0, 0.2); box-sizing: border-box; &:after { @@ -90,19 +91,29 @@ line-height: 1.5; } } + .dark-theme .tooltip-content { + background-color: #333333; + color: #ffffff; + &:after { + border-color: transparent transparent #333333 #333333; + } + } } -#cliqz-controls .tooltip-content.right { - margin-left: 28px; +.expert .sub-component.cliqz-features .g-tooltip .tooltip-content.right { + margin-left: 16px; +} +.expert .sub-component.ghostery-features .g-tooltip .tooltip-content.right { + top: -50%; } -.toggleExpert.g-tooltip .tooltip-content.right { - top: -10px; - margin-left: 10px; +.expert .sub-component.pause-button .g-tooltip .tooltip-content.right { + margin-left: 28px; + top: -33%; } -.expanded .toggleExpert.g-tooltip .tooltip-content.right { - top: 15px; - margin-left: 0px; +.sub-component.pause-button .g-tooltip .tooltip-content.top { + left: 75px; } + .expert .g-tooltip .tooltip-content.top { &.top-right { margin-left: -40px; @@ -117,3 +128,13 @@ } } } + +.gx-tooltip { + @extend .g-tooltip; + .tooltip-content.top { + bottom: 100%; + } + .tooltip-content.right { + margin-left: 0 !important; + } +} diff --git a/app/scss/purplebox.scss b/app/scss/purplebox.scss index 91078fcad..fcfc54b13 100644 --- a/app/scss/purplebox.scss +++ b/app/scss/purplebox.scss @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 diff --git a/app/scss/rewards.scss b/app/scss/rewards.scss new file mode 100644 index 000000000..8ec7320c4 --- /dev/null +++ b/app/scss/rewards.scss @@ -0,0 +1,503 @@ +/** + * Rewards Content Script Sass + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +//Import Global Partials +@import "settings"; //includes _colors.scss +@import './partials/_tooltip'; + +#ghostery-rewards-app, #ghostery-iframe-container { + z-index: 2147483647 !important; + font-family: $body-font-family!important; + position: fixed; + top: 30px; + right: 30px; +} + +#ghostery-shadow-root { + opacity: 0; + &.resolved { + opacity: 1; + } +} + +#ghostery-iframe-container { + border: none; + &.hot-dog { + height: 59px; + width: 266px; + } + + &.offer-card { + width: 268px; + height: 531px; + } +} + +.ghostery-rewards-component { + * { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + .hide { + visibility: hidden; + } + + a { + text-decoration: none; + } + + .flex-grow { + flex: 1; + } + + .hot-dog-container { + border-radius: 25px; + background-color: $dark-purple; + position: relative; + display: flex; + height: 50px; + width: 265px; + opacity: 1; + white-space: nowrap; + background-repeat: no-repeat; + background-position: left 22px center; + border-bottom: 0px; + cursor: pointer; + } + + .ghostery-reward-text { + line-height: 1.3; + color: $white; + font-size: 12px; + margin-top: 16px; + margin-left: 58px; + transition: visibility 1s; + } + + .hot-dog-close { + width: 21px; + height: 21px; + border: 1px solid $dark-purple; + background-color: $white; + position: absolute; + border-radius: 50%; + right: 6px; + top: -9px; + background-repeat: no-repeat; + background-position: center center; + background-size: 9px; + cursor: pointer; + } + + &.ghostery-right { + right: 30px; + } + + &:hover, &.show { + .ghostery-reward-close { + transition: visibility 1000ms; + visibility: visible; + } + .ghostery-reward-text { + transition: visibility 0s; + visibility: visible; + } + } + + .ghostery-reward-card { + color: $tundora; + background-color: #f2f2f2; + width: 265px; + height: 520px; + border: 1px solid #9b9b9b; + border-radius: 4px; + + .reward-card-header { + display: flex; + height: 36px; + width: 100%; + + .reward-card-close { + cursor: pointer; + align-self: center; + margin-right: 8px; + margin-left: auto; + height: 10px; + width: 10px; + background-repeat: no-repeat; + } + + .rewards-logo-beta { + flex: 1; + height: 13px; + margin-left: 8px; + align-self: center; + background-repeat: no-repeat; + background-size: auto 13px; + } + } + + .reward-content-img { + height: 120px; + // margin-top: 8px; + width: 247px; + display: flex; + align-items: center; + + img { + width: 100%; + height: 100%; + object-fit: contain; + } + } + + .reward-content { + display: flex; + flex-wrap: wrap; + flex-direction: column; + background-color: $white; + align-items: center; + margin-left: auto; + margin-right: auto; + width: 247px; + height: 450px; + border: 1px solid $dark-purple; + border-radius: 4px; + + .reward-content-header { + display: flex; + flex-direction: row; + height: 48px; + width: 100%; + justify-content: flex-end; + align-items: center; + + .reward-company-logo { + height: 38px; + display: flex; + align-items: center; + + img { + height: 100%; + object-fit: contain; + } + } + + .reward-settings-kebab { + cursor: pointer; + width: 20px; + height: 37px; + background-repeat: no-repeat; + background-position: 6px; + } + + } + + .reward-content-detail { + display: flex; + flex-direction: column; + width: 195px; + height: 131px; + color: $tundora; + + .reward-benefit { + margin-top: 10px; + margin-bottom: 12px; + font-size: 34px; + line-height: 26px; + white-space: nowrap; + // text-overflow: ellipsis; + overflow: hidden; + width: 100%; + min-height: 26px; + } + + .reward-headline { + font-size: 16px; + line-height: 16px; + } + + .reward-description { + margin-top: 14px; + font-size: 13px; + line-height: 15px; + } + + } + + .reward-code { + display: flex; + width: 225px; + height: 32px; + border: 1px solid #dadada; + border-radius: 5px; + background-color: #f2f2f2; + + div { + flex: 1; + user-select: text; + margin-left: 8px; + align-self: center; + font-size: 13px; + font-weight: 500; + border: 0px; + background-color: transparent; + .reward-code-input { + opacity: 0; + position: absolute; + z-index: -1; + } + } + + a { + text-align: right; + align-self: center; + margin-right: 8px; + margin-left: auto; + color: $dark-purple; + font-size: 10px; + font-weight: $global-weight-bold; + cursor: pointer; + text-transform: uppercase; + } + + } + + .reward-content-footer { + display: flex; + width: 225px; + height: 46px; + font-size: 11px; + span { + margin-top: 15px; + flex: 1; + } + .reward-terms { + margin-top: 15px; + color: $tundora; + } + } + + .reward-redeem { + color: $white; + background-color: $dark-purple; + width: 100%; + height: 41px; + text-align: center; + line-height: 41px; + font-size: 14px; + border: 0px; + cursor: pointer; + } + } + + .reward-footer { + display: flex; + height: 32px; + + .reward-feedback { + flex: 2; + align-self: center; + margin-left: 8px; + + .rewards-smiley { + + } + + .rewards-dd-arrow { + + } + + a { + cursor: pointer; + font-size: 12px; + color: #6A7E90; + } + } + + .reward-ghosty { + flex: 1; + background-repeat: no-repeat; + background-position: center right; + height: 100%; + align-self: flex-end; + margin-right: 8px; + } + } + } + + .rewards-popup-container { + width: 100%; + height: 100%; + position: absolute; + text-align: center; + color: $white; + } + + .rewards-settings-container { + .rewards-settings { + color: $tundora; + position: absolute; + margin-left: -195px; + margin-top: -10px; + height: 94px; + width: 175px; + background-color: $white; + border: 1px solid #9b9b9b; + border-radius: 4px; + box-shadow: 0px 4px 10px grey; + display: flex; + flex-direction: column; + text-align: left; + + a { + color: $tundora; + } + + .about, .settings, .delete, .disable { + font-size: 12px; + flex: 1; + display: flex; + align-items: center; + margin-left: 10px; + margin-right: 10px; + font-weight: 500; + cursor: pointer; + user-select: none; + } + + .about { + align-items: flex-end; + } + + .delete { + align-items: flex-start; + } + } + } + + .rewards-notification-container { + position: absolute; + top: 0; + width: 100%; + height: 100%; + + .rewards-notification { + margin-top: 17px; + margin-left: auto; + margin-right: auto; + height: 161px; + width: 208px; + background-color: $dark-purple; + border: 2px solid transparent; + border-radius: 4px; + display: flex; + flex-direction: column; + font-size: 13px; + line-height: 2; + + &.first-prompt { + background-color: $white; + border: 2px solid $dark-purple; + color: black; + } + + .notification-text { + margin: 0px 22px 0px 22px; + } + + a { + text-decoration: underline; + cursor: pointer; + } + + .close { + cursor: pointer; + background-repeat: no-repeat; + height: 10px; + width: 10px; + align-self: flex-end; + margin: 10px 10px 0px 0px; + } + + .notification-buttons { + display: flex; + justify-content: center; + flex-direction: row; + .btn { + width: 60px; + height: 30px; + border-radius: 3px; + text-transform: uppercase; + } + button { + cursor: pointer; + font-weight: bold; + transition: background-color 0.25s ease-out, color 0.25s ease-out; + margin-top: 10px; + margin-bottom: 10px; + &:nth-child(1) { + margin-right:5px; + color:$dark-purple; + border: 2px solid $dark-purple; + } + &:nth-child(2) { + margin-left:5px; + border: 2px solid transparent; + &:hover { + border: 2px solid $dark-purple; + } + } + &:hover{ + background-color: $dark-purple; + color: $white; + } + } + } + } + .rewards-notification.second-prompt{ + .notification-buttons { + button{ + &:nth-child(1) { + background-color: $dark-purple; + color: $white; + } + &:hover { + background-color: #D8D8D8; + border-color: #D8D8D8; + color: $black; + } + } + } + } + } + + .rewards-notification-overlay { + height: 100%; + width: 100%; + background-color: #eee; + position: absolute; + opacity: .6; + } + + .btn { + + } + +} + +#ghostery-rewards-app.iframe-child { + top: 9px; + right: 1px; +} diff --git a/app/scss/setup.scss b/app/scss/setup.scss index 92e2f5ec8..68bdf3155 100644 --- a/app/scss/setup.scss +++ b/app/scss/setup.scss @@ -27,6 +27,7 @@ @import './partials/_mixins'; @import './partials/_blocking'; @import './partials/_settings'; +@import './partials/_toggle_slider'; @import './partials/_callout'; //Foundation Overrides @@ -69,6 +70,10 @@ body { } #setup-page { + //Don't show blue border on click + *:focus { + outline: none; + } #header { height: 53px; color: $white; @@ -162,6 +167,10 @@ body { #navigation { background-color: $whisper; padding: 0 0 35px; + .legal-notice { + text-align: center; + font-style: italic; + } .navigation-dots { width: 250px; max-width: 250px; @@ -277,6 +286,10 @@ body { font-size: 1rem; } } + .AdditionalFeatures--add-padding { + padding-left: 10px; + padding-right: 30px; + } } #display-view { .box-link { @@ -437,53 +450,6 @@ body { } } -.switch { - @extend %pointer; - margin-right: 52px; - align-self: flex-end; - position: relative; - width: 37px; - input { - display:none; - } - .slider { - border-radius: 34px; - height: 14px; - width: 37px; - position: relative; - display: block; - background-color: #C1C0C0; - -webkit-transition: .4s; - transition: .4s; - } - .slider-circle { - content: ""; - border-radius: 50%; - position: absolute; - height: 20px; - width: 20px; - left: 0px; - top: -3px; - background-color: #F1F1F1; - border: 0.5px solid #979797; - -webkit-transition: .1s; - transition: .1s; - } - input:checked + .slider { - opacity: .5; - background-color: #930194; - } - input:focus + .slider { - box-shadow: 0 0 1px #2196F3; - } - input:checked + .slider + .slider-circle { - background-color: #930194; - border-color: #930194; - -webkit-transform: translateX(17px); - -ms-transform: translateX(17px); - transform: translateX(17px); - } -} %nowrap { white-space: nowrap; overflow-x: hidden; diff --git a/app/setup/actions/NavigationActions.js b/app/setup/actions/NavigationActions.js index 7070e6c9c..be19f13bc 100644 --- a/app/setup/actions/NavigationActions.js +++ b/app/setup/actions/NavigationActions.js @@ -74,6 +74,9 @@ export function triggerSignIn() { */ export function close() { msg.sendMessage('closeSetup'); + return { + type: 'DO_NOTHING', + }; } /** diff --git a/app/setup/actions/SetupChoiceViewActions.js b/app/setup/actions/SetupChoiceViewActions.js index 4c48a3401..f95a35700 100644 --- a/app/setup/actions/SetupChoiceViewActions.js +++ b/app/setup/actions/SetupChoiceViewActions.js @@ -11,9 +11,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { - DISABLE_SHOW_ALERT -} from '../constants/constants'; import { msg } from '../utils'; /** @@ -23,4 +20,7 @@ import { msg } from '../utils'; */ export function disableShowAlert() { msg.sendMessage('disableShowAlert'); + return { + type: 'DO_NOTHING', + }; } diff --git a/app/setup/components/Navigation.jsx b/app/setup/components/Navigation.jsx index f3bb1b071..6a580afad 100644 --- a/app/setup/components/Navigation.jsx +++ b/app/setup/components/Navigation.jsx @@ -88,6 +88,14 @@ class Navigation extends Component { this.props.actions.close(); } + /** + * Wrapper function for dangerouslySetInnerHTML. Provides extra security + * @return {Object} + */ + createLegalMarkup() { + return { __html: t('setup_choice_view_legal') }; + } + /** * React's required render function. Returns JSX * @return {JSX} JSX for rendering the Navigation @@ -97,38 +105,43 @@ class Navigation extends Component { const { nextButtons } = this.props; return (
    - +

    { t('setup_additional_view_adblock_title') }

    @@ -142,11 +149,12 @@ class AdditionalFeaturesView extends Component {
    - +

    { t('setup_additional_view_smartblock_title') }

    diff --git a/app/setup/components/Views/BlockingView.jsx b/app/setup/components/Views/BlockingView.jsx index 25b6e60b4..08f42fd67 100644 --- a/app/setup/components/Views/BlockingView.jsx +++ b/app/setup/components/Views/BlockingView.jsx @@ -112,7 +112,7 @@ class BlockingView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the #additional-features step of the setup flow + * @return {JSX} JSX for rendering the #blocking step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/DataCollectionView.jsx b/app/setup/components/Views/DataCollectionView.jsx index a92b36b0e..5e32f759f 100644 --- a/app/setup/components/Views/DataCollectionView.jsx +++ b/app/setup/components/Views/DataCollectionView.jsx @@ -61,7 +61,7 @@ class DataCollectionView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the data collection view + * @return {JSX} JSX for rendering the #data-collection step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/DisplayView.jsx b/app/setup/components/Views/DisplayView.jsx index f8d224d4a..cd980d750 100644 --- a/app/setup/components/Views/DisplayView.jsx +++ b/app/setup/components/Views/DisplayView.jsx @@ -66,7 +66,7 @@ class DisplayView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the display view + * @return {JSX} JSX for rendering the #display step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/DoneView.jsx b/app/setup/components/Views/DoneView.jsx index ac239fc81..c1e2b7290 100644 --- a/app/setup/components/Views/DoneView.jsx +++ b/app/setup/components/Views/DoneView.jsx @@ -45,7 +45,7 @@ class DoneView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the done view + * @return {JSX} JSX for rendering the #done step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/LogInView.jsx b/app/setup/components/Views/LogInView.jsx index c6f90fd89..d310e62f9 100644 --- a/app/setup/components/Views/LogInView.jsx +++ b/app/setup/components/Views/LogInView.jsx @@ -31,7 +31,6 @@ class LogInView extends Component { password: '', firstName: '', lastName: '', - policy: true, }; } @@ -245,8 +244,6 @@ class LogInView extends Component { this.confirmEmailInput.blur(); this.passwordInput.focus(); this.passwordInput.blur(); - this.policyInput.focus(); - this.policyInput.blur(); return ( this._isValid({ target: { @@ -265,12 +262,6 @@ class LogInView extends Component { name: 'password', value: this.state.password, }, - }) && - this._isValid({ - target: { - name: 'policy', - value: this.state.policy, - }, }) || false); } @@ -289,8 +280,6 @@ class LogInView extends Component { case 'password': return this.state.password.length >= 8 && this.state.password.length <= 50 || false; - case 'policy': - return this.state.policy === true; default: return true; } @@ -327,11 +316,6 @@ class LogInView extends Component { password: event.target.value, }); break; - case 'policy': - this.setState({ - policy: event.target.checked, - }); - break; default: break; } } @@ -348,17 +332,9 @@ class LogInView extends Component { } } - /** - * Wrapper function for dangerouslySetInnerHTML. Provides extra security - * @return {Object} - */ - createTermsMarkup() { - return { __html: t('setup_login_view_terms') }; - } - /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the #additional-features step of the setup flow + * @return {JSX} JSX for rendering the #log-in step of the setup flow */ render() { return ( @@ -433,24 +409,7 @@ class LogInView extends Component { { t('setup_login_view_password_error') }
    -
    - { this.policyInput = ref; }} - /> - - - { t('setup_login_view_terms_error') } - -
    +
    diff --git a/app/setup/components/Views/SetupChoiceView.jsx b/app/setup/components/Views/SetupChoiceView.jsx index 3469c0c5c..da978c04b 100644 --- a/app/setup/components/Views/SetupChoiceView.jsx +++ b/app/setup/components/Views/SetupChoiceView.jsx @@ -78,7 +78,7 @@ class SetupChoiceView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the #additional-features step of the setup flow + * @return {JSX} JSX for rendering the first step of the setup flow */ render() { return ( diff --git a/app/setup/components/Views/UpgradeView.jsx b/app/setup/components/Views/UpgradeView.jsx index 820585553..904d0807b 100644 --- a/app/setup/components/Views/UpgradeView.jsx +++ b/app/setup/components/Views/UpgradeView.jsx @@ -45,7 +45,7 @@ class UpgradeView extends Component { /** * React's required render function. Returns JSX - * @return {JSX} JSX for rendering the #additional-features step of the setup flow + * @return {JSX} JSX for rendering the Upgrade page */ render() { return ( diff --git a/app/setup/reducers/additionalFeatures.js b/app/setup/reducers/additionalFeatures.js index aa5dd3e33..08a669898 100644 --- a/app/setup/reducers/additionalFeatures.js +++ b/app/setup/reducers/additionalFeatures.js @@ -40,6 +40,9 @@ const initialState = { export default (state = initialState, action) => { switch (action.type) { case UPDATE_ANTITRACK: { + if (IS_CLIQZ) { + return state; + } msg.sendMessage('updateAntiTrack', action.data); return Object.assign({}, state, { antiTrack: action.data, @@ -52,6 +55,9 @@ export default (state = initialState, action) => { }); } case UPDATE_ADBLOCK: { + if (IS_CLIQZ) { + return state; + } msg.sendMessage('updateAdBlock', action.data); return Object.assign({}, state, { adBlock: action.data, diff --git a/app/setup/reducers/display.js b/app/setup/reducers/display.js index e7b76780f..63f1f25db 100644 --- a/app/setup/reducers/display.js +++ b/app/setup/reducers/display.js @@ -11,9 +11,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -import { - UPDATE_DISPLAY_MODE -} from '../constants/constants'; +import { UPDATE_DISPLAY_MODE } from '../constants/constants'; import { msg } from '../utils'; const initialState = { diff --git a/app/templates/panel.html b/app/templates/panel.html index 0a475fe67..b9c84de86 100644 --- a/app/templates/panel.html +++ b/app/templates/panel.html @@ -22,7 +22,6 @@
    - diff --git a/jest.config.js b/jest.config.js index 1b600c2b7..68ffb653f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -5,7 +5,7 @@ * https://www.ghostery.com/ * * Copyright 2018 Ghostery, Inc. All rights reserved. - * + * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0 diff --git a/manifest.json b/manifest.json index c1a5ed632..0ebc944fe 100644 --- a/manifest.json +++ b/manifest.json @@ -8,10 +8,12 @@ "author": "Ghostery", "name": "__MSG_name__", "short_name": "Ghostery", - "version": "8.1.0", - "version_name": "8.1.0", + "version": "8.2.0", + "version_name": "8.2.0", "default_locale": "en", "description": "__MSG_short_description__", + "log": true, + "debug": true, "icons": { "16": "app/images/icon16.png", "48": "app/images/icon48.png", @@ -30,6 +32,9 @@ "js": [ "dist/ghostery_dot_com.js" ], + "css": [ + "dist/css/ghostery_dot_com_css.css" + ], "matches": [ "https://www.ghostery.com/*", "https://apps.ghostery.com/*", @@ -61,6 +66,7 @@ "http://*/*", "https://*/*" ], + "exclude_matches": ["*://*/_/chrome/newtab*"], "run_at": "document_start" } ], @@ -77,15 +83,20 @@ ], "background": { "scripts": [ - "dist/vendor.js", - "dist/browser-core.js", "dist/background.js" ], "persistent": true }, "minimum_edge_version": "33.14281.1000.0", "minimum_chrome_version": "49", + "minimum_opera_version": "36", "web_accessible_resources": [ - "app/images/*" - ] -} \ No newline at end of file + "app/images/*", + "dist/css/rewards_styles.css" + ], + "browser_specific_settings": { + "edge": { + "browser_action_next_to_addressbar": true + } + } +} diff --git a/package-lock.json b/package-lock.json index ea3836cb4..d7b58e9e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,107 +5,117 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz", - "integrity": "sha512-sW77BFwJ48YvQp3Gzz5xtAUiXuYOL2aMJKDwiaY3OcvdqBFurtYfOpSa4QrNyDxmOGRFSYzUpabU2m9QrlWE7w==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", "dev": true, "requires": { - "chalk": "2.3.1", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true } } }, "@babel/helper-function-name": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz", - "integrity": "sha512-/SGPOyifPf20iTrMN+WdlY2MbKa7/o4j7B/4IAsdOusASp2icT+Wcdjf4tjJHaXNX8Pe9bpgVxLNxhRvcf8E5w==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.36", - "@babel/template": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36" + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz", - "integrity": "sha512-vPPcx2vsSoDbcyWr9S3nd0FM3B4hEXnt0p1oKpwa08GwK0fSRxa98MyaRGf8suk8frdQlG1P3mDrz5p/Rr3pbA==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.36" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" } }, "@babel/template": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.36.tgz", - "integrity": "sha512-mUBi90WRyZ9iVvlWLEdeo8gn/tROyJdjKNC4W5xJTSZL+9MS89rTJSqiaJKXIkxk/YRDL/g/8snrG/O0xl33uA==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36", - "babylon": "7.0.0-beta.36", - "lodash": "4.17.5" + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "^4.2.0" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.36.tgz", - "integrity": "sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", "dev": true } } }, "@babel/traverse": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.36.tgz", - "integrity": "sha512-OTUb6iSKVR/98dGThRJ1BiyfwbuX10BVnkz89IpaerjTPRhDfMBfLsqmzxz5MiywUOW4M0Clta0o7rSxkfcuzw==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "@babel/helper-function-name": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36", - "babylon": "7.0.0-beta.36", - "debug": "3.1.0", - "globals": "11.3.0", - "invariant": "2.2.2", - "lodash": "4.17.5" + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.36.tgz", - "integrity": "sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", "dev": true }, "debug": { @@ -116,30 +126,18 @@ "requires": { "ms": "2.0.0" } - }, - "globals": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", - "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, "@babel/types": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.36.tgz", - "integrity": "sha512-PyAORDO9um9tfnrddXgmWN9e6Sq9qxraQIt5ynqBOSXKA5qvK1kUr+Q3nSzKFdzorsiK+oqcUnAFvEoKxv9D+Q==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", "dev": true, "requires": { - "esutils": "2.0.2", - "lodash": "4.17.5", - "to-fast-properties": "2.0.0" + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" }, "dependencies": { "to-fast-properties": { @@ -151,9 +149,9 @@ } }, "@cliqz-oss/dexie": { - "version": "2.0.1-security-error-fix", - "resolved": "https://registry.npmjs.org/@cliqz-oss/dexie/-/dexie-2.0.1-security-error-fix.tgz", - "integrity": "sha512-wdqUrGfvVt3jwUcJI+YayBcbFzjof6KCTpi7WfYfejuW/i3IpCFori7xOJLRo/rEj+2V9+ra38lANDMBTwDtkg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@cliqz-oss/dexie/-/dexie-2.0.3.tgz", + "integrity": "sha512-XHXySmU+9aqlOQkxCE9e0huUrxHS5I63iZOeP2vORSRu4s5mCmVIUZNt0/AnxkMUMorHTWF0eHGnn+p0VAwOBg==" }, "@cliqz-oss/pouchdb": { "version": "6.3.4-security-error-fix-2", @@ -177,8 +175,165 @@ "request": "2.80.0", "spark-md5": "3.0.0", "through2": "2.0.3", - "uuid": "3.2.1", + "uuid": "^3.1.0", "vuvuzela": "1.0.3" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "buffer-from": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz", + "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=", + "requires": { + "is-array-buffer-x": "^1.0.13" + } + }, + "debug": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz", + "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=", + "requires": { + "ms": "0.7.3" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } + }, + "ms": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "readable-stream": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", + "integrity": "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "request": { + "version": "2.80.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.80.0.tgz", + "integrity": "sha1-jMFi1215OBze/dNQXXa4C2BYm9A=", + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.0", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.3.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1", + "uuid": "^3.0.0" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "@cliqz-oss/systemjs-builder": { + "version": "0.16.13", + "resolved": "https://registry.npmjs.org/@cliqz-oss/systemjs-builder/-/systemjs-builder-0.16.13.tgz", + "integrity": "sha512-k3fYWo2O0dQi1+cpSowWy0LxWULlW2sZs/+wM15USnDuVAMFwGP1HNHzPdrcGaWYrmNcJjmquiq6dFn0hzTx6g==", + "requires": { + "babel-core": "^6.24.1", + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-amd-system-wrapper": "^0.3.7", + "babel-plugin-transform-cjs-system-wrapper": "^0.6.2", + "babel-plugin-transform-es2015-modules-systemjs": "^6.6.5", + "babel-plugin-transform-global-system-wrapper": "^0.3.4", + "babel-plugin-transform-system-register": "^0.0.1", + "bluebird": "^3.3.4", + "data-uri-to-buffer": "0.0.4", + "es6-template-strings": "^2.0.0", + "glob": "^7.0.3", + "mkdirp": "^0.5.1", + "rollup": "^0.36.3", + "source-map": "^0.5.3", + "systemjs": "^0.19.46", + "traceur": "0.0.105", + "uglify-js": "^2.6.1" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } } }, "@cliqz/adblocker": { @@ -186,32 +341,213 @@ "resolved": "https://registry.npmjs.org/@cliqz/adblocker/-/adblocker-0.1.7.tgz", "integrity": "sha512-qMurMDwT0+6cSDkrWoriVpJbaffJzLmPRxJIU+7/c7CaWYrOBw96+zpa2zpyL3+2CiLBXiDsqyQ0uTubz/MldA==", "requires": { - "tldjs": "https://github.com/remusao/tld.js/releases/download/v2.2.0/tldjs-2.2.0.tgz" + "tldjs": "2.2.0" + }, + "dependencies": { + "tldjs": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tldjs/-/tldjs-2.2.0.tgz", + "integrity": "sha512-5b5t+HKprfccAFRAsH/fzDR4O+UgO6vStvbaJo10jvMcUavlwxR3Jrn2WmXfjG3k22T7b4pqqfput38nr1RpJQ==", + "requires": { + "punycode": "^1.4.1" + } + } } }, - "@cliqz/indexeddbshim": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@cliqz/indexeddbshim/-/indexeddbshim-3.4.0.tgz", - "integrity": "sha512-wEcwB8T/OdF0Wgnr/G20d4kg+s5YSmRbYTXtAR/BiYUXjuV47IPLTtLLxuVQmift4u97yKvjLwjCQTO2G/ermQ==", + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, "requires": { - "babel-polyfill": "6.26.0", - "eventtargeter": "0.3.1", - "sync-promise": "git+https://github.com/brettz9/sync-promise.git#25845a49a00aa2d2c985a5149b97c86a1fcdc75a", - "typeson": "5.7.1", - "typeson-registry": "1.0.0-alpha.18", - "unicode-9.0.0": "0.7.4", - "websql": "git+https://github.com/brettz9/node-websql.git#c9828a34c92eced64858fc19151ec099fd60e8dd" + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" } }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, "@sinonjs/formatio": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", "dev": true, "requires": { "samsam": "1.3.0" } }, + "@types/node": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.0.7.tgz", + "integrity": "sha512-N1yNpbFLXee9oCdSAjYwoiPFALscOBs4x8dO6di2H/5zCJ/AE5Fr3AH5MDoMq/cxPWyYA2RIvfo2+3uHgjywbA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.3.1.tgz", + "integrity": "sha512-WJKy500MK6cM5LNcOjKlLHnYtTU5PcmL06iXErYriA90GLn7W/EzIyknZRx0Bj3W6FjYKTPkHADdE3GM0ZJk1Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-wasm-bytecode": "1.3.1", + "@webassemblyjs/wast-parser": "1.3.1", + "webassemblyjs": "1.3.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.3.1.tgz", + "integrity": "sha512-8kCRyt0bQSnZD67UQfDTONO0jD7HCxmNUUJfT9OnVok0RWYs/AnpS83kfHtQjHucRMyx2d+YlsJWkdhXdLobqA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.3.1.tgz", + "integrity": "sha512-xIcxcfkBrrivLauyXJ57i/ArPy+kFgZjMDrxm4pSUBG2VtwwYKjOZAyjf4qsM4JbP5vRuRzMD2gp+a9WMyC3PA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.3.1.tgz", + "integrity": "sha512-X305tLl7qeTixYz0/Y0Xu+bcNizJLfHUZ1iTiVtorDkh5mLrIZ8hLkkM2oYNSq/oaoW6gpHDrHRfYZItExTeeQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.3.1" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.3.1.tgz", + "integrity": "sha512-Be1G8ZDTP1T+vXaVMraXY8+SoJnOVNarRkByrM83PHjW+vqUwubwYPpA4U2NBTz4WG19vYpfsUccCZwOPiyK+Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.3.1.tgz", + "integrity": "sha512-rOIjy/Cmd+hspim9B/c7dUqhW8AyKsRceVcQtWljIvFSitx9rsL5m73NGaGFUVAEaMDvvEzYczehjwbrHPz4KA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.3.1.tgz", + "integrity": "sha512-mDBlDsrsl1Y7LGEdmlTzdDwr/SCe2l9ZsQZ1GYXird71jlU/0djs5ZXfxyufd1G3wO+yuxW997m50Patk4s1fA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1", + "@webassemblyjs/helper-buffer": "1.3.1", + "@webassemblyjs/helper-wasm-bytecode": "1.3.1", + "@webassemblyjs/wasm-gen": "1.3.1" + } + }, + "@webassemblyjs/leb128": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.3.1.tgz", + "integrity": "sha512-CgkWUXRINTGs/+Swp8COvwOk5Ci4spv1MKDdGfRecyFiLGs7wYm/p4fgRQWzBEFaotEP/ftPa9O6BFykrwghzw==", + "dev": true, + "requires": { + "leb": "^0.3.0" + } + }, + "@webassemblyjs/validation": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/validation/-/validation-1.3.1.tgz", + "integrity": "sha512-afp32tgDVwW53lQc58PtIBifyZf3qGzRpl9r+8SNHzPOe6lBamjK1RWEA83YHwvu7qk6uBV7IAeUC7BgdxPtsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1" + } + }, + "@webassemblyjs/wasm-edit": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.3.1.tgz", + "integrity": "sha512-0T75tHKR0dIDiO3oqBZmo+2McJy5FkgSL2AIP3rJvqrDFaJ19jCrC5KLqGbqo3ZicdY9x9Xdc9zaY2A1TCkAiw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1", + "@webassemblyjs/helper-buffer": "1.3.1", + "@webassemblyjs/helper-wasm-bytecode": "1.3.1", + "@webassemblyjs/helper-wasm-section": "1.3.1", + "@webassemblyjs/wasm-gen": "1.3.1", + "@webassemblyjs/wasm-opt": "1.3.1", + "@webassemblyjs/wasm-parser": "1.3.1", + "@webassemblyjs/wast-printer": "1.3.1", + "debug": "^3.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.3.1.tgz", + "integrity": "sha512-iYgQ3UJpsKiJnXerHulT//JpJAHuLavqMPEtUiRnSh0r/WvZh8pNtYBaN2v64+d9yTtu9aMlJmlKi6uz1j5FFg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1", + "@webassemblyjs/helper-wasm-bytecode": "1.3.1", + "@webassemblyjs/leb128": "1.3.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.3.1.tgz", + "integrity": "sha512-Eqi1he5VuGxMYKGhrBU+UxUhIwTDlnuvJmwrad3k4dD2UQpqu3HedRndGdJTQ68xj2GqDCdE6QiLzjytSN4KVQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1", + "@webassemblyjs/helper-buffer": "1.3.1", + "@webassemblyjs/wasm-gen": "1.3.1", + "@webassemblyjs/wasm-parser": "1.3.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.3.1.tgz", + "integrity": "sha512-euRnqP/bky9DGbXf5Nqvtmc5soOM7xkvwI2H+LSP88NAFkcGMPEnrAP4UbsFAH+ESnS4kAW6wL5UyzjWBiiTbA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1", + "@webassemblyjs/helper-wasm-bytecode": "1.3.1", + "@webassemblyjs/leb128": "1.3.1", + "@webassemblyjs/wasm-parser": "1.3.1", + "webassemblyjs": "1.3.1" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.3.1.tgz", + "integrity": "sha512-lM7Kwsp1mqqL3jq1kXKeoT8Z/cXvPQ2kWBNg19nZXbL1eLgr+4qRi83WvQU45+5+uIovigtBw/WU0nLLev7LGA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1", + "@webassemblyjs/floating-point-hex-parser": "1.3.1", + "@webassemblyjs/helper-code-frame": "1.3.1", + "@webassemblyjs/helper-fsm": "1.3.1", + "long": "^3.2.0", + "webassemblyjs": "1.3.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.3.1.tgz", + "integrity": "sha512-V2SMByzsrTT2wGQOjm/3ctCiy8mdYOSLDk+EkOpNHVZWB9ISJc+gZWzniTgihih03UWqqNa1S/0XpyVz7ZEYSQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1", + "@webassemblyjs/wast-parser": "1.3.1", + "long": "^3.2.0" + } + }, "BigInt": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/BigInt/-/BigInt-5.5.3.tgz", @@ -233,30 +569,22 @@ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", "requires": { - "xtend": "4.0.1" + "xtend": "~4.0.0" } }, "acorn": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", "dev": true }, "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "4.0.13" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } + "acorn": "^5.0.0" } }, "acorn-globals": { @@ -265,7 +593,7 @@ "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", "dev": true, "requires": { - "acorn": "5.4.1" + "acorn": "^5.0.0" } }, "acorn-jsx": { @@ -274,7 +602,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -295,10 +623,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "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": { @@ -312,9 +640,9 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "alphanum-sort": { @@ -328,7 +656,7 @@ "resolved": "https://registry.npmjs.org/amd-name-resolver/-/amd-name-resolver-0.0.7.tgz", "integrity": "sha1-gUMBrf6KLxCfboTV6TUZbvtmlhU=", "requires": { - "ensure-posix-path": "1.0.2" + "ensure-posix-path": "^1.0.1" } }, "amdefine": { @@ -341,8 +669,8 @@ "resolved": "https://registry.npmjs.org/animated/-/animated-0.2.2.tgz", "integrity": "sha512-7pMzS0Sk2lA6/JT6he+apuy3GnDWUWVCurHMrpsbT9ugeLe80kpDQWjZQvkFiU9o7LsPGydPnoZpJsmt1HPPMA==", "requires": { - "invariant": "2.2.2", - "normalize-css-color": "1.0.2" + "invariant": "^2.2.0", + "normalize-css-color": "^1.0.1" } }, "ansi": { @@ -351,93 +679,345 @@ "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" }, "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "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=" + "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=" - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "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": { - "default-require-extensions": "1.0.0" + "color-convert": "^1.9.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "any-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", + "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", "dev": true }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } - } - }, - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, "requires": { - "underscore": "1.7.0", - "underscore.string": "2.4.0" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" }, "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" - } - } - }, - "argsarray": { + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "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" + } + }, + "argsarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz", "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" @@ -449,15 +1029,7 @@ "dev": true, "requires": { "ast-types-flow": "0.0.7", - "commander": "2.14.1" - }, - "dependencies": { - "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", - "dev": true - } + "commander": "^2.11.0" } }, "arr-diff": { @@ -466,7 +1038,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -475,6 +1047,18 @@ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", @@ -491,8 +1075,8 @@ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" } }, "array-index": { @@ -500,8 +1084,8 @@ "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", "integrity": "sha1-7FanSe4QPk4Ix5C5w1PfFgVbl/k=", "requires": { - "debug": "2.6.4", - "es6-symbol": "3.1.1" + "debug": "^2.2.0", + "es6-symbol": "^3.0.2" } }, "array-union": { @@ -510,7 +1094,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -547,9 +1131,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -562,9 +1146,15 @@ } }, "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, "ast-types": { "version": "0.9.6", @@ -584,23 +1174,30 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, "async-disk-cache": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/async-disk-cache/-/async-disk-cache-1.3.3.tgz", "integrity": "sha512-GyaWSbDAZCltxSobtj1m1ptXa0+zSdjWs3sM4IqnvhoRwMDHW5786sXQ1RiXbR3ZGuQe6NXMB4N0vUmW163cew==", "requires": { - "debug": "2.6.4", - "heimdalljs": "0.2.5", + "debug": "^2.1.3", + "heimdalljs": "^0.2.3", "istextorbinary": "2.1.0", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "rsvp": "3.6.2", + "mkdirp": "^0.5.0", + "rimraf": "^2.5.3", + "rsvp": "^3.0.18", "username-sync": "1.0.1" + }, + "dependencies": { + "istextorbinary": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.1.0.tgz", + "integrity": "sha1-2+0qb1G+L3R1to+JRlgRFBt1iHQ=", + "requires": { + "binaryextensions": "1 || 2", + "editions": "^1.1.1", + "textextensions": "1 || 2" + } + } } }, "async-each": { @@ -626,8 +1223,8 @@ "resolved": "https://registry.npmjs.org/async-promise-queue/-/async-promise-queue-1.0.4.tgz", "integrity": "sha512-GQ5X3DT+TefYuFPHdvIPXFTlKnh39U7dwtl+aUBGeKjMea9nBpv3c91DXgeyBQmY07vQ97f3Sr9XHqkamEameQ==", "requires": { - "async": "2.6.0", - "debug": "2.6.9" + "async": "^2.4.1", + "debug": "^2.6.8" }, "dependencies": { "async": { @@ -635,21 +1232,8 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "requires": { - "lodash": "4.17.5" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" + "lodash": "^4.14.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -658,6 +1242,12 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, "attempt-x": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/attempt-x/-/attempt-x-1.1.3.tgz", @@ -674,24 +1264,12 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000808", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000808", - "electron-to-chromium": "1.3.33" - } - } + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" } }, "aws-sign2": { @@ -700,9 +1278,9 @@ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "axobject-query": { "version": "0.1.0", @@ -718,70 +1296,92 @@ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.5", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ms": "2.0.0" + "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" } }, - "ms": { + "has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "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=" } } }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, "babel-eslint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.1.tgz", - "integrity": "sha512-RzdVOyWKQRUnLXhwLk+eKb4oyW+BykZSkpYwFhM4tnfzAG5OWfvG0w/uyzMp5XKEU0jN82+JefHr39bG2+KhRQ==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.3.tgz", + "integrity": "sha512-0HeSTtaXg/Em7FCUWxwOT+KeFSO1O7LuRuzhk7g+1BjwdlQGlHq4OyMi3GqGxrNfEq8jEi6Hmt5ylEQUhurgiQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "@babel/traverse": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36", - "babylon": "7.0.0-beta.36", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0" + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "eslint-scope": "~3.7.1", + "eslint-visitor-keys": "^1.0.0" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.36.tgz", - "integrity": "sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==", + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", "dev": true } } @@ -791,21 +1391,25 @@ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.5", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" - } + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -813,9 +1417,9 @@ "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-builder-react-jsx": { @@ -824,9 +1428,9 @@ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "esutils": "2.0.2" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" } }, "babel-helper-call-delegate": { @@ -834,10 +1438,10 @@ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -845,10 +1449,10 @@ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.5" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { @@ -856,9 +1460,21 @@ "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -866,11 +1482,11 @@ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -878,8 +1494,8 @@ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -887,8 +1503,8 @@ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -896,8 +1512,8 @@ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -905,9 +1521,9 @@ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.5" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -915,11 +1531,11 @@ "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -927,12 +1543,12 @@ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -940,29 +1556,29 @@ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-jest": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.2.2.tgz", - "integrity": "sha512-GOutNE3jhFj5WWLd09e9+kkPwzqOSWRj1J1YslVxnKkmgKaWjfvE9k3JGMf8MJYGzEZr6dVK5bg9RWRi/2tGiQ==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.3.tgz", + "integrity": "sha512-BgSjmtl3mW3i+VeVHEr9d2zFSAT66G++pJcHQiUjd00pkW+voYXFctIm/indcqOWWXw5a1nUpR1XWszD9fJ1qg==", "dev": true, "requires": { - "babel-plugin-istanbul": "4.1.5", - "babel-preset-jest": "22.2.0" + "babel-plugin-istanbul": "^4.1.5", + "babel-preset-jest": "^22.4.3" } }, "babel-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", - "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", + "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "dev": true, "requires": { - "find-cache-dir": "1.0.0", - "loader-utils": "1.1.0", - "mkdirp": "0.5.1" + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" } }, "babel-messages": { @@ -970,7 +1586,7 @@ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -978,7 +1594,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-debug-macros": { @@ -986,7 +1602,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.1.11.tgz", "integrity": "sha512-hZw5qNNGAR02Y+yBUrtsnJHh8OXavkayPRqKGAXnIm4t5rWVpj3ArwsC7TWdpZsBguQvHAeyTxZ7s23yY60HHg==", "requires": { - "semver": "5.3.0" + "semver": "^5.3.0" } }, "babel-plugin-ember-modules-api-polyfill": { @@ -994,24 +1610,25 @@ "resolved": "https://registry.npmjs.org/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.3.0.tgz", "integrity": "sha512-cv5ZimF5X52uW7Ul83UUxtsFZE6rZYkMv6qWnAeiDLT1/KtpVrTkJpwzDlvJ/FhKJZ43ih4GbFbhuhBKKT7vIw==", "requires": { - "ember-rfc176-data": "0.3.1" + "ember-rfc176-data": "^0.3.0" } }, "babel-plugin-istanbul": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz", - "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", "dev": true, "requires": { - "find-up": "2.1.0", - "istanbul-lib-instrument": "1.9.2", - "test-exclude": "4.2.0" + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" } }, "babel-plugin-jest-hoist": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.2.0.tgz", - "integrity": "sha512-NwicD5n1YQaj6sM3PVULdPBDk1XdlWvh8xBeUJg3nqZwp79Vofb8Q7GOVeWoZZ/RMlMuJMMrEAgSQl/p392nLA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz", + "integrity": "sha512-zhvv4f6OTWy2bYevcJftwGCWXMFe7pqoz41IhMi4xna7xNsX5NygdagsrE0y6kkfuXq8UalwvPwKTyAxME2E/g==", "dev": true }, "babel-plugin-syntax-async-functions": { @@ -1019,12 +1636,30 @@ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, "babel-plugin-syntax-class-properties": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", "dev": true }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, "babel-plugin-syntax-dynamic-import": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", @@ -1035,6 +1670,12 @@ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, "babel-plugin-syntax-flow": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", @@ -1063,7 +1704,18 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-amd-system-wrapper/-/babel-plugin-transform-amd-system-wrapper-0.3.7.tgz", "integrity": "sha1-Uhx4LTVkRJHJeepoPopeHK/wukI=", "requires": { - "babel-template": "6.26.0" + "babel-template": "^6.9.0" + } + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-async-to-generator": { @@ -1071,9 +1723,9 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-cjs-system-wrapper": { @@ -1081,7 +1733,18 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-cjs-system-wrapper/-/babel-plugin-transform-cjs-system-wrapper-0.6.2.tgz", "integrity": "sha1-vXSUd1KJQk/0k7btRV3klb1xuh0=", "requires": { - "babel-template": "6.26.0" + "babel-template": "^6.9.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "requires": { + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-class-properties": { @@ -1090,10 +1753,23 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -1101,7 +1777,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -1109,7 +1785,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -1117,11 +1793,11 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.5" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -1129,15 +1805,15 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -1145,8 +1821,8 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -1154,7 +1830,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -1162,8 +1838,8 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -1171,7 +1847,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -1179,9 +1855,9 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -1189,7 +1865,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -1197,20 +1873,20 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -1218,9 +1894,9 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -1228,9 +1904,9 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -1238,8 +1914,8 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -1247,12 +1923,12 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -1260,8 +1936,8 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -1269,7 +1945,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1277,9 +1953,9 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1287,7 +1963,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1295,7 +1971,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1303,9 +1979,21 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + }, + "dependencies": { + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + } } }, "babel-plugin-transform-exponentiation-operator": { @@ -1313,27 +2001,37 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, - "babel-plugin-transform-flow-strip-types": { + "babel-plugin-transform-export-extensions": { "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, - "babel-plugin-transform-global-system-wrapper": { + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "requires": { + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-global-system-wrapper": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/babel-plugin-transform-global-system-wrapper/-/babel-plugin-transform-global-system-wrapper-0.3.4.tgz", "integrity": "sha1-lI3X0p/CFEfjm9NEfy3rx/L3Oqw=", "requires": { - "babel-template": "6.26.0" + "babel-template": "^6.9.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -1342,8 +2040,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" } }, "babel-plugin-transform-react-display-name": { @@ -1352,7 +2050,7 @@ "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx": { @@ -1361,9 +2059,9 @@ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "6.26.0", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-self": { @@ -1372,8 +2070,8 @@ "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-react-jsx-source": { @@ -1382,8 +2080,8 @@ "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-regenerator": { @@ -1391,7 +2089,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -1399,8 +2097,8 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-system-register": { @@ -1413,46 +2111,96 @@ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "regenerator-runtime": "0.10.5" + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + } } }, "babel-preset-env": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", - "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "2.11.3", - "invariant": "2.2.2", - "semver": "5.3.0" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "browserslist": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.7.tgz", + "integrity": "sha512-oYVLxFVqpX9uMhOIQBLtZL+CX4uY8ZpWcjNTaxyWl5rO8yA9SSNikFnAfvk8J3P/7z3BZwNmEqFKaJoYltj3MQ==", + "requires": { + "caniuse-lite": "^1.0.30000835", + "electron-to-chromium": "^1.3.45" + } + } + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-preset-flow": { @@ -1461,17 +2209,17 @@ "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" + "babel-plugin-transform-flow-strip-types": "^6.22.0" } }, "babel-preset-jest": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.2.0.tgz", - "integrity": "sha512-p61cPMGYlSgfNScn1yQuVnLguWE4bjhB/br4KQDMbYZG+v6ryE5Ch7TKukjA6mRuIQj1zhyou7Sbpqrh4/N6Pg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz", + "integrity": "sha512-a+M3LTEXTq3gxv0uBN9Qm6ahUl7a8pj923nFbCUdqFUSsf3YrX8Uc+C3MEwji5Af3LiQjSC7w4ooYewlz8HRTA==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "22.2.0", - "babel-plugin-syntax-object-rest-spread": "6.13.0" + "babel-plugin-jest-hoist": "^22.4.3", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" } }, "babel-preset-react": { @@ -1480,12 +2228,48 @@ "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-react-display-name": "6.25.0", - "babel-plugin-transform-react-jsx": "6.24.1", - "babel-plugin-transform-react-jsx-self": "6.22.0", - "babel-plugin-transform-react-jsx-source": "6.22.0", - "babel-preset-flow": "6.23.0" + "babel-plugin-syntax-jsx": "^6.3.13", + "babel-plugin-transform-react-display-name": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.24.1", + "babel-plugin-transform-react-jsx-self": "^6.22.0", + "babel-plugin-transform-react-jsx-source": "^6.22.0", + "babel-preset-flow": "^6.23.0" + } + }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "requires": { + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-preset-stage-2": "^6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" } }, "babel-register": { @@ -1493,13 +2277,13 @@ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "home-or-tmp": "2.0.0", - "lodash": "4.17.5", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" } }, "babel-runtime": { @@ -1507,15 +2291,8 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -1523,11 +2300,11 @@ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.5" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1535,29 +2312,21 @@ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.5" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" } } }, @@ -1566,10 +2335,10 @@ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.5", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1578,19 +2347,76 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true }, - "base64-arraybuffer-es6": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.3.1.tgz", - "integrity": "sha512-TrhBheudYaff9adiTAqjSScjvtmClQ4vF9l4cqkPNkVsA11m4/NRdH4LkZ/tAMmpzzwfI20BXnJ/PTtafECCNA==" + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -1598,7 +2424,7 @@ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "big.js": { @@ -1624,27 +2450,12 @@ "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" }, "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "requires": { - "readable-stream": "2.3.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "blank-object": { @@ -1657,7 +2468,7 @@ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "bluebird": { @@ -1671,26 +2482,46 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" + }, + "dependencies": { + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } } }, "bowser": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.2.tgz", - "integrity": "sha512-fuiANC1Bqbqa/S4gmvfCt7bGBmNELMsGZj4Wg3PrP6esP66Ttoj1JSlzFlXtHyduMv07kDNmDsX6VsMWT/MLGg==" + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.3.tgz", + "integrity": "sha512-/gp96UlcFw5DbV2KQPCqTqi0Mb9gZRyDAHiDsGEH+4B/KOQjeoE5lM1PxlVX8DQDvfEfitmC1rW2Oy8fk/XBDg==" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + } } }, "braces": { @@ -1699,9 +2530,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "broccoli-babel-transpiler": { @@ -1709,16 +2540,23 @@ "resolved": "https://registry.npmjs.org/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.1.4.tgz", "integrity": "sha512-h63g7iOBWdxj0GuZw8kNsyaD1T9weKsY3I+gp3rOefozbHwUesJ43vzLy0jj3t/rbiP2czcJAlyHS48EcRil8Q==", "requires": { - "babel-core": "6.26.0", - "broccoli-funnel": "1.2.0", - "broccoli-merge-trees": "1.2.4", - "broccoli-persistent-filter": "1.4.3", - "clone": "2.1.1", - "hash-for-dep": "1.2.3", - "heimdalljs-logger": "0.1.9", - "json-stable-stringify": "1.0.1", - "rsvp": "3.6.2", - "workerpool": "2.3.0" + "babel-core": "^6.14.0", + "broccoli-funnel": "^1.0.0", + "broccoli-merge-trees": "^1.0.0", + "broccoli-persistent-filter": "^1.4.0", + "clone": "^2.0.0", + "hash-for-dep": "^1.0.2", + "heimdalljs-logger": "^0.1.7", + "json-stable-stringify": "^1.0.0", + "rsvp": "^3.5.0", + "workerpool": "^2.3.0" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" + } } }, "broccoli-debug": { @@ -1726,12 +2564,12 @@ "resolved": "https://registry.npmjs.org/broccoli-debug/-/broccoli-debug-0.6.4.tgz", "integrity": "sha512-CixMUndBqTljCc26i6ubhBrGbAWXpWBsGJFce6ZOr76Tul2Ev1xxM0tmf7OjSzdYhkr5BrPd/CNbR9VMPi+NBg==", "requires": { - "broccoli-plugin": "1.3.0", - "fs-tree-diff": "0.5.7", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "symlink-or-copy": "1.2.0", - "tree-sync": "1.2.2" + "broccoli-plugin": "^1.2.1", + "fs-tree-diff": "^0.5.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "symlink-or-copy": "^1.1.8", + "tree-sync": "^1.2.2" } }, "broccoli-funnel": { @@ -1739,20 +2577,20 @@ "resolved": "https://registry.npmjs.org/broccoli-funnel/-/broccoli-funnel-1.2.0.tgz", "integrity": "sha1-zdw6/F/xaFqAI0iP/3TOb7WlEpY=", "requires": { - "array-equal": "1.0.0", - "blank-object": "1.0.2", - "broccoli-plugin": "1.3.0", - "debug": "2.6.4", + "array-equal": "^1.0.0", + "blank-object": "^1.0.1", + "broccoli-plugin": "^1.3.0", + "debug": "^2.2.0", "exists-sync": "0.0.4", - "fast-ordered-set": "1.0.3", - "fs-tree-diff": "0.5.7", - "heimdalljs": "0.2.5", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "path-posix": "1.0.0", - "rimraf": "2.6.2", - "symlink-or-copy": "1.2.0", - "walk-sync": "0.3.2" + "fast-ordered-set": "^1.0.0", + "fs-tree-diff": "^0.5.3", + "heimdalljs": "^0.2.0", + "minimatch": "^3.0.0", + "mkdirp": "^0.5.0", + "path-posix": "^1.0.0", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0", + "walk-sync": "^0.3.1" } }, "broccoli-kitchen-sink-helpers": { @@ -1760,8 +2598,8 @@ "resolved": "https://registry.npmjs.org/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.3.1.tgz", "integrity": "sha1-d8fBgZS5ZkFj7E/O4nk0RJJuDAY=", "requires": { - "glob": "5.0.15", - "mkdirp": "0.5.1" + "glob": "^5.0.10", + "mkdirp": "^0.5.1" }, "dependencies": { "glob": { @@ -1769,11 +2607,11 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -1783,14 +2621,14 @@ "resolved": "https://registry.npmjs.org/broccoli-merge-trees/-/broccoli-merge-trees-1.2.4.tgz", "integrity": "sha1-oAFRm7UGfwZYnZGvopQkRaLQ/bU=", "requires": { - "broccoli-plugin": "1.3.0", - "can-symlink": "1.0.0", - "fast-ordered-set": "1.0.3", - "fs-tree-diff": "0.5.7", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "rimraf": "2.6.2", - "symlink-or-copy": "1.2.0" + "broccoli-plugin": "^1.3.0", + "can-symlink": "^1.0.0", + "fast-ordered-set": "^1.0.2", + "fs-tree-diff": "^0.5.4", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "rimraf": "^2.4.3", + "symlink-or-copy": "^1.0.0" } }, "broccoli-persistent-filter": { @@ -1798,19 +2636,19 @@ "resolved": "https://registry.npmjs.org/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.3.tgz", "integrity": "sha512-JwNLDvvXJlhUmr+CHcbVhCyp33NbCIAITjQZmJY9e8QzANXh3jpFWlhSFvkWghwKA8rTAKcXkW12agtiZjxr4g==", "requires": { - "async-disk-cache": "1.3.3", - "async-promise-queue": "1.0.4", - "broccoli-plugin": "1.3.0", - "fs-tree-diff": "0.5.7", - "hash-for-dep": "1.2.3", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "mkdirp": "0.5.1", - "promise-map-series": "0.2.3", - "rimraf": "2.6.2", - "rsvp": "3.6.2", - "symlink-or-copy": "1.2.0", - "walk-sync": "0.3.2" + "async-disk-cache": "^1.2.1", + "async-promise-queue": "^1.0.3", + "broccoli-plugin": "^1.0.0", + "fs-tree-diff": "^0.5.2", + "hash-for-dep": "^1.0.2", + "heimdalljs": "^0.2.1", + "heimdalljs-logger": "^0.1.7", + "mkdirp": "^0.5.1", + "promise-map-series": "^0.2.1", + "rimraf": "^2.6.1", + "rsvp": "^3.0.18", + "symlink-or-copy": "^1.0.1", + "walk-sync": "^0.3.1" } }, "broccoli-plugin": { @@ -1818,10 +2656,10 @@ "resolved": "https://registry.npmjs.org/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz", "integrity": "sha1-vucEqOQtoIy1jlE6qkNu+38O8e4=", "requires": { - "promise-map-series": "0.2.3", - "quick-temp": "0.1.8", - "rimraf": "2.6.2", - "symlink-or-copy": "1.2.0" + "promise-map-series": "^0.2.1", + "quick-temp": "^0.1.3", + "rimraf": "^2.3.4", + "symlink-or-copy": "^1.1.8" } }, "broccoli-source": { @@ -1836,30 +2674,29 @@ "dev": true }, "browser-core": { - "version": "https://s3.amazonaws.com/cdncliqz/update/edge/ghostery/v7.24/7.24.2.tgz", - "integrity": "sha512-liuhqgOebZq47qAdS8+dOAIFLFRZuXVMpj95chw0A9JxD1avA/YgnjCDVPPZjxG5zEm2JrcYlTtsHCuRhBDrQA==", + "version": "https://s3.amazonaws.com/cdncliqz/update/edge/ghostery/v7.26/1.26.3.tgz?v=1", + "integrity": "sha512-g8RY6Dsgjt4OIOSBXqjLMlzs95msjDzhF6CuMrUN3iut+mIN594qnJQfVvnOA0/YGNzYXuhlviS46IgTeC4Zgw==", "requires": { - "@cliqz-oss/dexie": "2.0.1-security-error-fix", + "@cliqz-oss/dexie": "2.0.3", "@cliqz-oss/pouchdb": "6.3.4-security-error-fix-2", + "@cliqz-oss/systemjs-builder": "0.16.13", "@cliqz/adblocker": "0.1.7", - "@cliqz/indexeddbshim": "3.4.0", "BigInt": "5.5.3", "ajv": "5.5.2", "babel-polyfill": "6.26.0", - "cliqz-history": "https://github.com/cliqz-oss/cliqz-history/releases/download/1.0.4/cliqz-history-1.0.4.tgz", + "cliqz-history": "https://github.com/cliqz-oss/cliqz-history/releases/download/1.0.6/cliqz-history-1.0.6.tgz", "cron": "1.2.1", "cron-parser": "2.4.0", "deep-equal": "1.0.1", - "dexie": "2.0.1", "ember-inflector": "2.0.1", "es6-micro-loader": "github:cliqz-oss/es6-micro-loader#145e7bdbd8be2f4582096175482b1411eb56ec79", - "fast-url-parser": "1.1.2", + "fast-url-parser": "=1.1.2", "fs-extra": "3.0.1", "glob": "7.1.2", "global": "4.3.2", "hammerjs": "2.0.8", "handlebars": "4.0.11", - "jquery": "2.2.4", + "jquery": "3.0.0", "js-md5": "0.7.3", "jsep": "0.3.0", "mathjs": "3.17.0", @@ -1879,26 +2716,37 @@ "sanitize-filename": "1.6.1", "simple-statistics": "5.2.1", "spanan": "1.3.0", - "systemjs-builder": "0.16.12", "tablesorter": "2.29.2", "text-encoding": "0.6.4", - "tldjs": "https://github.com/remusao/tld.js/releases/download/v2.2.0/tldjs-2.2.0.tgz", + "tldjs": "2.3.1", + "ua-parser-js": "0.7.12", "untildify": "3.0.2", "url-pattern": "1.0.3", "useragent.js": "0.5.6", "xhr2": "0.1.4", - "ytdl-core": "0.18.7", + "ytdl-core": "0.20.2", "yuidoc-bootstrap-theme": "1.0.6" }, "dependencies": { + "cliqz-history": { + "version": "https://github.com/cliqz-oss/cliqz-history/releases/download/1.0.6/cliqz-history-1.0.6.tgz", + "integrity": "sha512-H5rS5klOQRYSatbQw8QZ7lVwYy1aomTjV324q1Nffzd6aBsmvtN8eyt3ITu34sS2HBF64Cv41GptyVvTBe8f/Q==" + }, + "es6-micro-loader": { + "version": "github:cliqz-oss/es6-micro-loader#145e7bdbd8be2f4582096175482b1411eb56ec79", + "from": "github:cliqz-oss/es6-micro-loader#babel6", + "requires": { + "es6-promise": "^1.0.0" + } + }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" } }, "jsonfile": { @@ -1906,23 +2754,31 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + "node-forge": { + "version": "git+https://git@github.com/digitalbazaar/forge.git#af3f590af9d3c809e1cb44b2bb5398a3a6b944c2", + "from": "git+https://git@github.com/digitalbazaar/forge.git#af3f590af9d3c809e1cb44b2bb5398a3a6b944c2" + }, + "prop-types": { + "version": "15.5.10", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", + "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", + "requires": { + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1" + } }, "react": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/react/-/react-16.0.0.tgz", "integrity": "sha1-zn348ZQbA28Cssyp29DLHw6FXi0=", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" }, "dependencies": { "prop-types": { @@ -1930,9 +2786,9 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "fbjs": "^0.8.16", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } } } @@ -1942,10 +2798,42 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.0.0.tgz", "integrity": "sha1-nMMHnD3NcNTG4BuEqrKn40wwP1g=", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.1" + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" + }, + "dependencies": { + "prop-types": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "requires": { + "fbjs": "^0.8.16", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "react": {} + } + }, + "react-native-web": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.1.11.tgz", + "integrity": "sha1-+Gh4fbwOF6TN7mJge6WQ6LgcNpY=", + "requires": { + "animated": "^0.2.0", + "array-find-index": "^1.0.2", + "babel-runtime": "^6.26.0", + "create-react-class": "^15.6.2", + "debounce": "1.0.2", + "deep-assign": "^2.0.0", + "fbjs": "^0.8.16", + "hyphenate-style-name": "^1.0.2", + "inline-style-prefixer": "^3.0.8", + "normalize-css-color": "^1.0.2", + "prop-types": "^15.6.0", + "react-timer-mixin": "^0.13.3" }, "dependencies": { "prop-types": { @@ -1953,12 +2841,34 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "fbjs": "^0.8.16", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } } } + }, + "react-tooltip": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.3.0.tgz", + "integrity": "sha1-UcCK4CIQdeLEPYPNR/x4RmYS330=", + "requires": { + "classnames": "^2.2.0", + "prop-types": "^15.5.8" + } + }, + "rxjs": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", + "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "requires": { + "symbol-observable": "1.0.1" + } + }, + "ua-parser-js": { + "version": "0.7.12", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.12.tgz", + "integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs=" } } }, @@ -1986,39 +2896,39 @@ } }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" } }, "browserify-rsa": { @@ -2027,8 +2937,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -2037,13 +2947,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -2052,16 +2962,17 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.5" + "pako": "~1.0.5" } }, "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, "requires": { - "caniuse-lite": "1.0.30000813", - "electron-to-chromium": "1.3.33" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } }, "bser": { @@ -2070,7 +2981,7 @@ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", "dev": true, "requires": { - "node-int64": "0.4.0" + "node-int64": "^0.4.0" } }, "buffer": { @@ -2079,19 +2990,44 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } } }, - "buffer-from": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz", - "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=", + "buffer-alloc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz", + "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", "requires": { - "is-array-buffer-x": "1.7.0" + "buffer-alloc-unsafe": "^0.1.0", + "buffer-fill": "^0.1.0" } }, + "buffer-alloc-unsafe": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz", + "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=" + }, + "buffer-fill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz", + "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==" + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -2116,18 +3052,130 @@ "integrity": "sha1-wgOpilsCkIIqk4anjtosvVvNsy8=", "dev": true }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, "cached-constructors-x": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cached-constructors-x/-/cached-constructors-x-1.0.2.tgz", "integrity": "sha512-7lKwmwXweW6E/31RHAJemLtZPfb2xvcABXknFF4b/dNYv4DbSGTgQHckXLQkNw6BB4HKFYW6mJgsNjADAy1ehw==" }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "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": "^0.2.0" } }, "callsites": { @@ -2142,14 +3190,15 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true }, "camelcase-keys": { "version": "2.1.0", @@ -2157,8 +3206,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" }, "dependencies": { "camelcase": { @@ -2175,6 +3224,16 @@ "integrity": "sha1-l7YH2KhLtsbiKLkC2GTstZS50hk=", "requires": { "tmp": "0.0.28" + }, + "dependencies": { + "tmp": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "requires": { + "os-tmpdir": "~1.0.1" + } + } } }, "caniuse-api": { @@ -2183,34 +3242,31 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000808", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000808", - "electron-to-chromium": "1.3.33" - } - } + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "caniuse-db": { - "version": "1.0.30000808", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000808.tgz", - "integrity": "sha1-MN/YMAnVcE8C3/s3clBo7RKjZrs=", + "version": "1.0.30000839", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000839.tgz", + "integrity": "sha1-VahuQCx0rhcUlwe+o+o5lSIjNJc=", "dev": true }, "caniuse-lite": { - "version": "1.0.30000813", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000813.tgz", - "integrity": "sha512-A8ITSmH5SFdMFdC704ggjg+x2z5PzQmVlG8tavwnfvbC33Q1UYrj0+G+Xm0SNAnd4He36fwUE/KEWytOEchw+A==" + "version": "1.0.30000839", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000839.tgz", + "integrity": "sha512-gJZIfmkuy84agOeAZc7WJOexZhisZaBSFk96gkGM6TkH7+1mBfr/MSPnXC8lO0g7guh/ucbswYjruvDbzc6i0g==" + }, + "capture-exit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", + "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "dev": true, + "requires": { + "rsvp": "^3.3.3" + } }, "caseless": { "version": "0.12.0", @@ -2223,7 +3279,7 @@ "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", "dev": true, "requires": { - "underscore-contrib": "0.3.0" + "underscore-contrib": "~0.3.0" } }, "center-align": { @@ -2231,20 +3287,19 @@ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chardet": { @@ -2253,21 +3308,18 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" } }, "chownr": { @@ -2275,10 +3327,16 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, + "chrome-trace-event": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz", + "integrity": "sha512-sjndyZHrrWiu4RY7AkHgjn80GfAM2ZSzUkZLV/Js59Ldmh6JDThf0SUmOHU53rFu2rVxxfCzJ30Ukcfch3Gb/A==", + "dev": true + }, "ci-info": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", - "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", "dev": true }, "cipher-base": { @@ -2287,8 +3345,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-json": { @@ -2303,30 +3361,80 @@ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "dev": true, "requires": { - "chalk": "1.1.3" - } - }, - "classnames": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", - "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" - }, - "clean-css": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", - "dev": true, + "chalk": "^1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, + "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 + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", + "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" + }, + "clean-css": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "0.5.x" } }, "clean-webpack-plugin": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.18.tgz", - "integrity": "sha512-Kf1BxQnNy2Zq5TBIgWBTEHrhycOM1QjjBYOoTV5P7WioAPr/sh6fgPwn6xYvTIp3EP+yUqoOL4YFpLQVobeIUg==", + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz", + "integrity": "sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA==", "dev": true, "requires": { - "rimraf": "2.6.2" + "rimraf": "^2.6.1" } }, "cli-cursor": { @@ -2335,7 +3443,48 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "dependencies": { + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + } } }, "cli-width": { @@ -2344,31 +3493,49 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "cliqz-history": { - "version": "https://github.com/cliqz-oss/cliqz-history/releases/download/1.0.4/cliqz-history-1.0.4.tgz", - "integrity": "sha512-NwAmVibnVT7ah2yjQsKxKFMOrmltsuk2k+bbF+9gFNhCYKfWk4eqLa0KTU3ZkQr7JnPGJ5lG17U+6luWBjcLgg==" - }, "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "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" + } + }, + "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" + } } } }, "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true }, "clone-buffer": { "version": "1.0.0", @@ -2376,15 +3543,15 @@ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" }, "clone-deep": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", - "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "dev": true, "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "3.2.2", - "shallow-clone": "0.1.2" + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" }, "dependencies": { "for-own": { @@ -2393,11 +3560,43 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -2409,14 +3608,23 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "1.1.2" + "q": "^1.1.2" } }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } }, "color": { "version": "0.11.4", @@ -2424,17 +3632,9 @@ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.3", - "color-convert": "1.9.1", - "color-string": "0.3.0" - }, - "dependencies": { - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - } + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, "color-convert": { @@ -2443,7 +3643,7 @@ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -2458,7 +3658,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.0.0" } }, "colormin": { @@ -2467,32 +3667,23 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "0.11.4", + "color": "^0.11.0", "css-color-names": "0.0.4", - "has": "1.0.1" + "has": "^1.0.1" } }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, "combined-stream": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "requires": { - "graceful-readlink": "1.0.1" - } + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" }, "commondir": { "version": "1.0.1", @@ -2500,42 +3691,38 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "compare-versions": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz", + "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==", + "dev": true + }, "complex.js": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.4.tgz", "integrity": "sha512-Syl95HpxUTS0QjwNxencZsKukgh1zdS9uXeXX2Us0pHaqBR6kiZZi0AkZ9VpZFwHJyVIUVzI4EumjWdXP3fy6w==" }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "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=" }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "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": { - "inherits": "2.0.3", - "readable-stream": "2.3.4", - "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "console-browserify": { @@ -2544,14 +3731,13 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "constants-browserify": { "version": "1.0.0", @@ -2565,21 +3751,35 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "content-type-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", - "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", - "dev": true - }, "convert-source-map": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==" }, "core-util-is": { "version": "1.0.2", @@ -2587,39 +3787,40 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "create-react-class": { @@ -2627,9 +3828,9 @@ "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "cron": { @@ -2637,7 +3838,7 @@ "resolved": "https://registry.npmjs.org/cron/-/cron-1.2.1.tgz", "integrity": "sha1-OobAm0G48mGshjp8yF6kc1hX6rI=", "requires": { - "moment-timezone": "0.5.14" + "moment-timezone": "^0.5.x" } }, "cron-parser": { @@ -2645,18 +3846,18 @@ "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.4.0.tgz", "integrity": "sha1-fGvgaTuQySw5FP7Nrhb4jc7y9Dc=", "requires": { - "is-nan": "1.2.1", - "moment-timezone": "0.5.14" + "is-nan": "^1.2.1", + "moment-timezone": "^0.5.0" } }, "cross-env": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.3.tgz", - "integrity": "sha512-UOokgwvDzCT0mqRSLEkJzUhYXB1vK3E5UgDrD41QiXsm9UetcW2rCGHYz/O3p873lMJ1VZbFCF9Izkwh7nYR5A==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.5.tgz", + "integrity": "sha512-GSiNTbvTU3pXzewRKGP0Y+rVP2CzifY2pqSEdtHzLLj41pRdkrgY7e4uSnBoR/pmYaqZr/lwwjg/Q4kNX30hWQ==", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "is-windows": "1.0.2" + "cross-spawn": "^5.1.0", + "is-windows": "^1.0.0" } }, "cross-spawn": { @@ -2665,9 +3866,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cryptiles": { @@ -2675,7 +3876,7 @@ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "crypto-browserify": { @@ -2684,17 +3885,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.6", - "randomfill": "1.0.3" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-color-names": { @@ -2704,33 +3905,46 @@ "dev": true }, "css-in-js-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.0.tgz", - "integrity": "sha512-yuWmPMD9FLi50Xf3k8W8oO3WM1eVnxEGCldCLyfusQ+CgivFk0s23yst4ooW6tfxMuSa03S6uUEga9UhX6GRrA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", + "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", "requires": { - "hyphenate-style-name": "1.0.2" + "hyphenate-style-name": "^1.0.2", + "isobject": "^3.0.1" } }, "css-loader": { - "version": "0.28.9", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.9.tgz", - "integrity": "sha512-r3dgelMm/mkPz5Y7m9SeiGE46i2VsEU/OYbez+1llfxtv8b2y5/b5StaeEvPK3S5tlNQI+tDW/xDIhKJoZgDtw==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.0", - "cssnano": "3.10.0", - "icss-utils": "2.1.0", - "loader-utils": "1.1.0", - "lodash.camelcase": "4.3.0", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-modules-extract-imports": "1.2.0", - "postcss-modules-local-by-default": "1.2.0", - "postcss-modules-scope": "1.1.0", - "postcss-modules-values": "1.3.0", - "postcss-value-parser": "3.3.0", - "source-list-map": "2.0.0" + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" } }, "css-selector-tokenizer": { @@ -2739,24 +3953,17 @@ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" - }, - "dependencies": { - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - } + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" } }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, "cssesc": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", @@ -2769,38 +3976,38 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" } }, "csso": { @@ -2809,8 +4016,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "cssom": { @@ -2825,7 +4032,7 @@ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", "dev": true, "requires": { - "cssom": "0.3.2" + "cssom": "0.3.x" } }, "currently-unhandled": { @@ -2834,15 +4041,21 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.38" + "es5-ext": "^0.10.9" } }, "d3": { @@ -2897,11 +4110,11 @@ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", "requires": { - "d3-dispatch": "1.0.3", - "d3-drag": "1.2.1", - "d3-interpolate": "1.1.6", - "d3-selection": "1.3.0", - "d3-transition": "1.1.1" + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" } }, "d3-chord": { @@ -2909,8 +4122,8 @@ "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", "requires": { - "d3-array": "1.2.1", - "d3-path": "1.0.5" + "d3-array": "1", + "d3-path": "1" } }, "d3-collection": { @@ -2933,8 +4146,8 @@ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", "requires": { - "d3-dispatch": "1.0.3", - "d3-selection": "1.3.0" + "d3-dispatch": "1", + "d3-selection": "1" } }, "d3-dsv": { @@ -2942,9 +4155,9 @@ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", "requires": { - "commander": "2.9.0", - "iconv-lite": "0.4.19", - "rw": "1.3.3" + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" } }, "d3-ease": { @@ -2957,10 +4170,10 @@ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", "requires": { - "d3-collection": "1.0.4", - "d3-dispatch": "1.0.3", - "d3-quadtree": "1.0.3", - "d3-timer": "1.0.7" + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" } }, "d3-format": { @@ -2973,7 +4186,7 @@ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", "requires": { - "d3-array": "1.2.1" + "d3-array": "1" } }, "d3-hierarchy": { @@ -2986,7 +4199,7 @@ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", "requires": { - "d3-color": "1.0.3" + "d3-color": "1" } }, "d3-path": { @@ -3019,10 +4232,10 @@ "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", "requires": { - "d3-collection": "1.0.4", - "d3-dispatch": "1.0.3", - "d3-dsv": "1.0.8", - "xmlhttprequest": "1.8.0" + "d3-collection": "1", + "d3-dispatch": "1", + "d3-dsv": "1", + "xmlhttprequest": "1" } }, "d3-scale": { @@ -3030,13 +4243,13 @@ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", "requires": { - "d3-array": "1.2.1", - "d3-collection": "1.0.4", - "d3-color": "1.0.3", - "d3-format": "1.2.2", - "d3-interpolate": "1.1.6", - "d3-time": "1.0.8", - "d3-time-format": "2.1.1" + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" } }, "d3-selection": { @@ -3049,7 +4262,7 @@ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", "requires": { - "d3-path": "1.0.5" + "d3-path": "1" } }, "d3-time": { @@ -3062,7 +4275,7 @@ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", "requires": { - "d3-time": "1.0.8" + "d3-time": "1" } }, "d3-timer": { @@ -3075,12 +4288,12 @@ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", "requires": { - "d3-color": "1.0.3", - "d3-dispatch": "1.0.3", - "d3-ease": "1.0.3", - "d3-interpolate": "1.1.6", - "d3-selection": "1.3.0", - "d3-timer": "1.0.7" + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" } }, "d3-voronoi": { @@ -3093,11 +4306,11 @@ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", "requires": { - "d3-dispatch": "1.0.3", - "d3-drag": "1.2.1", - "d3-interpolate": "1.1.6", - "d3-selection": "1.3.0", - "d3-transition": "1.1.1" + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" } }, "damerau-levenshtein": { @@ -3106,19 +4319,18 @@ "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", "dev": true }, + "dargs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", + "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", + "dev": true + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } + "assert-plus": "^1.0.0" } }, "data-uri-to-buffer": { @@ -3126,23 +4338,46 @@ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.4.tgz", "integrity": "sha1-RuE6udqOMJdFyNAc5UchPr2y/j8=" }, + "data-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", + "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", + "dev": true, + "requires": { + "abab": "^1.0.4", + "whatwg-mimetype": "^2.0.0", + "whatwg-url": "^6.4.0" + } + }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, "debounce": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.0.2.tgz", "integrity": "sha1-UDzGdNjX9zcJlmT7dd29NrlibcY=" }, "debug": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz", - "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "0.7.3" + "ms": "2.0.0" } }, "debuglog": { @@ -3161,12 +4396,27 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-7.2.3.tgz", "integrity": "sha512-AoFI37QS0S87Ft0r3Bdz4q9xSpm1Paa9lSeKLXgMPk/u/+QPIM5Gy4DHcZQS1seqPJH4gHLauPGn347z0HbsrA==" }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "deep-assign": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", "integrity": "sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI=", "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, "deep-equal": { @@ -3175,9 +4425,9 @@ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" }, "deep-is": { "version": "0.1.3", @@ -3191,7 +4441,7 @@ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { - "strip-bom": "2.0.0" + "strip-bom": "^2.0.0" }, "dependencies": { "strip-bom": { @@ -3200,7 +4450,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -3210,7 +4460,7 @@ "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", "requires": { - "abstract-leveldown": "2.6.3" + "abstract-leveldown": "~2.6.0" } }, "define-properties": { @@ -3218,45 +4468,92 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "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 + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" @@ -3267,16 +4564,22 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, + "detect-conflict": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", + "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=", + "dev": true + }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "detect-newline": { @@ -3285,45 +4588,85 @@ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", "dev": true }, - "dexie": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dexie/-/dexie-2.0.1.tgz", - "integrity": "sha1-ptxOYHRhxNpfk0YhkXoqiTmhjpc=" - }, "dezalgo": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", "dev": true, "requires": { - "asap": "2.0.6", - "wrappy": "1.0.2" + "asap": "^2.0.0", + "wrappy": "1" } }, "diff": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", - "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } } }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "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" + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } } }, "dom-walk": { @@ -3337,13 +4680,38 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "dev": true, "requires": { - "webidl-conversions": "4.0.2" + "webidl-conversions": "^4.0.2" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" } }, "double-ended-queue": { @@ -3356,23 +4724,18 @@ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "requires": { - "readable-stream": "1.1.14" + "readable-stream": "~1.1.9" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3382,13 +4745,31 @@ } } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "editions": { @@ -3396,10 +4777,22 @@ "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==" }, + "ejs": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "dev": true + }, "electron-to-chromium": { - "version": "1.3.33", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz", - "integrity": "sha1-vwBwPWKnxlI4E2V4w1LWxcBCpUU=" + "version": "1.3.45", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz", + "integrity": "sha1-RYrBscXHYM6IEaFtK/vZfsMLr7g=" + }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true }, "elliptic": { "version": "6.4.0", @@ -3407,13 +4800,13 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "ember-cli-babel": { @@ -3422,34 +4815,34 @@ "integrity": "sha512-LMwZ3Xf3Q3jQUXaJtLLJsbbhRZRNv/iea64lZ8OgqZp1fh66CSXfmqV3L9QSuYQKPDNqFiu2v6IpOT08C6GU6w==", "requires": { "amd-name-resolver": "0.0.7", - "babel-plugin-debug-macros": "0.1.11", - "babel-plugin-ember-modules-api-polyfill": "2.3.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-polyfill": "6.26.0", - "babel-preset-env": "1.6.1", - "broccoli-babel-transpiler": "6.1.4", - "broccoli-debug": "0.6.4", - "broccoli-funnel": "1.2.0", - "broccoli-source": "1.1.0", - "clone": "2.1.1", - "ember-cli-version-checker": "2.1.0", - "semver": "5.5.0" + "babel-plugin-debug-macros": "^0.1.11", + "babel-plugin-ember-modules-api-polyfill": "^2.3.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.0", + "babel-polyfill": "^6.16.0", + "babel-preset-env": "^1.5.1", + "broccoli-babel-transpiler": "^6.1.2", + "broccoli-debug": "^0.6.2", + "broccoli-funnel": "^1.0.0", + "broccoli-source": "^1.1.0", + "clone": "^2.0.0", + "ember-cli-version-checker": "^2.1.0", + "semver": "^5.4.1" }, "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" } } }, "ember-cli-version-checker": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.1.0.tgz", - "integrity": "sha512-ssiNyVTp+PphroFum8guHX9py4xU1PCxkRYgb25NxumgjpKTPjhkgTfpRRKXlIQe+/wVMmhf+Uv6w9vSLZKWKQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ember-cli-version-checker/-/ember-cli-version-checker-2.1.2.tgz", + "integrity": "sha512-sjkHGr4IGXnO3EUcY21380Xo9Qf6bC8HWH4D62bVnrQop/8uha5XgMQRoAflMCeH6suMrezQL287JUoYc2smEw==", "requires": { - "resolve": "1.5.0", - "semver": "5.3.0" + "resolve": "^1.3.3", + "semver": "^5.3.0" } }, "ember-inflector": { @@ -3457,13 +4850,13 @@ "resolved": "https://registry.npmjs.org/ember-inflector/-/ember-inflector-2.0.1.tgz", "integrity": "sha512-CFiWADOwuyRJwlOm2/8qvCRPLPylowvew+2vgFUFjd6UDvunwQfOJ/LS06PqnNcTfKN5Wu3Rcvj81NzIVkJmSg==", "requires": { - "ember-cli-babel": "6.12.0" + "ember-cli-babel": "^6.0.0" } }, "ember-rfc176-data": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ember-rfc176-data/-/ember-rfc176-data-0.3.1.tgz", - "integrity": "sha512-u+W5rUvYO7xyKJjiPuCM7bIAvFyPwPTJ66fOZz1xuCv3AyReI9Oev5oOADOO6YJZk+vEn0xWiZ9N6zSf8WU7Fg==" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ember-rfc176-data/-/ember-rfc176-data-0.3.2.tgz", + "integrity": "sha512-NKpr+dkKFoszdq2Sf5bE7xCsTayJN5CoDhi8wjjqD29Umk4DeRjgYtyhQa0wZ6rj9n97ZCp1BqnBAHOlXeDuGw==" }, "emoji-regex": { "version": "6.5.1", @@ -3482,7 +4875,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "~0.4.13" } }, "end-of-stream": { @@ -3490,7 +4883,7 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "end-stream": { @@ -3498,19 +4891,18 @@ "resolved": "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz", "integrity": "sha1-MgA/P0OKKwFDFoE3+PpumGbIHtU=", "requires": { - "write-stream": "0.4.3" + "write-stream": "~0.4.3" } }, "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", + "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "ensure-posix-path": { @@ -3518,12 +4910,84 @@ "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz", "integrity": "sha1-pls+QtC3HPxYXrd0+ZQ8jZuRsMI=" }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "envinfo": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-4.4.2.tgz", + "integrity": "sha512-5rfRs+m+6pwoKRCFqpsA5+qsLngFms1aWPrxfKbrObCzQaPc3M3yPloZx+BL9UE3dK58cxw36XVQbFRSCCfGSQ==", + "dev": true + }, + "enzyme": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.3.0.tgz", + "integrity": "sha512-l8csyPyLmtxskTz6pX9W8eDOyH1ckEtDttXk/vlFWCjv00SkjTjtoUrogqp4yEvMyneU9dUJoOLnqFoiHb8IHA==", + "dev": true, + "requires": { + "cheerio": "^1.0.0-rc.2", + "function.prototype.name": "^1.0.3", + "has": "^1.0.1", + "is-boolean-object": "^1.0.0", + "is-callable": "^1.1.3", + "is-number-object": "^1.0.3", + "is-string": "^1.0.4", + "is-subset": "^0.1.1", + "lodash": "^4.17.4", + "object-inspect": "^1.5.0", + "object-is": "^1.0.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4", + "object.values": "^1.0.4", + "raf": "^3.4.0", + "rst-selector-parser": "^2.2.3" + } + }, + "enzyme-adapter-react-16": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz", + "integrity": "sha512-kC8pAtU2Jk3OJ0EG8Y2813dg9Ol0TXi7UNxHzHiWs30Jo/hj7alc//G1YpKUsPP1oKl9X+Lkx+WlGJpPYA+nvw==", + "dev": true, + "requires": { + "enzyme-adapter-utils": "^1.3.0", + "lodash": "^4.17.4", + "object.assign": "^4.0.4", + "object.values": "^1.0.4", + "prop-types": "^15.6.0", + "react-reconciler": "^0.7.0", + "react-test-renderer": "^16.0.0-0" + } + }, + "enzyme-adapter-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz", + "integrity": "sha512-vVXSt6uDv230DIv+ebCG66T1Pm36Kv+m74L1TrF4kaE7e1V7Q/LcxO0QRkajk5cA6R3uu9wJf5h13wOTezTbjA==", + "dev": true, + "requires": { + "lodash": "^4.17.4", + "object.assign": "^4.0.4", + "prop-types": "^15.6.0" + } + }, "errno": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", - "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "~1.0.1" + } + }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "dev": true, "requires": { - "prr": "1.0.1" + "string-template": "~0.2.1", + "xtend": "~4.0.0" } }, "error-ex": { @@ -3532,20 +4996,20 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", "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": "^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": { @@ -3554,18 +5018,19 @@ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "dev": true, "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, "es5-ext": { - "version": "0.10.38", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", - "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", + "version": "0.10.42", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", + "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -3573,29 +5038,9 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-micro-loader": { - "version": "github:cliqz-oss/es6-micro-loader#145e7bdbd8be2f4582096175482b1411eb56ec79", - "requires": { - "es6-promise": "1.0.0" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-promise": { @@ -3603,26 +5048,13 @@ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-1.0.0.tgz", "integrity": "sha1-+Q02KfqnwmFmrk33fIm6zeuNyn8=" }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, "es6-symbol": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-template-strings": { @@ -3630,8 +5062,8 @@ "resolved": "https://registry.npmjs.org/es6-template-strings/-/es6-template-strings-2.0.1.tgz", "integrity": "sha1-sWbGpiVi9Hi7d3X2ypYQOlmbSyw=", "requires": { - "es5-ext": "0.10.38", - "esniff": "1.1.0" + "es5-ext": "^0.10.12", + "esniff": "^1.1" } }, "es6-templates": { @@ -3640,20 +5072,28 @@ "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", "dev": true, "requires": { - "recast": "0.11.23", - "through": "2.3.8" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "recast": "~0.11.12", + "through": "~2.3.6" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + } + } } }, "escape-string-regexp": { @@ -3662,16 +5102,16 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.5.7" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { "esprima": { @@ -3679,64 +5119,60 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true } } }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, "eslint": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz", - "integrity": "sha512-AyxBUCANU/o/xC0ijGMKavo5Ls3oK6xykiOITlMdjFjrKOsqLrA7Nf5cnrDgcKrHzBirclAZt63XO7YZlVUPwA==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.3.1", - "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.3", - "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.3.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.10.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.5", - "minimatch": "3.0.4", - "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", - "require-uncached": "1.0.3", - "semver": "5.3.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", + "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" + "text-table": "~0.2.0" }, "dependencies": { "ansi-regex": { @@ -3745,35 +5181,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -3789,50 +5196,23 @@ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, - "globals": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", - "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", - "dev": true - }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "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 - }, "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" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -3843,7 +5223,7 @@ "integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==", "dev": true, "requires": { - "eslint-config-airbnb-base": "12.1.0" + "eslint-config-airbnb-base": "^12.1.0" } }, "eslint-config-airbnb-base": { @@ -3852,7 +5232,7 @@ "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", "dev": true, "requires": { - "eslint-restricted-globals": "0.1.1" + "eslint-restricted-globals": "^0.1.1" } }, "eslint-import-resolver-node": { @@ -3861,69 +5241,37 @@ "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "debug": "^2.6.9", + "resolve": "^1.5.0" } }, "eslint-module-utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", - "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "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.9", - "pkg-dir": "1.0.0" + "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" - } - }, "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.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "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.1" + "pinkie-promise": "^2.0.0" } }, "pkg-dir": { @@ -3932,52 +5280,43 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } } } }, "eslint-plugin-import": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", - "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz", + "integrity": "sha1-Fa7qN6Z0mdhI6OmBgG1GJ7VQOBY=", "dev": true, "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", + "contains-path": "^0.1.0", + "debug": "^2.6.8", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.1.1", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.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" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true } } @@ -3988,38 +5327,25 @@ "integrity": "sha1-VFg9GuRCSDFi4EDhPMMYZUZRAOU=", "dev": true, "requires": { - "aria-query": "0.7.1", - "array-includes": "3.0.3", + "aria-query": "^0.7.0", + "array-includes": "^3.0.3", "ast-types-flow": "0.0.7", - "axobject-query": "0.1.0", - "damerau-levenshtein": "1.0.4", - "emoji-regex": "6.5.1", - "jsx-ast-utils": "2.0.1" + "axobject-query": "^0.1.0", + "damerau-levenshtein": "^1.0.0", + "emoji-regex": "^6.1.0", + "jsx-ast-utils": "^2.0.0" } }, "eslint-plugin-react": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.6.1.tgz", - "integrity": "sha512-30aMOHWX/DOaaLJVBHz6RMvYM2qy5GH63+y2PLFdIrYe4YLtODFmT3N1YA7ZqUnaBweVbedr4K4cqxOlWAPjIw==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", + "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==", "dev": true, "requires": { - "doctrine": "2.1.0", - "has": "1.0.1", - "jsx-ast-utils": "2.0.1", - "prop-types": "15.6.0" - }, - "dependencies": { - "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", - "dev": true, - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" - } - } + "doctrine": "^2.0.2", + "has": "^1.0.1", + "jsx-ast-utils": "^2.0.1", + "prop-types": "^15.6.0" } }, "eslint-restricted-globals": { @@ -4034,8 +5360,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { @@ -4049,18 +5375,18 @@ "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", "integrity": "sha1-xmhJIp+RRk3t4uDUAgHtar9l8qw=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" + "d": "1", + "es5-ext": "^0.10.12" } }, "espree": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz", - "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==", + "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.4.1", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "esprima": { @@ -4070,22 +5396,21 @@ "dev": true }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "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.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "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.2.0", - "object-assign": "4.1.1" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -4099,35 +5424,20 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } - }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, - "eventtargeter": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/eventtargeter/-/eventtargeter-0.3.1.tgz", - "integrity": "sha512-iJgWNy80h+T7fMhWojSfMNvZHLOa2347uyKv/uwb2LQTT4tEGz8075qrK8PiK/IvjPei24OZ9s2sY/Hd4E9Kkg==" - }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "exec-sh": { @@ -4136,7 +5446,7 @@ "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", "dev": true, "requires": { - "merge": "1.2.0" + "merge": "^1.1.3" } }, "execa": { @@ -4145,13 +5455,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "execspawn": { @@ -4159,7 +5469,7 @@ "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", "integrity": "sha1-gob53efOzeeQX73ATiTzaPI/jaY=", "requires": { - "util-extend": "1.0.3" + "util-extend": "^1.0.1" } }, "exists-sync": { @@ -4173,13 +5483,19 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -4188,37 +5504,35 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "expand-template": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz", - "integrity": "sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", + "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==" + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } }, "expect": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-22.3.0.tgz", - "integrity": "sha512-woguB2yTY69vxUZoclqjPccHzUOd1s/mLx81kSSDg+7u6+2wfd5qh166DRoCq1KfaH/YXCTe+ogHgxj0i4LFPw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz", + "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "jest-diff": "22.1.0", - "jest-get-type": "22.1.0", - "jest-matcher-utils": "22.2.0", - "jest-message-util": "22.2.0", - "jest-regex-util": "22.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - } + "ansi-styles": "^3.2.0", + "jest-diff": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-regex-util": "^22.4.3" } }, "extend": { @@ -4226,58 +5540,45 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, - "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "is-plain-object": "^2.0.4" } } } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "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": { - "is-extglob": "1.0.0" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, - "extract-text-webpack-plugin": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", - "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "async": "2.6.0", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0", - "webpack-sources": "1.1.0" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.5" - } - } + "is-extglob": "^1.0.0" } }, "extsprintf": { @@ -4286,15 +5587,334 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-future": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz", "integrity": "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=" }, + "fast-glob": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.1.tgz", + "integrity": "sha512-wSyW1TBK3ia5V+te0rGPXudeMHoUQW6O5Y9oATiaGhpENmEifPDlOdhpsnlj5HoG6ttIvGiY1DdCmI9X2xGMhg==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.1", + "micromatch": "^3.1.10" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, "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", @@ -4311,7 +5931,7 @@ "resolved": "https://registry.npmjs.org/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz", "integrity": "sha1-P7s2Y097555PftvbSjV97iXRhOs=", "requires": { - "blank-object": "1.0.2" + "blank-object": "^1.0.1" } }, "fast-url-parser": { @@ -4319,7 +5939,7 @@ "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.2.tgz", "integrity": "sha1-SzJGDsOmpw6NSR+ogBXeUzjQHEA=", "requires": { - "punycode": "1.4.1" + "punycode": "^1.3.2" } }, "fastparse": { @@ -4334,7 +5954,7 @@ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", "dev": true, "requires": { - "bser": "2.0.0" + "bser": "^2.0.0" } }, "fbjs": { @@ -4342,13 +5962,13 @@ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.17" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.9" }, "dependencies": { "core-js": { @@ -4364,7 +5984,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -4373,18 +5993,54 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "file-loader": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.6.tgz", - "integrity": "sha512-873ztuL+/hfvXbLDJ262PGO6XjERnybJu2gW1/5j8HUfxSiFJI9Hj/DhZ50ZGRUxBvuNiazb/cM2rh9pqrxP6Q==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" + }, + "dependencies": { + "ajv": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", + "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0", + "uri-js": "^4.2.1" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } } }, "filename-regex": { @@ -4399,21 +6055,38 @@ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, "requires": { - "glob": "7.1.2", - "minimatch": "3.0.4" + "glob": "^7.0.3", + "minimatch": "^3.0.3" } }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } } }, "find-cache-dir": { @@ -4422,9 +6095,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.1.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -4433,19 +6106,28 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, - "flat-cache": { + "first-chunk-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", + "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "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.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, "flatten": { @@ -4454,6 +6136,22 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", "dev": true }, + "flow-parser": { + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.72.0.tgz", + "integrity": "sha512-kFaDtviKlD/rHi6NRp42KTbnPgz/nKcWUJQhqDnLDeKA8uGcRVSy0YlQjaf9M3pFo5PgC3SNFnCPpQGLtHjH2w==", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4466,7 +6164,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreach": { @@ -4484,18 +6182,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.17" - } - }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true, - "requires": { - "samsam": "1.3.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "foundation-sites": { @@ -4503,15 +6192,8 @@ "resolved": "https://registry.npmjs.org/foundation-sites/-/foundation-sites-6.4.4-rc1.tgz", "integrity": "sha512-26cL66QFNqMVwM7bmIEqq4jiW+6CkIeW719ci1pchdJ4UK0Om+3Jl7MhkX/lzdzRHB75f2m1IK9lxk3JGOwApA==", "requires": { - "jquery": "3.3.1", - "what-input": "4.3.1" - }, - "dependencies": { - "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" - } + "jquery": ">=3.0.0", + "what-input": "^4.1.3" } }, "fraction.js": { @@ -4519,15 +6201,39 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.2.tgz", "integrity": "sha512-OswcigOSil3vYXgrPSx4NCaSyPikXqVNYN/4CyhS0ucVOJ4GVYr6KQQLLcAudvS/4bBOzxqJ3XIsFaaMjl98ZQ==" }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-tree-diff": { @@ -4535,10 +6241,22 @@ "resolved": "https://registry.npmjs.org/fs-tree-diff/-/fs-tree-diff-0.5.7.tgz", "integrity": "sha512-dJwDX6NBH7IfdfFjZAdHCZ6fIKc8LwR7kzqUhYRFJuX4g9ctG/7cuqJuwegGQsyLEykp6Z4krq+yIFMQlt7d9Q==", "requires": { - "heimdalljs-logger": "0.1.9", - "object-assign": "4.1.1", - "path-posix": "1.0.0", - "symlink-or-copy": "1.2.0" + "heimdalljs-logger": "^0.1.7", + "object-assign": "^4.1.0", + "path-posix": "^1.0.0", + "symlink-or-copy": "^1.1.8" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -4547,195 +6265,99 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.3.tgz", + "integrity": "sha512-X+57O5YkDTiEQGiw8i7wYc2nQgweIekqkepI8Q3y4wVlurgBt2SuwxTeYUYMZIGpLZH3r/TsMjczCMXE5ZOt7Q==", "dev": true, "optional": true, "requires": { - "nan": "2.4.0", - "node-pre-gyp": "0.6.39" + "nan": "^2.9.2", + "node-pre-gyp": "^0.9.0" }, "dependencies": { "abbrev": { - "version": "1.1.0", - "bundled": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "aproba": { - "version": "1.1.1", - "bundled": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, "balanced-match": { - "version": "0.4.2", - "bundled": true, + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, "brace-expansion": { - "version": "1.1.7", - "bundled": true, + "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": "0.4.2", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "optional": true }, "debug": { - "version": "2.6.8", - "bundled": true, + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, "requires": { @@ -4744,708 +6366,495 @@ }, "deep-extend": { "version": "0.4.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", "dev": true, "optional": true }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, - "form-data": { - "version": "2.1.4", - "bundled": true, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "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" } }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, - "hawk": { - "version": "3.1.3", - "bundled": true, + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", "dev": true, + "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "safer-buffer": "^2.1.0" } }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { - "version": "1.3.4", - "bundled": true, + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, "isarray": { "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "requires": { - "jsbn": "0.1.1" + "brace-expansion": "^1.1.7" } }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, - "json-schema": { - "version": "0.2.3", - "bundled": true, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, - "optional": true + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "minipass": "^2.2.1" } }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, - "optional": true + "requires": { + "minimist": "0.0.8" + } }, - "jsonify": { - "version": "0.0.0", - "bundled": true, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true }, - "jsprim": { - "version": "1.4.0", - "bundled": true, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, + "node-pre-gyp": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz", + "integrity": "sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA=", "dev": true, + "optional": true, "requires": { - "mime-db": "1.27.0" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, - "minimatch": { - "version": "3.0.4", - "bundled": true, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, + "optional": true, "requires": { - "brace-expansion": "1.1.7" + "abbrev": "1", + "osenv": "^0.1.4" } }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", + "dev": true, + "optional": true }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", "dev": true, + "optional": true, "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { - "version": "4.1.0", - "bundled": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { - "version": "0.1.4", - "bundled": true, + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, + "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, "optional": true }, "rc": { - "version": "1.2.1", - "bundled": true, + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", + "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true } } }, "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, + "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, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { - "version": "2.6.1", - "bundled": true, + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, + "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { - "version": "5.0.1", - "bundled": true, + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, "semver": { - "version": "5.3.0", - "bundled": true, + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { - "version": "1.0.1", - "bundled": true, + "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, + "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, "wide-align": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", "dev": true } } @@ -5455,10 +6864,10 @@ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "function-bind": { @@ -5467,6 +6876,17 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "function.prototype.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", + "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "is-callable": "^1.1.3" + } + }, "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", @@ -5474,15 +6894,18 @@ "dev": true }, "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { - "ansi": "0.3.1", - "has-unicode": "2.0.1", - "lodash.pad": "4.5.1", - "lodash.padend": "4.6.1", - "lodash.padstart": "4.6.1" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "gaze": { @@ -5491,7 +6914,7 @@ "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", "dev": true, "requires": { - "globule": "1.2.0" + "globule": "^1.0.0" } }, "generate-function": { @@ -5506,7 +6929,7 @@ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "get-caller-file": { @@ -5527,18 +6950,75 @@ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" + } + }, + "gh-got": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", + "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", + "dev": true, + "requires": { + "got": "^7.0.0", + "is-plain-obj": "^1.1.0" }, "dependencies": { - "assert-plus": { + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "requires": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "url-parse-lax": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } } } }, @@ -5547,12 +7027,12 @@ "resolved": "https://registry.npmjs.org/ghreleases/-/ghreleases-1.0.7.tgz", "integrity": "sha512-1lFGyLLF38Q6cFCDyebN5vzQ2P9DEaAgxPIDLmQwQDVDmUe2Wgv+6dhAIoHeA+My4HLpaJ+dKF73xtuykN2cbQ==", "requires": { - "after": "0.8.2", - "ghrepos": "2.1.0", - "ghutils": "3.2.2", - "simple-mime": "0.1.0", - "url-template": "2.0.8", - "xtend": "4.0.1" + "after": "~0.8.1", + "ghrepos": "~2.1.0", + "ghutils": "~3.2.0", + "simple-mime": "~0.1.0", + "url-template": "~2.0.6", + "xtend": "~4.0.0" } }, "ghrepos": { @@ -5560,16 +7040,16 @@ "resolved": "https://registry.npmjs.org/ghrepos/-/ghrepos-2.1.0.tgz", "integrity": "sha512-6GM0ohSDTAv7xD6GsKfxJiV/CajoofRyUwu0E8l29d1o6lFAUxmmyMP/FH33afA20ZrXzxxcTtN6TsYvudMoAg==", "requires": { - "ghutils": "3.2.2" + "ghutils": "~3.2.0" } }, "ghutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/ghutils/-/ghutils-3.2.2.tgz", - "integrity": "sha512-6SqTlzs89EtYRlafY8oavTnn/vEErgRSnMsuFDwOzNgK34mpHXTBinh6rTx6xwqei3d3BWyrSTQ8uN9kPpEQtg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ghutils/-/ghutils-3.2.4.tgz", + "integrity": "sha512-6JQVg+iHj/O4bJ/qqk8zc/ULu/I8sgfbFmHb1U12gWblRnXkidKurvBaCZMXTM7W1qAcT//X+hTJX8ZASoJ7BA==", "requires": { - "jsonist": "2.1.0", - "xtend": "4.0.1" + "jsonist": "~2.1.0", + "xtend": "~4.0.1" } }, "github-from-package": { @@ -5577,17 +7057,53 @@ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" }, + "github-username": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", + "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", + "dev": true, + "requires": { + "gh-got": "^6.0.0" + } + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-all": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", + "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", + "dev": true, + "requires": { + "glob": "^7.0.5", + "yargs": "~1.2.6" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=", + "dev": true + }, + "yargs": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", + "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", + "dev": true, + "requires": { + "minimist": "^0.1.0" + } + } } }, "glob-base": { @@ -5596,8 +7112,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -5606,22 +7122,60 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, "global": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", "requires": { - "min-document": "2.19.0", - "process": "0.5.2" + "min-document": "^2.19.0", + "process": "~0.5.1" + }, + "dependencies": { + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + } + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz", + "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==", + "dev": true }, "globby": { "version": "5.0.0", @@ -5629,12 +7183,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "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": { @@ -5651,9 +7205,34 @@ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.5", - "minimatch": "3.0.4" + "glob": "~7.1.1", + "lodash": "~4.17.4", + "minimatch": "~3.0.2" + } + }, + "got": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.1.tgz", + "integrity": "sha512-tiLX+bnYm5A56T5N/n9Xo89vMaO1mrS9qoDqj3u/anVooqGozvY/HbXzEpDfbNeKsHCBpK40gSbz8wGYSp3i1w==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" } }, "graceful-fs": { @@ -5666,6 +7245,15 @@ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, + "grouped-queue": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", + "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", + "dev": true, + "requires": { + "lodash": "^4.17.2" + } + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -5682,45 +7270,101 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "optional": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "optional": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "optional": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "optional": true + } + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "optional": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" } } } }, "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has": { @@ -5729,17 +7373,24 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "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.1.1" + "ansi-regex": "^2.0.0" } }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -5751,9 +7402,9 @@ "resolved": "https://registry.npmjs.org/has-own-property-x/-/has-own-property-x-3.2.0.tgz", "integrity": "sha512-HtRQTYpRFz/YVaQ7jh2mU5iorMAxFcML9FNOLMI1f8VNJ2K0hpOlXoi1a+nmVl6oUcGnhd6zYOFAVe7NUFStyQ==", "requires": { - "cached-constructors-x": "1.0.2", - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" + "cached-constructors-x": "^1.0.0", + "to-object-x": "^1.5.0", + "to-property-key-x": "^2.0.2" } }, "has-symbol-support-x": { @@ -5761,12 +7412,18 @@ "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" }, + "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 + }, "has-to-string-tag-x": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "requires": { - "has-symbol-support-x": "1.4.2" + "has-symbol-support-x": "^1.4.1" } }, "has-unicode": { @@ -5774,24 +7431,77 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "inherits": "2.0.3" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, - "hash-for-dep": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/hash-for-dep/-/hash-for-dep-1.2.3.tgz", + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash-for-dep": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/hash-for-dep/-/hash-for-dep-1.2.3.tgz", "integrity": "sha512-NE//rDaCFpWHViw30YM78OAGBShU+g4dnUGY3UWGyEzPOGYg/ptOjk32nEc+bC1xz+RfK5UIs6lOL6eQdrV4Ow==", "requires": { - "broccoli-kitchen-sink-helpers": "0.3.1", - "heimdalljs": "0.2.5", - "heimdalljs-logger": "0.1.9", - "resolve": "1.5.0" + "broccoli-kitchen-sink-helpers": "^0.3.1", + "heimdalljs": "^0.2.3", + "heimdalljs-logger": "^0.1.7", + "resolve": "^1.4.0" } }, "hash.js": { @@ -5800,8 +7510,8 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, "hawk": { @@ -5809,10 +7519,17 @@ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + }, + "dependencies": { + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } } }, "he": { @@ -5826,7 +7543,7 @@ "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.5.tgz", "integrity": "sha1-aqVDCO7nk7ZCz/nPlHgURfN3MKw=", "requires": { - "rsvp": "3.2.1" + "rsvp": "~3.2.1" }, "dependencies": { "rsvp": { @@ -5841,8 +7558,8 @@ "resolved": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.9.tgz", "integrity": "sha1-12raTkW3u294b8nAEKaOsuL68XY=", "requires": { - "debug": "2.6.4", - "heimdalljs": "0.2.5" + "debug": "^2.2.0", + "heimdalljs": "^0.2.0" } }, "history": { @@ -5850,11 +7567,11 @@ "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", "requires": { - "invariant": "2.2.2", - "loose-envify": "1.3.1", - "resolve-pathname": "2.2.0", - "value-equal": "0.4.0", - "warning": "3.0.0" + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "value-equal": "^0.4.0", + "warning": "^3.0.0" } }, "hmac-drbg": { @@ -5863,34 +7580,43 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" }, "hoist-non-react-statics": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", - "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", + "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, "html-comment-regex": { @@ -5905,7 +7631,7 @@ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "dev": true, "requires": { - "whatwg-encoding": "1.0.3" + "whatwg-encoding": "^1.0.1" } }, "html-entities": { @@ -5919,53 +7645,48 @@ "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", "dev": true, "requires": { - "es6-templates": "0.2.3", - "fastparse": "1.1.1", - "html-minifier": "3.5.9", - "loader-utils": "1.1.0", - "object-assign": "4.1.1" + "es6-templates": "^0.2.3", + "fastparse": "^1.1.1", + "html-minifier": "^3.5.8", + "loader-utils": "^1.1.0", + "object-assign": "^4.1.1" } }, "html-minifier": { - "version": "3.5.9", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.9.tgz", - "integrity": "sha512-EZqO91XJwkj8BeLx9C12sKB/AHoTANaZax39vEOP9f/X/9jgJ3r1O2+neabuHqpz5kJO71TapP9JrtCY39su1A==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.15.tgz", + "integrity": "sha512-OZa4rfb6tZOZ3Z8Xf0jKxXkiDcFWldQePGYFDcgKqES2sXeWaEv9y6QQvWUtX3ySI3feApQi5uCsHLINQ6NoAw==", "dev": true, "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.9", - "commander": "2.14.1", - "he": "1.1.1", - "ncname": "1.0.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.3.10" - }, - "dependencies": { - "commander": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.10.tgz", - "integrity": "sha512-dNib7aUDNZFJNTXFyq0CDmLRVOsnY1F+IQgt2FAOdZFx2+LvKVLbbIb/fL+BYKCv3YH3bPCE/6M/JaxChtQLHQ==", - "dev": true, - "requires": { - "commander": "2.14.1", - "source-map": "0.6.1" - } - } + "camel-case": "3.0.x", + "clean-css": "4.1.x", + "commander": "2.15.x", + "he": "1.1.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.3.x" + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" } }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, "http-https": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", @@ -5977,9 +7698,16 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + } } }, "https-browserify": { @@ -5993,18 +7721,39 @@ "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-2.1.3.tgz", "integrity": "sha512-fUuDOrB47PqNK/BAMOS13v41UoaqIxqSLHX6CAbOD7OfT+/GCWO1/vPLfTNutOeXrv1ikuaZ3yux+33Z9vh+rw==", "requires": { - "buffer-from": "0.1.1", - "duplexer2": "0.0.2", - "through2": "0.6.5" + "buffer-from": "^0.1.1", + "duplexer2": "~0.0.2", + "through2": "~0.6.3" }, "dependencies": { + "buffer-from": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", + "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "requires": { - "readable-stream": "1.0.33", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -6015,9 +7764,12 @@ "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es=" }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, "icss-replace-symbols": { "version": "1.1.0", @@ -6031,38 +7783,18 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.17" + "postcss": "^6.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { - "chalk": "2.3.1", - "source-map": "0.6.1", - "supports-color": "5.2.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -6070,28 +7802,25 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", + "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", "dev": true }, "immediate": { @@ -6105,8 +7834,8 @@ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", "dev": true, "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" } }, "imurmurhash": { @@ -6127,7 +7856,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexes-of": { @@ -6152,8 +7881,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -6171,8 +7900,8 @@ "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz", "integrity": "sha1-hVG45bTVcyROZqNLBPfTIHaitTQ=", "requires": { - "bowser": "1.9.2", - "css-in-js-utils": "2.0.0" + "bowser": "^1.7.3", + "css-in-js-utils": "^2.0.0" } }, "inquirer": { @@ -6181,20 +7910,20 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.1.0", - "figures": "2.0.0", - "lodash": "4.17.5", + "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.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "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" }, "dependencies": { "ansi-regex": { @@ -6203,24 +7932,14 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "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": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -6229,16 +7948,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -6249,12 +7959,22 @@ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", "dev": true }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -6269,16 +7989,25 @@ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", "dev": true }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, "is-array-buffer-x": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/is-array-buffer-x/-/is-array-buffer-x-1.7.0.tgz", "integrity": "sha512-ufSZRMY2WZX5xyNvk0NOZAG7cgi35B/sGQDGqv8w0X7MoQ2GC9vedanJhuYTPaC4PUCqLQsda1w7NF+dPZmAJw==", "requires": { - "attempt-x": "1.1.3", - "has-to-string-tag-x": "1.4.1", - "is-object-like-x": "1.7.1", - "object-get-own-property-descriptor-x": "3.2.0", - "to-string-tag-x": "1.4.3" + "attempt-x": "^1.1.0", + "has-to-string-tag-x": "^1.4.1", + "is-object-like-x": "^1.5.1", + "object-get-own-property-descriptor-x": "^3.2.0", + "to-string-tag-x": "^1.4.1" } }, "is-arrayish": { @@ -6293,9 +8022,15 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, + "is-boolean-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", + "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", + "dev": true + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -6307,7 +8042,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-callable": { @@ -6322,7 +8057,16 @@ "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", "dev": true, "requires": { - "ci-info": "1.1.2" + "ci-info": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" } }, "is-date-object": { @@ -6330,6 +8074,25 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", @@ -6342,7 +8105,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -6362,7 +8125,7 @@ "resolved": "https://registry.npmjs.org/is-falsey-x/-/is-falsey-x-1.0.3.tgz", "integrity": "sha512-RWjusR6LXAhGa0Vus7aD1rwJuJwdJsvG3daAVMDvOAgvGuGm4eilNgoSuXhpv2/2qpLDvioAKTNb3t3XYidCNg==", "requires": { - "to-boolean-x": "1.0.3" + "to-boolean-x": "^1.0.2" } }, "is-finite": { @@ -6370,7 +8133,7 @@ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-finite-x": { @@ -6378,8 +8141,8 @@ "resolved": "https://registry.npmjs.org/is-finite-x/-/is-finite-x-3.0.4.tgz", "integrity": "sha512-wdSI5zk/Pl21HzGcLWFoFzuDa8gsgcqhwZGAZryL2eU7RKf7+g+q4jL2gGItrBs/YtspkjOrJ4JxXNZqquoAWA==", "requires": { - "infinity-x": "1.0.2", - "is-nan-x": "1.0.3" + "infinity-x": "^1.0.1", + "is-nan-x": "^1.0.2" } }, "is-fullwidth-code-point": { @@ -6393,14 +8156,14 @@ "resolved": "https://registry.npmjs.org/is-function-x/-/is-function-x-3.3.0.tgz", "integrity": "sha512-SreSSU1dlgYaXR5c0mm4qJHKYHIiGiEY+7Cd8/aRLLoMP/VvofD2XcWgBnP833ajpU5XzXbUSpfysnfKZLJFlg==", "requires": { - "attempt-x": "1.1.3", - "has-to-string-tag-x": "1.4.1", - "is-falsey-x": "1.0.3", - "is-primitive": "2.0.0", - "normalize-space-x": "3.0.0", - "replace-comments-x": "2.0.0", - "to-boolean-x": "1.0.3", - "to-string-tag-x": "1.4.3" + "attempt-x": "^1.1.1", + "has-to-string-tag-x": "^1.4.1", + "is-falsey-x": "^1.0.1", + "is-primitive": "^2.0.0", + "normalize-space-x": "^3.0.0", + "replace-comments-x": "^2.0.0", + "to-boolean-x": "^1.0.1", + "to-string-tag-x": "^1.4.2" } }, "is-generator-fn": { @@ -6415,7 +8178,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-index-x": { @@ -6423,11 +8186,11 @@ "resolved": "https://registry.npmjs.org/is-index-x/-/is-index-x-1.1.0.tgz", "integrity": "sha512-qULKLMepQLGC8rSVdi8uF2vI4LiDrU9XSDg1D+Aa657GIB7GV1jHpga7uXgQvkt/cpQ5mVBHUFTpSehYSqT6+A==", "requires": { - "math-clamp-x": "1.2.0", - "max-safe-integer": "1.0.1", - "to-integer-x": "3.0.0", - "to-number-x": "2.0.0", - "to-string-symbols-supported-x": "1.0.2" + "math-clamp-x": "^1.2.0", + "max-safe-integer": "^1.0.1", + "to-integer-x": "^3.0.0", + "to-number-x": "^2.0.0", + "to-string-symbols-supported-x": "^1.0.0" } }, "is-my-ip-valid": { @@ -6442,11 +8205,11 @@ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-nan": { @@ -6454,7 +8217,7 @@ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.2.1.tgz", "integrity": "sha1-n69ltvttskt/XAYoR16nH5iEAeI=", "requires": { - "define-properties": "1.1.2" + "define-properties": "^1.1.1" } }, "is-nan-x": { @@ -6467,8 +8230,8 @@ "resolved": "https://registry.npmjs.org/is-nil-x/-/is-nil-x-1.4.2.tgz", "integrity": "sha512-9aDY7ir7IGb5HlgqL+b38v2YMxf8S7MEHHxjHGzUhijg2crq47RKdxL37bS6dU0VN87wy2IBZP4akgQtIXmyvg==", "requires": { - "lodash.isnull": "3.0.0", - "validate.io-undefined": "1.0.3" + "lodash.isnull": "^3.0.0", + "validate.io-undefined": "^1.0.3" } }, "is-number": { @@ -6477,21 +8240,33 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, + "is-number-object": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", + "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", + "dev": true + }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true + }, "is-object-like-x": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/is-object-like-x/-/is-object-like-x-1.7.1.tgz", "integrity": "sha512-89nz+kESAW2Y7udq+PdRX/dZnRN2WP1b19Gdv4OYE1Xjoekn1xf31l0ZPzT40qdPD7I2nveNFm9rxxI0vmnGHA==", "requires": { - "is-function-x": "3.3.0", - "is-primitive": "3.0.0" + "is-function-x": "^3.3.0", + "is-primitive": "^3.0.0" }, "dependencies": { "is-primitive": { @@ -6501,6 +8276,40 @@ } } }, + "is-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", + "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "dev": true, + "requires": { + "symbol-observable": "^0.2.2" + }, + "dependencies": { + "symbol-observable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true + } + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -6508,12 +8317,12 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "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.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -6522,7 +8331,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -6537,15 +8346,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -6577,7 +8378,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, "is-resolvable": { @@ -6586,6 +8387,21 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-scoped": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", + "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", + "dev": true, + "requires": { + "scoped-regex": "^1.0.0" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -6596,13 +8412,19 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=" }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, "is-svg": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, "is-symbol": { @@ -6628,9 +8450,15 @@ "dev": true }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -6638,21 +8466,17 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isomorphic-fetch": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "1.7.1", - "whatwg-fetch": "2.0.3" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "isstream": { @@ -6661,22 +8485,23 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-api": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.2.tgz", - "integrity": "sha512-kH5YRdqdbs5hiH4/Rr1Q0cSAGgjh3jTtg8vu9NLebBAoK3adVO4jk81J+TYOkTr2+Q4NLeb1ACvmEt65iG/Vbw==", - "dev": true, - "requires": { - "async": "2.6.0", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.2", - "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.2", - "istanbul-lib-report": "1.1.3", - "istanbul-lib-source-maps": "1.2.3", - "istanbul-reports": "1.1.4", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "once": "1.4.0" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", + "dev": true, + "requires": { + "async": "^2.1.4", + "compare-versions": "^3.1.0", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-hook": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-report": "^1.1.4", + "istanbul-lib-source-maps": "^1.2.4", + "istanbul-reports": "^1.3.0", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" }, "dependencies": { "async": { @@ -6685,51 +8510,73 @@ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "4.17.5" + "lodash": "^4.14.0" + } + }, + "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" + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz", + "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" } } } }, "istanbul-lib-coverage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz", - "integrity": "sha512-tZYA0v5A7qBSsOzcebJJ/z3lk3oSzH62puG78DbBA1+zupipX2CakDyiPV3pOb8He+jBwVimuwB0dTnh38hX0w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", "dev": true }, "istanbul-lib-hook": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz", + "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", "dev": true, "requires": { - "append-transform": "0.4.0" + "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz", - "integrity": "sha512-nz8t4HQ2206a/3AXi+NHFWEa844DMpPsgbcUteJbt1j8LX1xg56H9rOMnhvcvVvPbW60qAIyrSk44H8ZDqaSSA==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { - "babel-generator": "6.26.1", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.2", - "semver": "5.3.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.0", + "semver": "^5.3.0" } }, "istanbul-lib-report": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", - "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", + "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.2", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { "has-flag": { @@ -6744,7 +8591,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -6755,11 +8602,11 @@ "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", "dev": true, "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.2", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" }, "dependencies": { "debug": { @@ -6770,32 +8617,37 @@ "requires": { "ms": "2.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, "istanbul-reports": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.4.tgz", - "integrity": "sha512-DfSTVOTkuO+kRmbO8Gk650Wqm1WRGr6lrdi2EwDK1vxpS71vdlLd613EpzOKdIFioB5f/scJTjeWBnvd1FWejg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", "dev": true, "requires": { - "handlebars": "4.0.11" + "handlebars": "^4.0.3" } }, "istextorbinary": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.1.0.tgz", - "integrity": "sha1-2+0qb1G+L3R1to+JRlgRFBt1iHQ=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", + "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", + "dev": true, + "requires": { + "binaryextensions": "2", + "editions": "^1.3.3", + "textextensions": "2" + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, "requires": { - "binaryextensions": "2.1.1", - "editions": "1.3.4", - "textextensions": "2.2.0" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, "javascript-natural-sort": { @@ -6804,13 +8656,13 @@ "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" }, "jest": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-22.3.0.tgz", - "integrity": "sha512-LT4VWb2N5ZjLs6+UaI+6k0lyH8jlI+Mhb7nfWG6dLgUDhD4rFXQjMRL8owehZz46ODTWZ4eVe3fEMrKRp4Fing==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-22.4.3.tgz", + "integrity": "sha512-FFCdU/pXOEASfHxFDOWUysI/+FFoqiXJADEIXgDKuZyqSmBD3tZ4BEGH7+M79v7czj7bbkhwtd2LaEDcJiM/GQ==", "dev": true, "requires": { - "import-local": "1.0.0", - "jest-cli": "22.3.0" + "import-local": "^1.0.0", + "jest-cli": "^22.4.3" }, "dependencies": { "ansi-regex": { @@ -6819,76 +8671,46 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "cliui": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", - "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", - "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - } - }, "jest-cli": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.3.0.tgz", - "integrity": "sha512-CiUADkEcYuRdy3A3AXPpyK4hKq8UfM6M5vKmPSQSMLa7TWUDcB+NmIz5UAFYXnNdw4osNnEzTpsGBYeZLq3UZA==", - "dev": true, - "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.1", - "exit": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "import-local": "1.0.0", - "is-ci": "1.1.0", - "istanbul-api": "1.2.2", - "istanbul-lib-coverage": "1.1.2", - "istanbul-lib-instrument": "1.9.2", - "istanbul-lib-source-maps": "1.2.3", - "jest-changed-files": "22.2.0", - "jest-config": "22.3.0", - "jest-environment-jsdom": "22.3.0", - "jest-get-type": "22.1.0", - "jest-haste-map": "22.3.0", - "jest-message-util": "22.2.0", - "jest-regex-util": "22.1.0", - "jest-resolve-dependencies": "22.1.0", - "jest-runner": "22.3.0", - "jest-runtime": "22.3.0", - "jest-snapshot": "22.2.0", - "jest-util": "22.3.0", - "jest-worker": "22.2.2", - "micromatch": "2.3.11", - "node-notifier": "5.2.1", - "realpath-native": "1.0.0", - "rimraf": "2.6.2", - "slash": "1.0.0", - "string-length": "2.0.0", - "strip-ansi": "4.0.0", - "which": "1.3.0", - "yargs": "10.1.2" + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.3.tgz", + "integrity": "sha512-IiHybF0DJNqZPsbjn4Cy4vcqcmImpoFwNFnkehzVw8lTUSl4axZh5DHewu5bdpZF2Y5gUqFKYzH0FH4Qx2k+UA==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "import-local": "^1.0.0", + "is-ci": "^1.0.10", + "istanbul-api": "^1.1.14", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-instrument": "^1.8.0", + "istanbul-lib-source-maps": "^1.2.1", + "jest-changed-files": "^22.4.3", + "jest-config": "^22.4.3", + "jest-environment-jsdom": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-haste-map": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-regex-util": "^22.4.3", + "jest-resolve-dependencies": "^22.4.3", + "jest-runner": "^22.4.3", + "jest-runtime": "^22.4.3", + "jest-snapshot": "^22.4.3", + "jest-util": "^22.4.3", + "jest-validate": "^22.4.3", + "jest-worker": "^22.4.3", + "micromatch": "^2.3.11", + "node-notifier": "^5.2.1", + "realpath-native": "^1.0.0", + "rimraf": "^2.5.4", + "slash": "^1.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^4.0.0", + "which": "^1.2.12", + "yargs": "^10.0.3" } }, "strip-ansi": { @@ -6897,237 +8719,121 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - }, - "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", - "dev": true, - "requires": { - "cliui": "4.0.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.1.0" + "ansi-regex": "^3.0.0" } } } }, "jest-changed-files": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.2.0.tgz", - "integrity": "sha512-SzqOvoPMrXB0NPvDrSPeKETpoUNCtNDOsFbCzAGWxqWVvNyrIMLpUjVExT3u3LfdVrENlrNGCfh5YoFd8+ZeXg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz", + "integrity": "sha512-83Dh0w1aSkUNFhy5d2dvqWxi/y6weDwVVLU6vmK0cV9VpRxPzhTeGimbsbRDSnEoszhF937M4sDLLeS7Cu/Tmw==", "dev": true, "requires": { - "throat": "4.1.0" + "throat": "^4.0.0" } }, "jest-config": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.3.0.tgz", - "integrity": "sha512-/T3AyDY4FsRaqIsKk+oIItb5mePgIiyh12++fKt8ueISu7jwWf6Y9saodynQaZKtbWcJMDwgTfKz44DylDb1zA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.3.tgz", + "integrity": "sha512-KSg3EOToCgkX+lIvenKY7J8s426h6ahXxaUFJxvGoEk0562Z6inWj1TnKoGycTASwiLD+6kSYFALcjdosq9KIQ==", "dev": true, "requires": { - "chalk": "2.3.1", - "glob": "7.1.2", - "jest-environment-jsdom": "22.3.0", - "jest-environment-node": "22.3.0", - "jest-get-type": "22.1.0", - "jest-jasmine2": "22.3.0", - "jest-regex-util": "22.1.0", - "jest-resolve": "22.3.0", - "jest-util": "22.3.0", - "jest-validate": "22.2.2", - "pretty-format": "22.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^22.4.3", + "jest-environment-node": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-jasmine2": "^22.4.3", + "jest-regex-util": "^22.4.3", + "jest-resolve": "^22.4.3", + "jest-util": "^22.4.3", + "jest-validate": "^22.4.3", + "pretty-format": "^22.4.3" } }, "jest-diff": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.1.0.tgz", - "integrity": "sha512-lowdbU/dzXh+2/MR5QcvU5KPNkO4JdAEYw0PkQCbIQIuy5+g3QZBuVhWh8179Fmpg4CQrz1WgoK/yQHDCHbqqw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", "dev": true, "requires": { - "chalk": "2.3.1", - "diff": "3.4.0", - "jest-get-type": "22.1.0", - "pretty-format": "22.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" } }, "jest-docblock": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.2.2.tgz", - "integrity": "sha512-ymqH4vzNMA0BrRfbDfQ6+b/AI0FLwuEAjBa87HUcuIz0UN76zH+Qw7lpDvhELzNmxu1EfxP9cxMRnVgkHZ7vyA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz", + "integrity": "sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg==", "dev": true, "requires": { - "detect-newline": "2.1.0" + "detect-newline": "^2.1.0" } }, "jest-environment-jsdom": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.3.0.tgz", - "integrity": "sha512-3AwJ1qECmaiq52sn1ZEGJR0O8ZXfE3jWLYcUW+PcGMPcc+k3jFhCHYeUp7VK3njpFB6lmOIbsZs40S0kyMPDyA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", + "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", "dev": true, "requires": { - "jest-mock": "22.2.0", - "jest-util": "22.3.0", - "jsdom": "11.6.2" + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3", + "jsdom": "^11.5.1" } }, "jest-environment-node": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.3.0.tgz", - "integrity": "sha512-Pmpcm5n2YFzruhbAdV5RmEO0xoSnZVw326RLHoCIYhxcm7Vxacb8YKvRv9CbFbXgyQdwuamtaKENQz6yj35b9Q==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", + "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", "dev": true, "requires": { - "jest-mock": "22.2.0", - "jest-util": "22.3.0" + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3" } }, "jest-get-type": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.1.0.tgz", - "integrity": "sha512-nD97IVOlNP6fjIN5i7j5XRH+hFsHL7VlauBbzRvueaaUe70uohrkz7pL/N8lx/IAwZRTJ//wOdVgh85OgM7g3w==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", "dev": true }, "jest-haste-map": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.3.0.tgz", - "integrity": "sha512-eCU0/07j5lDnk6NldfZVv0ul1PqkOFjKwcLpzcj1BBEDYmWoXi8z+3Qoikl0/UM3pjbaVfQOgLZEgCzmzHfwdQ==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz", + "integrity": "sha512-4Q9fjzuPVwnaqGKDpIsCSoTSnG3cteyk2oNVjBX12HHOaF1oxql+uUiqZb5Ndu7g/vTZfdNwwy4WwYogLh29DQ==", "dev": true, "requires": { - "fb-watchman": "2.0.0", - "graceful-fs": "4.1.11", - "jest-docblock": "22.2.2", - "jest-worker": "22.2.2", - "micromatch": "2.3.11", - "sane": "2.4.1" + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-docblock": "^22.4.3", + "jest-serializer": "^22.4.3", + "jest-worker": "^22.4.3", + "micromatch": "^2.3.11", + "sane": "^2.0.0" } }, "jest-jasmine2": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.3.0.tgz", - "integrity": "sha512-m88tD8usgYJJErO7KEr0FqDDyiYCElaWbKqKLstsm/0mFANslhHYFFgIBM3uY+OT9v90mS40DBNMVwWRTpAxJA==", - "dev": true, - "requires": { - "callsites": "2.0.0", - "chalk": "2.3.1", - "co": "4.6.0", - "expect": "22.3.0", - "graceful-fs": "4.1.11", - "is-generator-fn": "1.0.0", - "jest-diff": "22.1.0", - "jest-matcher-utils": "22.2.0", - "jest-message-util": "22.2.0", - "jest-snapshot": "22.2.0", - "source-map-support": "0.5.3" + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz", + "integrity": "sha512-yZCPCJUcEY6R5KJB/VReo1AYI2b+5Ky+C+JA1v34jndJsRcLpU4IZX4rFJn7yDTtdNbO/nNqg+3SDIPNH2ecnw==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^22.4.3", + "graceful-fs": "^4.1.11", + "is-generator-fn": "^1.0.0", + "jest-diff": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-snapshot": "^22.4.3", + "jest-util": "^22.4.3", + "source-map-support": "^0.5.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7135,458 +8841,203 @@ "dev": true }, "source-map-support": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz", - "integrity": "sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==", - "dev": true, - "requires": { - "source-map": "0.6.1" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", + "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", "dev": true, "requires": { - "has-flag": "3.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } } } }, "jest-leak-detector": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.1.0.tgz", - "integrity": "sha512-8QsCWkncWAqdvrXN4yXQp9vgWF6CT3RkRey+d06SIHX913uXzAJhJdZyo6eE+uHVYMxUbxqW93npbUFhAR0YxA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz", + "integrity": "sha512-NZpR/Ls7+ndO57LuXROdgCGz2RmUdC541tTImL9bdUtU3WadgFGm0yV+Ok4Fuia/1rLAn5KaJ+i76L6e3zGJYQ==", "dev": true, "requires": { - "pretty-format": "22.1.0" + "pretty-format": "^22.4.3" } }, "jest-matcher-utils": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.2.0.tgz", - "integrity": "sha512-jO0cnQ93mR4on+nbmEeK4bChCvLeMFN1bP2qjRjwFv5KzQt34y5SmUq9FgzKjZQZG8zUmaQN+/pHJMUQ0xAcgQ==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", + "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", "dev": true, "requires": { - "chalk": "2.3.1", - "jest-get-type": "22.1.0", - "pretty-format": "22.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "chalk": "^2.0.1", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" } }, "jest-message-util": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.2.0.tgz", - "integrity": "sha512-LHPYu5kyA07FZK2CpvJ0xBE+gqy+dW30sFU3oep78lmscyc27mVOWDVwzmROhUeY8LlYpW3mcpRB/w5ibD6ZkA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", + "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "chalk": "2.3.1", - "micromatch": "2.3.11", - "slash": "1.0.0", - "stack-utils": "1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" } }, "jest-mock": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.2.0.tgz", - "integrity": "sha512-eOfoUYLOB/JlxChOFkh/bzpWGqUXb9I+oOpkprHHs9L7nUNfL8Rk28h1ycWrqzWCEQ/jZBg/xIv7VdQkfAkOhw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", + "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", "dev": true }, "jest-regex-util": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.1.0.tgz", - "integrity": "sha512-on0LqVS6Xeh69sw3d1RukVnur+lVOl3zkmb0Q54FHj9wHoq6dbtWqb3TSlnVUyx36hqjJhjgs/QLqs07Bzu72Q==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", + "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", "dev": true }, "jest-resolve": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.3.0.tgz", - "integrity": "sha512-OQzPRNCBw3KRPzDTJhuW9eXLrlsnv6tY5ArmKSKsDMA5t6EcYv1W/6DrNYqiIVi7Zcx4P+1hssFeWVZWp9TnDg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", + "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", "dev": true, "requires": { - "browser-resolve": "1.11.2", - "chalk": "2.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "browser-resolve": "^1.11.2", + "chalk": "^2.0.1" } }, "jest-resolve-dependencies": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz", - "integrity": "sha512-76Ll61bD/Sus8wK8d+lw891EtiBJGJkWG8OuVDTEX0z3z2+jPujvQqSB2eQ+kCHyCsRwJ2PSjhn3UHqae/oEtA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz", + "integrity": "sha512-06czCMVToSN8F2U4EvgSB1Bv/56gc7MpCftZ9z9fBgUQM7dzHGCMBsyfVA6dZTx8v0FDcnALf7hupeQxaBCvpA==", "dev": true, "requires": { - "jest-regex-util": "22.1.0" + "jest-regex-util": "^22.4.3" } }, "jest-runner": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.3.0.tgz", - "integrity": "sha512-ch48IjHcOj+mIV9iMJsK4c0OcVd6OOKX6ggwttYJorypu+rEpgmpPXfucAh8q8F9SFt8nKByfjD6iHOWtd27sA==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.4.3.tgz", + "integrity": "sha512-U7PLlQPRlWNbvOHWOrrVay9sqhBJmiKeAdKIkvX4n1G2tsvzLlf77nBD28GL1N6tGv4RmuTfI8R8JrkvCa+IBg==", "dev": true, "requires": { - "exit": "0.1.2", - "jest-config": "22.3.0", - "jest-docblock": "22.2.2", - "jest-haste-map": "22.3.0", - "jest-jasmine2": "22.3.0", - "jest-leak-detector": "22.1.0", - "jest-message-util": "22.2.0", - "jest-runtime": "22.3.0", - "jest-util": "22.3.0", - "jest-worker": "22.2.2", - "throat": "4.1.0" + "exit": "^0.1.2", + "jest-config": "^22.4.3", + "jest-docblock": "^22.4.3", + "jest-haste-map": "^22.4.3", + "jest-jasmine2": "^22.4.3", + "jest-leak-detector": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-runtime": "^22.4.3", + "jest-util": "^22.4.3", + "jest-worker": "^22.4.3", + "throat": "^4.0.0" } }, "jest-runtime": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.3.0.tgz", - "integrity": "sha512-e0BO1/by3bi0d7vMN7afVVD9kD9NEzmHrZgpJtTyxTN4qyL94iJyiPEd7WZxDySSNvA6Fd43LS7AbkMGhOaVJg==", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-jest": "22.2.2", - "babel-plugin-istanbul": "4.1.5", - "chalk": "2.3.1", - "convert-source-map": "1.5.1", - "exit": "0.1.2", - "graceful-fs": "4.1.11", - "jest-config": "22.3.0", - "jest-haste-map": "22.3.0", - "jest-regex-util": "22.1.0", - "jest-resolve": "22.3.0", - "jest-util": "22.3.0", - "json-stable-stringify": "1.0.1", - "micromatch": "2.3.11", - "realpath-native": "1.0.0", - "slash": "1.0.0", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.4.3.tgz", + "integrity": "sha512-Eat/esQjevhx9BgJEC8udye+FfoJ2qvxAZfOAWshYGS22HydHn5BgsvPdTtt9cp0fSl5LxYOFA1Pja9Iz2Zt8g==", + "dev": true, + "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^22.4.3", + "babel-plugin-istanbul": "^4.1.5", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^22.4.3", + "jest-haste-map": "^22.4.3", + "jest-regex-util": "^22.4.3", + "jest-resolve": "^22.4.3", + "jest-util": "^22.4.3", + "jest-validate": "^22.4.3", + "json-stable-stringify": "^1.0.1", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", "strip-bom": "3.0.0", - "write-file-atomic": "2.3.0", - "yargs": "10.1.2" - }, - "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 - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "cliui": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", - "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", - "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.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" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - }, - "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", - "dev": true, - "requires": { - "cliui": "4.0.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.1.0" - } - } + "write-file-atomic": "^2.1.0", + "yargs": "^10.0.3" } }, + "jest-serializer": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-22.4.3.tgz", + "integrity": "sha512-uPaUAppx4VUfJ0QDerpNdF43F68eqKWCzzhUlKNDsUPhjOon7ZehR4C809GCqh765FoMRtTVUVnGvIoskkYHiw==", + "dev": true + }, "jest-snapshot": { - "version": "22.2.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.2.0.tgz", - "integrity": "sha512-nc4hOfENTO/09NWJDz6ojf5zdAGPutQ4ZKmidWuEirTyBwhndxBlckO8ZaiQk9NDfDUeoVNptd6zJW84GWPRKw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", + "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", "dev": true, "requires": { - "chalk": "2.3.1", - "jest-diff": "22.1.0", - "jest-matcher-utils": "22.2.0", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "pretty-format": "22.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "chalk": "^2.0.1", + "jest-diff": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^22.4.3" } }, "jest-util": { - "version": "22.3.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.3.0.tgz", - "integrity": "sha512-c/YVsxOI2tSwXqb19/3gnzBDVsrTG4D3dAJzHpdROxZdJ2dpI/zYKEdLDS2CSKDTbjftoeiW9PrOYiDGF2UKfw==", - "dev": true, - "requires": { - "callsites": "2.0.0", - "chalk": "2.3.1", - "graceful-fs": "4.1.11", - "is-ci": "1.1.0", - "jest-message-util": "22.2.0", - "jest-validate": "22.2.2", - "mkdirp": "0.5.1" + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", + "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", + "dev": true, + "requires": { + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^22.4.3", + "mkdirp": "^0.5.1", + "source-map": "^0.6.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, "jest-validate": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.2.2.tgz", - "integrity": "sha512-YcZlnHYqQqLqSTj/E+mDkriqVmGOATTzseV+JFWa0XJ4Tpxji6+M66TcTl1PlbvQTMo+iVvvRixnPkF1mqNFjg==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.3.tgz", + "integrity": "sha512-CfFM18W3GSP/xgmA4UouIx0ljdtfD2mjeBC6c89Gg17E44D4tQhAcTrZmf9djvipwU30kSTnk6CzcxdCCeSXfA==", "dev": true, "requires": { - "chalk": "2.3.1", - "jest-get-type": "22.1.0", - "leven": "2.1.0", - "pretty-format": "22.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "chalk": "^2.0.1", + "jest-config": "^22.4.3", + "jest-get-type": "^22.4.3", + "leven": "^2.1.0", + "pretty-format": "^22.4.3" } }, "jest-worker": { - "version": "22.2.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.2.2.tgz", - "integrity": "sha512-ZylDXjrFNt/OP6cUxwJFWwDgazP7hRjtCQbocFHyiwov+04Wm1x5PYzMGNJT53s4nwr0oo9ocYTImS09xOlUnw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz", + "integrity": "sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ==", "dev": true, "requires": { - "merge-stream": "1.0.1" + "merge-stream": "^1.0.1" } }, "jquery": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz", - "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.0.0.tgz", + "integrity": "sha1-laKpVBKRqfgZ4Bb4W6JHEW0D5Ks=" }, "js-base64": { "version": "2.4.3", @@ -7610,25 +9061,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" - }, - "dependencies": { - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "js2xmlparser": { @@ -7637,7 +9071,7 @@ "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", "dev": true, "requires": { - "xmlcreate": "1.0.2" + "xmlcreate": "^1.0.1" } }, "jsbn": { @@ -7646,233 +9080,196 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, - "jsdoc": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", - "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", - "dev": true, - "requires": { - "babylon": "7.0.0-beta.19", - "bluebird": "3.5.1", - "catharsis": "0.8.9", - "escape-string-regexp": "1.0.5", - "js2xmlparser": "3.0.0", - "klaw": "2.0.0", - "marked": "0.3.12", - "mkdirp": "0.5.1", - "requizzle": "0.2.1", - "strip-json-comments": "2.0.1", - "taffydb": "2.6.2", - "underscore": "1.8.3" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.19", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", - "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", - "dev": true - }, - "klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - } - } - }, - "jsdom": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.6.2.tgz", - "integrity": "sha512-pAeZhpbSlUp5yQcS6cBQJwkbzmv4tWFaYxHbFVSxzXefqjvtRA851Z5N2P+TguVG9YeUDcgb8pdeVQRJh0XR3Q==", - "dev": true, - "requires": { - "abab": "1.0.4", - "acorn": "5.4.1", - "acorn-globals": "4.1.0", - "array-equal": "1.0.0", - "browser-process-hrtime": "0.1.2", - "content-type-parser": "1.0.2", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "domexception": "1.0.1", - "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.2", - "left-pad": "1.2.0", - "nwmatcher": "1.4.3", - "parse5": "4.0.0", - "pn": "1.1.0", - "request": "2.83.0", - "request-promise-native": "1.0.5", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", - "w3c-hr-time": "1.0.1", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.3", - "whatwg-url": "6.4.0", - "ws": "4.0.0", - "xml-name-validator": "3.0.0" + "jscodeshift": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.0.tgz", + "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", + "dev": true, + "requires": { + "babel-plugin-transform-flow-strip-types": "^6.8.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-stage-1": "^6.5.0", + "babel-register": "^6.9.0", + "babylon": "^7.0.0-beta.30", + "colors": "^1.1.2", + "flow-parser": "^0.*", + "lodash": "^4.13.1", + "micromatch": "^2.3.7", + "neo-async": "^2.5.0", + "node-dir": "0.1.8", + "nomnom": "^1.8.1", + "recast": "^0.14.1", + "temp": "^0.8.1", + "write-file-atomic": "^1.2.0" }, "dependencies": { - "assert-plus": { + "ansi-styles": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", "dev": true }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "ast-types": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", + "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", "dev": true }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "4.2.0" - } + "babylon": { + "version": "7.0.0-beta.46", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.46.tgz", + "integrity": "sha512-WFJlg2WatdkXRFMpk7BN/Uzzkjkcjk+WaqnrSCpay+RYl4ypW9ZetZyT9kNt22IH/BQNst3M6PaaBn9IXsUNrg==", + "dev": true }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", "dev": true, "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - } + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" } }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.17" - } + "colors": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.4.tgz", + "integrity": "sha512-6Y+iBnWmXL+AWtlOp2Vr6R2w5MUlNJRwR0ShVFaAb1CqWzhPOpQg4L0jxD+xpw/Nc8QJwaq3KM79QUCriY8CWQ==", + "dev": true }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", "dev": true, "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "chalk": "~0.4.0", + "underscore": "~1.6.0" } }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "recast": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", + "integrity": "sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==", "dev": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.1.0" + "ast-types": "0.11.3", + "esprima": "~4.0.0", + "private": "~0.1.5", + "source-map": "~0.6.1" } }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", "dev": true }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", "dev": true }, - "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - } - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "dev": true, "requires": { - "hoek": "4.2.0" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" } + } + } + }, + "jsdoc": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", + "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", + "dev": true, + "requires": { + "babylon": "7.0.0-beta.19", + "bluebird": "~3.5.0", + "catharsis": "~0.8.9", + "escape-string-regexp": "~1.0.5", + "js2xmlparser": "~3.0.0", + "klaw": "~2.0.0", + "marked": "~0.3.6", + "mkdirp": "~0.5.1", + "requizzle": "~0.2.1", + "strip-json-comments": "~2.0.1", + "taffydb": "2.6.2", + "underscore": "~1.8.3" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.19", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", + "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + } + } + }, + "jsdom": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.10.0.tgz", + "integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==", + "dev": true, + "requires": { + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwmatcher": "^1.4.3", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.0", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true } } }, @@ -7882,20 +9279,20 @@ "integrity": "sha1-/wF4E+rGmAnaXFZm1um/UnAOGss=" }, "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, "json-parse-better-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", - "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { @@ -7913,7 +9310,7 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stable-stringify-without-jsonify": { @@ -7938,7 +9335,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -7951,10 +9348,10 @@ "resolved": "https://registry.npmjs.org/jsonist/-/jsonist-2.1.0.tgz", "integrity": "sha1-RHek0WzTd/rsWNjPhwt+OS9tf+k=", "requires": { - "bl": "1.2.1", - "hyperquest": "2.1.3", - "json-stringify-safe": "5.0.1", - "xtend": "4.0.1" + "bl": "~1.2.0", + "hyperquest": "~2.1.2", + "json-stringify-safe": "~5.0.1", + "xtend": "~4.0.1" } }, "jsonpointer": { @@ -7972,13 +9369,6 @@ "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "jsx-ast-utils": { @@ -7987,7 +9377,7 @@ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", "dev": true, "requires": { - "array-includes": "3.0.3" + "array-includes": "^3.0.3" } }, "just-extend": { @@ -7996,12 +9386,30 @@ "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==", "dev": true }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" + } + }, + "klaw": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" } }, "lazy-cache": { @@ -8015,13 +9423,19 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, + "leb": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/leb/-/leb-0.3.0.tgz", + "integrity": "sha1-Mr7p+tFoMo1q6oUi2DP0GA7tHaM=", + "dev": true + }, "left-pad": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz", - "integrity": "sha1-0wpzxrggHY99jnlWupYWCHpo4O4=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", "dev": true }, "level-codec": { @@ -8034,7 +9448,7 @@ "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", "requires": { - "errno": "0.1.6" + "errno": "~0.1.1" } }, "level-iterator-stream": { @@ -8042,10 +9456,36 @@ "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", "requires": { - "inherits": "2.0.3", - "level-errors": "1.0.5", - "readable-stream": "1.0.33", - "xtend": "4.0.1" + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + }, + "dependencies": { + "level-errors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz", + "integrity": "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==", + "requires": { + "errno": "~0.1.1" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } } }, "level-write-stream": { @@ -8053,7 +9493,7 @@ "resolved": "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz", "integrity": "sha1-P3+7Z5pVE3wP6zA97nZuEu4Twdw=", "requires": { - "end-stream": "0.1.0" + "end-stream": "~0.1.0" } }, "leveldown": { @@ -8061,11 +9501,18 @@ "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-1.5.0.tgz", "integrity": "sha1-a408vqekqJqkdERgfXNYIT5vy4E=", "requires": { - "abstract-leveldown": "2.6.3", - "bindings": "1.2.1", - "fast-future": "1.0.2", - "nan": "2.4.0", - "prebuild": "4.5.0" + "abstract-leveldown": "~2.6.1", + "bindings": "~1.2.1", + "fast-future": "~1.0.0", + "nan": "~2.4.0", + "prebuild": "^4.1.1" + }, + "dependencies": { + "nan": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=" + } } }, "levelup": { @@ -8073,13 +9520,13 @@ "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.8.tgz", "integrity": "sha1-+0QsSI776hBD9+uZKaeSp0+9HaY=", "requires": { - "deferred-leveldown": "1.2.2", - "level-codec": "6.1.0", - "level-errors": "1.0.5", - "level-iterator-stream": "1.3.1", - "prr": "1.0.1", - "semver": "5.1.1", - "xtend": "4.0.1" + "deferred-leveldown": "~1.2.1", + "level-codec": "~6.1.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.1.0", + "xtend": "~4.0.0" }, "dependencies": { "level-codec": { @@ -8106,8 +9553,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "license-checker": { @@ -8116,16 +9563,16 @@ "integrity": "sha512-HLI3BcrG1mM5Q156DAZxVlK0pE0s/I/EhSaLqWev23e+G5pBIwYXleAhgsja3qJDKcZVBezb7GJwu5pqfmK/Tg==", "dev": true, "requires": { - "chalk": "0.5.1", - "debug": "2.6.4", - "mkdirp": "0.3.5", - "nopt": "2.2.1", - "read-installed": "4.0.3", - "semver": "5.3.0", - "spdx": "0.5.1", - "spdx-correct": "2.0.4", - "spdx-satisfies": "0.1.3", - "treeify": "1.0.1" + "chalk": "~0.5.1", + "debug": "^2.2.0", + "mkdirp": "^0.3.5", + "nopt": "^2.2.0", + "read-installed": "~4.0.3", + "semver": "^5.3.0", + "spdx": "^0.5.1", + "spdx-correct": "^2.0.3", + "spdx-satisfies": "^0.1.3", + "treeify": "^1.0.1" }, "dependencies": { "ansi-regex": { @@ -8146,11 +9593,11 @@ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "dev": true, "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" } }, "has-ansi": { @@ -8159,7 +9606,7 @@ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "dev": true, "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.0" } }, "mkdirp": { @@ -8174,7 +9621,7 @@ "integrity": "sha1-KqCbfRdoSHs7ianFqlIzW/8Lrqc=", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "spdx-correct": { @@ -8183,24 +9630,18 @@ "integrity": "sha512-c+4gPpt9YDhz7cHlz5UrsHzxxRi4ksclxnEEKsuGT9JdwSC+ZNmsGbYRzzgxyZaBYpcWnlu+4lPcdLKx4DOCmA==", "dev": true, "requires": { - "spdx-expression-parse": "2.0.2", - "spdx-license-ids": "2.0.1" + "spdx-expression-parse": "^2.0.1", + "spdx-license-ids": "^2.0.1" } }, - "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": "2.0.2", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-2.0.2.tgz", "integrity": "sha512-oFxOkWCfFS0ltNp0H66gXlU4NF6bxg7RkoTYR0413t+yTY9zyj+AIWsjtN8dcVp6703ijDYBWBIARlJ7DkyP9Q==", "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "2.0.1" + "spdx-exceptions": "^2.0.0", + "spdx-license-ids": "^2.0.1" } }, "spdx-license-ids": { @@ -8215,7 +9656,7 @@ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "dev": true, "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.1" } }, "supports-color": { @@ -8231,25 +9672,244 @@ "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", "requires": { - "immediate": "3.0.6" - } - }, - "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.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "immediate": "~3.0.5" + } + }, + "listr": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", + "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "figures": "^1.7.0", + "indent-string": "^2.1.0", + "is-observable": "^0.2.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.4.0", + "listr-verbose-renderer": "^0.4.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "ora": "^0.2.3", + "p-map": "^1.1.1", + "rxjs": "^5.4.2", + "stream-to-observable": "^0.2.0", + "strip-ansi": "^3.0.1" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.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 + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", + "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.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 + } + } + }, + "listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.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 + } + } + }, + "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 } } @@ -8266,9 +9926,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -8277,19 +9937,19 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" }, "lodash-es": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.5.tgz", - "integrity": "sha512-Ez3ONp3TK9gX1HYKp6IhetcVybD+2F+Yp6GS9dfH8ue6EOCEzQtQEh4K0FYWBP9qLv+lzeQAYXw+3ySfxyZqkw==" + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.10.tgz", + "integrity": "sha512-iesFYPmxYYGTcmQK0sL8bX3TGHyM6b2qREaB4kamHfQyfPJP0xgoGxp19nsH16nsfquLdiyKyX3mQkfiSGV8Rg==" }, "lodash.assign": { "version": "4.2.0", @@ -8309,10 +9969,10 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "lodash.get": { @@ -8326,6 +9986,12 @@ "resolved": "https://registry.npmjs.org/lodash.isnull/-/lodash.isnull-3.0.0.tgz", "integrity": "sha1-+vvlnqHcon7teGU0A53YTC4HxW4=" }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -8356,7 +10022,8 @@ "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true }, "lodash.tail": { "version": "4.1.1", @@ -8370,10 +10037,68 @@ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", + "dev": true, + "requires": { + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + } + } + }, "lolex": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz", - "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.4.1.tgz", + "integrity": "sha512-8QdNQMqlAE2kkc2YWR3Ld0evgE452mmyYZR4HTh54PeH8UAjDipHYh/FHq6y9cAvM68nxGxj5jAz97+WQ2AQEQ==", + "dev": true + }, + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", "dev": true }, "longest": { @@ -8386,7 +10111,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "loud-rejection": { @@ -8395,8 +10120,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lower-case": { @@ -8405,14 +10130,28 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", "dev": true }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "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" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + }, + "dependencies": { + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } } }, "ltgt": { @@ -8421,11 +10160,11 @@ "integrity": "sha1-tlul/LNJopkkyOMz98alVi8uSEI=" }, "m3u8stream": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.2.1.tgz", - "integrity": "sha512-kESIvCcoDOZ2ozD6wGxB962E24nPLDTezIBdqfJH1HxoY/dMTRFXOfq7sXtqPQM3nQihKXlv6pYmUpf01S/tVQ==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.2.2.tgz", + "integrity": "sha512-R/xWLXBtVr0m9sPruRL4p9uO01JyHxhcQ4nhqQhVgyT802OZyVW+dn+fWHvTnbfE6YMLc65TksZZut+Mh2OVMQ==", "requires": { - "miniget": "1.1.0" + "miniget": "^1.1.0" } }, "macaddress": { @@ -8435,12 +10174,12 @@ "dev": true }, "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "makeerror": { @@ -8449,30 +10188,45 @@ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "requires": { - "tmpl": "1.0.4" + "tmpl": "1.0.x" } }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, "markdown-extract": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/markdown-extract/-/markdown-extract-1.0.2.tgz", "integrity": "sha1-HNGXLDuEiN/7Rhw/lUTmmwLRgxI=", "dev": true, "requires": { - "byline": "4.2.2", - "marked": "0.3.12", - "underscore": "1.8.3" + "byline": "^4.2.1", + "marked": "^0.3.3", + "underscore": "^1.8.3" } }, "marked": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.12.tgz", - "integrity": "sha512-k4NaW+vS7ytQn6MgJn3fYpQt20/mOgYM5Ft9BYMfQJDz2QT6yEeS9XJ8k2Nw8JTeWK/znPPW2n3UJGzyYEiMoA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", "dev": true }, "matcher-collection": { @@ -8480,7 +10234,7 @@ "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.0.5.tgz", "integrity": "sha512-nUCmzKipcJEwYsBVAFh5P+d7JBuhJaW1xs85Hara9xuMLqtCVUrW6DSC0JVIkluxEH2W45nPBM/wjHtBXa/tYA==", "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.2" } }, "math-clamp-x": { @@ -8488,7 +10242,7 @@ "resolved": "https://registry.npmjs.org/math-clamp-x/-/math-clamp-x-1.2.0.tgz", "integrity": "sha512-tqpjpBcIf9UulApz3EjWXqTZpMlr2vLN9PryC9ghoyCuRmqZaf3JJhPddzgQpJnKLi2QhoFnvKBFtJekAIBSYg==", "requires": { - "to-number-x": "2.0.0" + "to-number-x": "^2.0.0" } }, "math-expression-evaluator": { @@ -8497,13 +10251,19 @@ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", "dev": true }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "math-sign-x": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/math-sign-x/-/math-sign-x-3.0.0.tgz", "integrity": "sha512-OzPas41Pn4d16KHnaXmGxxY3/l3zK4OIXtmIwdhgZsxz4FDDcNnbrABYPg2vGfxIkaT9ezGnzDviRH7RfF44jQ==", "requires": { - "is-nan-x": "1.0.3", - "to-number-x": "2.0.0" + "is-nan-x": "^1.0.1", + "to-number-x": "^2.0.0" } }, "mathjs": { @@ -8531,20 +10291,8 @@ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "mem": { @@ -8553,52 +10301,114 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "mem-fs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", + "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", "dev": true, "requires": { - "errno": "0.1.6", - "readable-stream": "2.3.4" + "through2": "^2.0.0", + "vinyl": "^1.1.0", + "vinyl-file": "^2.0.0" + } + }, + "mem-fs-editor": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.2.tgz", + "integrity": "sha512-QHvdXLLNmwJXxKdf7x27aNUren6IoPxwcM8Sfd+S6/ddQQMcYdEtVKsh6ilpqMrU18VQuKZEaH0aCGt3JDbA0g==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "deep-extend": "^0.5.1", + "ejs": "^2.5.9", + "glob": "^7.0.3", + "globby": "^8.0.0", + "isbinaryfile": "^3.0.2", + "mkdirp": "^0.5.0", + "multimatch": "^2.0.0", + "rimraf": "^2.2.8", + "through2": "^2.0.0", + "vinyl": "^2.0.1" }, "dependencies": { - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { "find-up": { @@ -8607,8 +10417,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "load-json-file": { @@ -8617,11 +10427,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "path-exists": { @@ -8630,7 +10440,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-type": { @@ -8639,9 +10449,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { @@ -8656,9 +10466,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -8667,8 +10477,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "strip-bom": { @@ -8677,7 +10487,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -8694,45 +10504,34 @@ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "readable-stream": "2.3.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "readable-stream": "^2.0.1" } }, + "merge2": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", + "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==", + "dev": true + }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "miller-rabin": { @@ -8741,8 +10540,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -8752,16 +10551,16 @@ "dev": true }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.33.0" } }, "mimic-fn": { @@ -8770,23 +10569,39 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "mimic-response": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", + "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", + "dev": true + }, "min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", "requires": { - "dom-walk": "0.1.1" + "dom-walk": "^0.1.0" + } + }, + "mini-css-extract-plugin": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.0.tgz", + "integrity": "sha512-2Zik6PhUZ/MbiboG6SDS9UTPL4XXy4qnyGjSdCIWRrr8xb6PwLtHE+AYOjkXJWdF0OG8vo/yrJ8CgS5WbMpzIg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "webpack-sources": "^1.1.0" } }, "miniget": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.1.0.tgz", - "integrity": "sha512-ICBPQWEoz19eyPHbXLkvjPi62xLhz2irltks35NCYqzYHO0/35IbAaBP3Bbc4VgAwmloIPEpK7CO4/omOiUfDg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.2.0.tgz", + "integrity": "sha1-ADY3Oia71S2+aUX85sjAOR6eEkE=" }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { @@ -8800,7 +10615,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -8808,14 +10623,65 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "mixin-object": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dev": true, "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" }, "dependencies": { "for-in": { @@ -8847,22 +10713,48 @@ "integrity": "sha1-bQUVYRyKjITkhKogABKbmOmB/ws=" }, "moment": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", - "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", + "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" }, "moment-timezone": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.14.tgz", - "integrity": "sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE=", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.16.tgz", + "integrity": "sha512-4d1l92plNNqnMkqI/7boWNVXJvwGL2WyByl1Hxp3h/ao3HZiAqaoQY+6KBkYdiN5QtNDpndq+58ozl8W4GVoNw==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, "requires": { - "moment": "2.20.1" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", - "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + } }, "mute-stream": { "version": "0.0.7", @@ -8871,35 +10763,61 @@ "dev": true }, "nan": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=" + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true }, "nan-x": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nan-x/-/nan-x-1.0.2.tgz", "integrity": "sha512-dndRmy03JQEN+Nh6WjQl7/OstIozeEmrtWe4TE7mEqJ8W8oMD8m2tHjsLPWt//e3hLAeRSbs4pxMyc5pk/nCkQ==" }, - "native-promise-only": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", - "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 - }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true, - "requires": { - "xml-char-classes": "1.0.0" - } + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "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 }, "ncp": { "version": "2.0.0", @@ -8907,17 +10825,46 @@ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "dev": true }, + "nearley": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.13.0.tgz", + "integrity": "sha512-ioYYogSaZhFlCpRizQgY3UT3G1qFXmHGY/5ozoFE3dMfiCRAeJfh+IPE3/eh9gCZvqLhPCWb4bLt7Bqzo+1mLQ==", + "dev": true, + "requires": { + "nomnom": "~1.6.2", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6", + "semver": "^5.4.1" + } + }, + "neo-async": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, "nise": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.2.5.tgz", - "integrity": "sha512-Es4hGuq3lpip5PckrB+Qpuma282M0UJANJ+jxAgI+0wWTL9X6MtNv+M385JgqsAE8hv6NvD3lv8CQtXgEnvlpQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.3.tgz", + "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "just-extend": "1.1.27", - "lolex": "2.3.2", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" + "@sinonjs/formatio": "^2.0.0", + "just-extend": "^1.1.27", + "lolex": "^2.3.2", + "path-to-regexp": "^1.7.0", + "text-encoding": "^0.6.4" } }, "no-case": { @@ -8926,39 +10873,49 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, + "node-dir": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz", + "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=", + "dev": true + }, "node-fetch": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz", "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ==", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, - "node-forge": { - "version": "git+https://git@github.com/digitalbazaar/forge.git#af3f590af9d3c809e1cb44b2bb5398a3a6b944c2" - }, "node-gyp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "2.0.4", - "osenv": "0.1.4", - "request": "2.80.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.0" + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "2", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + } } }, "node-int64": { @@ -8973,52 +10930,29 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.4", - "stream-browserify": "2.0.1", - "stream-http": "2.8.0", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.6", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" - }, - "dependencies": { - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } } }, "node-ninja": { @@ -9026,20 +10960,44 @@ "resolved": "https://registry.npmjs.org/node-ninja/-/node-ninja-1.0.2.tgz", "integrity": "sha1-IKCeV7kuLfWRmT1L8JisPnJwYrY=", "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "2.0.4", - "osenv": "0.1.4", - "path-array": "1.0.1", - "request": "2.80.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.0" + "fstream": "^1.0.0", + "glob": "3 || 4 || 5 || 6 || 7", + "graceful-fs": "^4.1.2", + "minimatch": "3", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2", + "osenv": "0", + "path-array": "^1.0.0", + "request": "2", + "rimraf": "2", + "semver": "2.x || 3.x || 4 || 5", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "requires": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "requires": { + "ansi": "~0.3.1", + "are-we-there-yet": "~1.1.2", + "gauge": "~1.2.5" + } + } } }, "node-notifier": { @@ -9048,18 +11006,10 @@ "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", "dev": true, "requires": { - "growly": "1.3.0", - "semver": "5.5.0", - "shellwords": "0.1.1", - "which": "1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } + "growly": "^1.3.0", + "semver": "^5.4.1", + "shellwords": "^0.1.1", + "which": "^1.3.0" } }, "node-persist": { @@ -9067,67 +11017,70 @@ "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-2.0.11.tgz", "integrity": "sha1-4B4mMNRHceKx8zIn1CLhPknk4Yo=", "requires": { - "mkdirp": "0.5.1", - "q": "1.1.2" + "mkdirp": "~0.5.1", + "q": "~1.1.1" } }, "node-sass": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz", - "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==", - "dev": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.2", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.4.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", + "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.3.1", + "npmlog": "^4.0.0", + "request": "~2.79.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "caseless": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", "dev": true }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" + "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" } }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "dev": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "har-validator": { @@ -9136,31 +11089,10 @@ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "dev": true, "requires": { - "chalk": "1.1.3", - "commander": "2.9.0", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" } }, "request": { @@ -9169,45 +11101,60 @@ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", "dev": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "qs": "~6.3.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1", + "uuid": "^3.0.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } + "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 } } }, - "noop-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz", - "integrity": "sha1-XzPUfxPSFQ35PgywNmmemC94/78=" + "nomnom": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", + "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", + "dev": true, + "requires": { + "colors": "0.5.x", + "underscore": "~1.4.4" + }, + "dependencies": { + "chalk": {}, + "colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", + "dev": true + }, + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", + "dev": true + } + } }, "noop-logger": { "version": "0.1.1", @@ -9219,7 +11166,7 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "normalize-css-color": { @@ -9233,10 +11180,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -9245,7 +11192,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -9259,9 +11206,9 @@ "resolved": "https://registry.npmjs.org/normalize-space-x/-/normalize-space-x-3.0.0.tgz", "integrity": "sha512-tbCJerqZCCHPst4rRKgsTanLf45fjOyeAU5zE3mhDxJtFJKt66q39g2XArWhXelgTFVib8mNBUm6Wrd0LxYcfQ==", "requires": { - "cached-constructors-x": "1.0.2", - "trim-x": "3.0.0", - "white-space-x": "3.0.1" + "cached-constructors-x": "^1.0.0", + "trim-x": "^3.0.0", + "white-space-x": "^3.0.0" } }, "normalize-url": { @@ -9270,10 +11217,10 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "npm-run-path": { @@ -9282,17 +11229,27 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npmlog": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, "requires": { - "ansi": "0.3.1", - "are-we-there-yet": "1.1.4", - "gauge": "1.2.7" + "boolbase": "~1.0.0" } }, "num2fraction": { @@ -9307,9 +11264,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwmatcher": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", - "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", "dev": true }, "oauth-sign": { @@ -9322,36 +11279,103 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "object-get-own-property-descriptor-x": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/object-get-own-property-descriptor-x/-/object-get-own-property-descriptor-x-3.2.0.tgz", "integrity": "sha512-Z/0fIrptD9YuzN+SNK/1kxAEaBcPQM4gSrtOSMSi9eplnL/AbyQcAyAlreAoAzmBon+DQ1Z+AdhxyQSvav5Fyg==", "requires": { - "attempt-x": "1.1.3", - "has-own-property-x": "3.2.0", - "has-symbol-support-x": "1.4.2", - "is-falsey-x": "1.0.3", - "is-index-x": "1.1.0", - "is-primitive": "2.0.0", - "is-string": "1.0.4", - "property-is-enumerable-x": "1.1.0", - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" + "attempt-x": "^1.1.0", + "has-own-property-x": "^3.1.1", + "has-symbol-support-x": "^1.4.1", + "is-falsey-x": "^1.0.0", + "is-index-x": "^1.0.0", + "is-primitive": "^2.0.0", + "is-string": "^1.0.4", + "property-is-enumerable-x": "^1.1.0", + "to-object-x": "^1.4.1", + "to-property-key-x": "^2.0.1" } }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, "object-keys": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "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" + } + }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.omit": { @@ -9360,8 +11384,29 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" } }, "oboe": { @@ -9370,7 +11415,7 @@ "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", "dev": true, "requires": { - "http-https": "1.0.0" + "http-https": "^1.0.0" } }, "once": { @@ -9378,7 +11423,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -9387,23 +11432,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - } + "mimic-fn": "^1.0.0" } }, "optionator": { @@ -9412,12 +11441,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "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" }, "dependencies": { "wordwrap": { @@ -9428,6 +11457,70 @@ } } }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.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 + } + } + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -9445,9 +11538,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-tmpdir": { @@ -9456,12 +11549,27 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "p-reduce": "^1.0.0" } }, "p-finally": { @@ -9470,13 +11578,25 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-lazy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", + "integrity": "sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU=", + "dev": true + }, "p-limit": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -9485,41 +11605,72 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.2.0" + "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=", + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, - "pako": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.5.tgz", - "integrity": "sha1-0iBd/ludqK95fnwWPbTR+E5GALw=", + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", "dev": true }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, "param-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-glob": { @@ -9528,10 +11679,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-int-x": { @@ -9539,10 +11690,10 @@ "resolved": "https://registry.npmjs.org/parse-int-x/-/parse-int-x-2.0.0.tgz", "integrity": "sha512-NIMm52gmd1+0qxJK8lV3OZ4zzWpRH1xcz9xCHXl+DNzddwUdS4NEtd7BmTeK7iCIXoaK5e6BoDMHgieH2eNIhg==", "requires": { - "cached-constructors-x": "1.0.2", - "nan-x": "1.0.2", - "to-string-x": "1.4.5", - "trim-left-x": "3.0.0" + "cached-constructors-x": "^1.0.0", + "nan-x": "^1.0.0", + "to-string-x": "^1.4.2", + "trim-left-x": "^3.0.0" } }, "parse-json": { @@ -9551,13 +11702,28 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, "path": { @@ -9566,16 +11732,8 @@ "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", "dev": true, "requires": { - "process": "0.11.10", - "util": "0.10.3" - }, - "dependencies": { - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - } + "process": "^0.11.1", + "util": "^0.10.3" } }, "path-array": { @@ -9583,7 +11741,7 @@ "resolved": "https://registry.npmjs.org/path-array/-/path-array-1.0.1.tgz", "integrity": "sha1-fi8PNfB6IBUSK4aLfqwOssT+wnE=", "requires": { - "array-index": "1.0.0" + "array-index": "^1.0.0" } }, "path-browserify": { @@ -9592,6 +11750,12 @@ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -9631,13 +11795,6 @@ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", "requires": { "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } } }, "path-type": { @@ -9646,7 +11803,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" }, "dependencies": { "pify": { @@ -9658,22 +11815,22 @@ } }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "dev": true, "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { "version": "3.0.0", @@ -9693,7 +11850,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -9702,7 +11859,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "pluralize": { @@ -9717,18 +11874,51 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, "postcss": { "version": "5.2.18", "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.3", - "source-map": "0.5.7", - "supports-color": "3.2.3" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" }, "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "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" + }, + "dependencies": { + "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 + } + } + }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -9741,7 +11931,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -9752,9 +11942,9 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" } }, "postcss-colormin": { @@ -9763,9 +11953,9 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" } }, "postcss-convert-values": { @@ -9774,8 +11964,8 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" } }, "postcss-discard-comments": { @@ -9784,7 +11974,7 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-duplicates": { @@ -9793,7 +11983,7 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-discard-empty": { @@ -9802,7 +11992,7 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" } }, "postcss-discard-overridden": { @@ -9811,7 +12001,7 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.16" } }, "postcss-discard-unused": { @@ -9820,8 +12010,8 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^5.0.14", + "uniqs": "^2.0.0" } }, "postcss-filter-plugins": { @@ -9830,8 +12020,8 @@ "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqid": "4.1.1" + "postcss": "^5.0.4", + "uniqid": "^4.0.0" } }, "postcss-merge-idents": { @@ -9840,9 +12030,9 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" } }, "postcss-merge-longhand": { @@ -9851,7 +12041,7 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-merge-rules": { @@ -9860,23 +12050,11 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "1.0.30000808", - "electron-to-chromium": "1.3.33" - } - } + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" } }, "postcss-message-helpers": { @@ -9891,9 +12069,9 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-minify-gradients": { @@ -9902,8 +12080,8 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" } }, "postcss-minify-params": { @@ -9912,10 +12090,10 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { @@ -9924,10 +12102,10 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" } }, "postcss-modules-extract-imports": { @@ -9936,38 +12114,18 @@ "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "dev": true, "requires": { - "postcss": "6.0.17" + "postcss": "^6.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { - "chalk": "2.3.1", - "source-map": "0.6.1", - "supports-color": "5.2.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -9975,15 +12133,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -9993,39 +12142,19 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.17" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { - "chalk": "2.3.1", - "source-map": "0.6.1", - "supports-color": "5.2.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -10033,15 +12162,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -10051,39 +12171,19 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.17" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { - "chalk": "2.3.1", - "source-map": "0.6.1", - "supports-color": "5.2.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -10091,15 +12191,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -10109,39 +12200,19 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.17" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" - } - }, "postcss": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", - "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { - "chalk": "2.3.1", - "source-map": "0.6.1", - "supports-color": "5.2.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -10149,15 +12220,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -10167,7 +12229,7 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.5" } }, "postcss-normalize-url": { @@ -10176,10 +12238,10 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" } }, "postcss-ordered-values": { @@ -10188,8 +12250,8 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" } }, "postcss-reduce-idents": { @@ -10198,8 +12260,8 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" } }, "postcss-reduce-initial": { @@ -10208,7 +12270,7 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" } }, "postcss-reduce-transforms": { @@ -10217,9 +12279,9 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" } }, "postcss-selector-parser": { @@ -10228,9 +12290,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -10239,10 +12301,10 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" } }, "postcss-unique-selectors": { @@ -10251,9 +12313,9 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { @@ -10268,39 +12330,63 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" } }, - "pouchdb-collections": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-1.0.1.tgz", - "integrity": "sha1-/mOhfal3YRq+98uAJssalVP9g1k=" - }, "prebuild": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/prebuild/-/prebuild-4.5.0.tgz", "integrity": "sha1-KqoN8gY7/4FKgDvU3JT/m2Tl3wA=", "requires": { - "async": "1.5.2", - "execspawn": "1.0.1", - "expand-template": "1.1.0", - "ghreleases": "1.0.7", + "async": "^1.4.0", + "execspawn": "^1.0.1", + "expand-template": "^1.0.0", + "ghreleases": "^1.0.2", "github-from-package": "0.0.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "node-gyp": "3.6.2", - "node-ninja": "1.0.2", - "noop-logger": "0.1.1", - "npmlog": "2.0.4", - "os-homedir": "1.0.2", - "pump": "1.0.3", - "rc": "1.2.5", - "simple-get": "1.4.3", - "tar-fs": "1.16.0", - "tar-stream": "1.5.5", - "xtend": "4.0.1" + "minimist": "^1.1.2", + "mkdirp": "^0.5.1", + "node-gyp": "^3.0.3", + "node-ninja": "^1.0.1", + "noop-logger": "^0.1.0", + "npmlog": "^2.0.0", + "os-homedir": "^1.0.1", + "pump": "^1.0.0", + "rc": "^1.0.3", + "simple-get": "^1.4.2", + "tar-fs": "^1.7.0", + "tar-stream": "^1.2.1", + "xtend": "^4.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "requires": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "npmlog": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "requires": { + "ansi": "~0.3.1", + "are-we-there-yet": "~1.1.2", + "gauge": "~1.2.5" + } + } } }, "prelude-ls": { @@ -10321,14 +12407,26 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", + "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=", + "dev": true + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "dev": true + }, "pretty-format": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.1.0.tgz", - "integrity": "sha512-0HHR5hCmjDGU4sez3w5zRDAAwn7V0vT4SgPiYPZ1XDm5sT3Icb+Bh+fsOP3+Y3UwPjMr7TbRj+L7eQyMkPAxAw==", + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", "dev": true, "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" }, "dependencies": { "ansi-regex": { @@ -10336,15 +12434,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } } } }, @@ -10354,9 +12443,10 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true }, "process-nextick-args": { "version": "2.0.0", @@ -10374,24 +12464,31 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, "promise-map-series": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/promise-map-series/-/promise-map-series-0.2.3.tgz", "integrity": "sha1-wtN3r8kyU/a9A9u3d1XriKsgqEc=", "requires": { - "rsvp": "3.6.2" + "rsvp": "^3.0.14" } }, "prop-types": { - "version": "15.5.10", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", - "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1" + "fbjs": "^0.8.16", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "property-is-enumerable-x": { @@ -10399,8 +12496,8 @@ "resolved": "https://registry.npmjs.org/property-is-enumerable-x/-/property-is-enumerable-x-1.1.0.tgz", "integrity": "sha512-22cKy3w3OpRswU6to9iKWDDlg+F9vF2REcwGlGW23jyLjHb1U/jJEWA44sWupOnkhGfDgotU6Lw+N2oyhNi+5A==", "requires": { - "to-object-x": "1.5.0", - "to-property-key-x": "2.0.2" + "to-object-x": "^1.4.1", + "to-property-key-x": "^2.0.1" } }, "prr": { @@ -10415,16 +12512,16 @@ "dev": true }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "pump": { @@ -10432,8 +12529,31 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.0.tgz", + "integrity": "sha512-UWi0klDoq8xtVzlMRgENV9F7iCTZExaJQSQL187UXsxpk9NnrKGqTqqUNYAKGOzucSOxs2+jUnRNI+rLviPhJg==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "punycode": { @@ -10462,8 +12582,8 @@ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -10483,49 +12603,58 @@ "resolved": "https://registry.npmjs.org/quick-temp/-/quick-temp-0.1.8.tgz", "integrity": "sha1-urAqJCq4+w3XWKPJd2sy+aXZRAg=", "requires": { - "mktemp": "0.4.0", - "rimraf": "2.6.2", - "underscore.string": "3.3.4" + "mktemp": "~0.4.0", + "rimraf": "^2.5.4", + "underscore.string": "~3.3.4" + } + }, + "raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", + "dev": true, + "requires": { + "performance-now": "^2.1.0" + } + }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", + "dev": true + }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, + "requires": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" } }, "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true }, "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, @@ -10535,118 +12664,81 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.0" } }, "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "rc": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz", - "integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" } }, "react": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.2.0.tgz", - "integrity": "sha512-ZmIomM7EE1DvPEnSFAHZn9Vs9zJl5A9H7el0EGTE6ZbW9FKe/14IYAlPbC8iH25YarEQxZL+E8VW7Mi7kfQrDQ==", + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/react/-/react-16.3.2.tgz", + "integrity": "sha512-o5GPdkhciQ3cEph6qgvYB7LTOHw/GB0qRI6ZFNugj49qJCFfgHwVNjZ5u+b7nif4vOeMIOuYj3CeYe2IBD74lg==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.0" - }, - "dependencies": { - "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" - } - } + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-dom": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.2.0.tgz", - "integrity": "sha512-zpGAdwHVn9K0091d+hr+R0qrjoJ84cIBFL2uU60KvWBPfZ7LPSrfqviTxGHWN0sjPZb2hxWzMexwrvJdKePvjg==", + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.2.tgz", + "integrity": "sha512-MMPko3zYncNrz/7gG17wJWUREZDvskZHXOwbttzl0F0L3wDmToyuETuo/r8Y5yvDejwYcRyWI1lvVBjLJWFwKA==", "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "prop-types": "15.6.0" - }, - "dependencies": { - "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" - } - } + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, - "react-native-web": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.1.11.tgz", - "integrity": "sha1-+Gh4fbwOF6TN7mJge6WQ6LgcNpY=", - "requires": { - "animated": "0.2.2", - "array-find-index": "1.0.2", - "babel-runtime": "6.26.0", - "create-react-class": "15.6.3", - "debounce": "1.0.2", - "deep-assign": "2.0.0", - "fbjs": "0.8.16", - "hyphenate-style-name": "1.0.2", - "inline-style-prefixer": "3.0.8", - "normalize-css-color": "1.0.2", - "prop-types": "15.6.1", - "react-timer-mixin": "0.13.3" - }, - "dependencies": { - "prop-types": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", - "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" - } - } + "react-is": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.3.2.tgz", + "integrity": "sha512-ybEM7YOr4yBgFd6w8dJqwxegqZGJNBZl6U27HnGKuTZmDvVrD5quWOK/wAnMywiZzW+Qsk+l4X2c70+thp/A8Q==", + "dev": true + }, + "react-reconciler": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.7.0.tgz", + "integrity": "sha512-50JwZ3yNyMS8fchN+jjWEJOH3Oze7UmhxeoJLn2j6f3NjpfCRbcmih83XTWmzqtar/ivd5f7tvQhvvhism2fgg==", + "dev": true, + "requires": { + "fbjs": "^0.8.16", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0" } }, "react-redux": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.6.tgz", - "integrity": "sha512-8taaaGu+J7PMJQDJrk/xiWEYQmdo3mkXw6wPr3K3LxvXis3Fymiq7c13S+Tpls/AyNUAsoONkU81AP0RA6y6Vw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", + "integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==", "requires": { - "hoist-non-react-statics": "2.3.1", - "invariant": "2.2.2", - "lodash": "4.17.5", - "lodash-es": "4.17.5", - "loose-envify": "1.3.1", - "prop-types": "15.5.10" + "hoist-non-react-statics": "^2.5.0", + "invariant": "^2.0.0", + "lodash": "^4.17.5", + "lodash-es": "^4.17.5", + "loose-envify": "^1.1.0", + "prop-types": "^15.6.0" } }, "react-remarkable": { @@ -10654,7 +12746,7 @@ "resolved": "https://registry.npmjs.org/react-remarkable/-/react-remarkable-1.1.3.tgz", "integrity": "sha512-H4kfiT0Q84OzNAcNfWKDMe1Xhm/7jJAIHV5n4mAff2N0nGpPtRN2M7zhLXaTalD5DNGCGKEq1b4XApZ/1QpKbg==", "requires": { - "remarkable": "1.7.1" + "remarkable": "^1.x" } }, "react-router": { @@ -10662,13 +12754,13 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.2.0.tgz", "integrity": "sha512-DY6pjwRhdARE4TDw7XjxjZsbx9lKmIcyZoZ+SDO7SBJ1KUeWNxT22Kara2AC7u6/c2SYEHlEDLnzBCcNhLE8Vg==", "requires": { - "history": "4.7.2", - "hoist-non-react-statics": "2.3.1", - "invariant": "2.2.2", - "loose-envify": "1.3.1", - "path-to-regexp": "1.7.0", - "prop-types": "15.5.10", - "warning": "3.0.0" + "history": "^4.7.2", + "hoist-non-react-statics": "^2.3.0", + "invariant": "^2.2.2", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.5.4", + "warning": "^3.0.0" } }, "react-router-dom": { @@ -10676,12 +12768,29 @@ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.2.2.tgz", "integrity": "sha512-cHMFC1ZoLDfEaMFoKTjN7fry/oczMgRt5BKfMAkTu5zEuJvUiPp1J8d0eXSVTnBh6pxlbdqDhozunOOLtmKfPA==", "requires": { - "history": "4.7.2", - "invariant": "2.2.2", - "loose-envify": "1.3.1", - "prop-types": "15.5.10", - "react-router": "4.2.0", - "warning": "3.0.0" + "history": "^4.7.2", + "invariant": "^2.2.2", + "loose-envify": "^1.3.1", + "prop-types": "^15.5.4", + "react-router": "^4.2.0", + "warning": "^3.0.0" + } + }, + "react-shadow": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/react-shadow/-/react-shadow-16.2.0.tgz", + "integrity": "sha512-75y6w8LW1fg2BaIiR94sdL+B5YtCWGXPXqrzQNmBXvwOIN4bzqZAIbXagHMBO7rGrJWTqpDReeQoGsuicDJ57g==" + }, + "react-test-renderer": { + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.3.2.tgz", + "integrity": "sha512-lL8WHIpCTMdSe+CRkt0rfMxBkJFyhVrpdQ54BaJRIrXf9aVmbeHbRA8GFRpTvohPN5tPzMabmrzW2PUfWCfWwQ==", + "dev": true, + "requires": { + "fbjs": "^0.8.16", + "object-assign": "^4.1.1", + "prop-types": "^15.6.0", + "react-is": "^16.3.2" } }, "react-timer-mixin": { @@ -10694,16 +12803,17 @@ "resolved": "https://registry.npmjs.org/react-toggle-display/-/react-toggle-display-2.2.0.tgz", "integrity": "sha1-IKZt4j5p1b2XXEuzz+rxh0gmbEk=", "requires": { - "prop-types": "15.5.10" + "prop-types": "^15.5.8" } }, - "react-tooltip": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.3.0.tgz", - "integrity": "sha1-UcCK4CIQdeLEPYPNR/x4RmYS330=", + "read-chunk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", + "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "dev": true, "requires": { - "classnames": "2.2.5", - "prop-types": "15.5.10" + "pify": "^3.0.0", + "safe-buffer": "^5.1.1" } }, "read-file": { @@ -10718,26 +12828,26 @@ "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", "dev": true, "requires": { - "debuglog": "1.0.1", - "graceful-fs": "4.1.11", - "read-package-json": "2.0.12", - "readdir-scoped-modules": "1.0.2", - "semver": "5.3.0", - "slide": "1.1.6", - "util-extend": "1.0.3" + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" } }, "read-package-json": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.12.tgz", - "integrity": "sha512-m7/I0+tP6D34EVvSlzCtuVA4D/dHL6OpLcn2e4XVP5X57pCKGUy1JjRSBVKHWpB+vUU91sL85h84qX0MdXzBSw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", + "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", "dev": true, "requires": { - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "json-parse-better-errors": "1.0.1", - "normalize-package-data": "2.4.0", - "slash": "1.0.0" + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" } }, "read-pkg": { @@ -10746,9 +12856,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -10757,30 +12867,28 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", - "integrity": "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" } } }, @@ -10790,10 +12898,10 @@ "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", "dev": true, "requires": { - "debuglog": "1.0.1", - "dezalgo": "1.0.3", - "graceful-fs": "4.1.11", - "once": "1.4.0" + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" } }, "readdirp": { @@ -10802,27 +12910,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.4", - "set-immediate-shim": "1.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "readline": { @@ -10836,27 +12927,16 @@ "integrity": "sha512-XJtlRJ9jf0E1H1SLeJyQ9PGzQD7S65h1pRXEcAeK48doKOnKxcgPeNohJvD5u/2sI9J1oke6E8bZHS/fmW1UiQ==", "dev": true, "requires": { - "util.promisify": "1.0.0" + "util.promisify": "^1.0.0" } }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "ast-types": "0.9.6", - "esprima": "3.1.3", - "private": "0.1.8", - "source-map": "0.5.7" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - } + "resolve": "^1.1.6" } }, "redent": { @@ -10865,8 +12945,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "reduce-css-calc": { @@ -10875,17 +12955,9 @@ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" } }, "reduce-function-call": { @@ -10894,15 +12966,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "0.4.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "balanced-match": "^0.4.2" } }, "redux": { @@ -10910,10 +12974,10 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", "requires": { - "lodash": "4.17.5", - "lodash-es": "4.17.5", - "loose-envify": "1.3.1", - "symbol-observable": "1.2.0" + "lodash": "^4.2.1", + "lodash-es": "^4.2.1", + "loose-envify": "^1.1.0", + "symbol-observable": "^1.0.3" }, "dependencies": { "symbol-observable": { @@ -10923,6 +12987,15 @@ } } }, + "redux-mock-store": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.1.tgz", + "integrity": "sha512-B+iZ98ESHw4EAWVLKUknQlop1OdLKOayGRmd6KavNtC0zoSsycD8hTt0hEr1eUTw2gmYJOdfBY5QAgZweTUcLQ==", + "dev": true, + "requires": { + "lodash.isplainobject": "^4.0.6" + } + }, "redux-thunk": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.2.0.tgz", @@ -10934,18 +13007,18 @@ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" }, "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "regenerator-transform": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-cache": { @@ -10954,17 +13027,34 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -10977,7 +13067,14 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } } }, "relateurl": { @@ -10991,8 +13088,29 @@ "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.1.tgz", "integrity": "sha1-qspJchALZqZCpjoQIcpLrBvjv/Y=", "requires": { - "argparse": "0.1.16", - "autolinker": "0.15.3" + "argparse": "~0.1.15", + "autolinker": "~0.15.0" + }, + "dependencies": { + "argparse": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "requires": { + "underscore": "~1.7.0", + "underscore.string": "~2.4.0" + } + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + }, + "underscore.string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" + } } }, "remove-trailing-separator": { @@ -11017,7 +13135,7 @@ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-comments-x": { @@ -11025,36 +13143,128 @@ "resolved": "https://registry.npmjs.org/replace-comments-x/-/replace-comments-x-2.0.0.tgz", "integrity": "sha512-+vMP4jqU+8HboLWms6YMNEiaZG5hh1oR6ENCnGYDF/UQ7aYiJUK/8tcl3+KZAHRCKKa3gqzrfiarlUBHQSgRlg==", "requires": { - "require-coercible-to-string-x": "1.0.2", - "to-string-x": "1.4.5" + "require-coercible-to-string-x": "^1.0.0", + "to-string-x": "^1.4.2" } }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, "request": { - "version": "2.80.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.80.0.tgz", - "integrity": "sha1-jMFi1215OBze/dNQXXa4C2BYm9A=", - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + }, + "dependencies": { + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.x.x" + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.x.x" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.x.x" + } + } + } + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.x.x" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + } } }, "request-promise-core": { @@ -11063,7 +13273,7 @@ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", "dev": true, "requires": { - "lodash": "4.17.5" + "lodash": "^4.13.1" } }, "request-promise-native": { @@ -11073,8 +13283,8 @@ "dev": true, "requires": { "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.3.3" + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" } }, "require-coercible-to-string-x": { @@ -11082,8 +13292,8 @@ "resolved": "https://registry.npmjs.org/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.2.tgz", "integrity": "sha512-GZ3BSCL0n/zhho8ITganW9FGPh0Kxhq71nCjck8Qau/30Wf4Po8a3XpQdzEMFiXCwZ/0m0E3lKSdSG8gkcIofQ==", "requires": { - "require-object-coercible-x": "1.4.3", - "to-string-x": "1.4.5" + "require-object-coercible-x": "^1.4.3", + "to-string-x": "^1.4.5" } }, "require-directory": { @@ -11103,7 +13313,7 @@ "resolved": "https://registry.npmjs.org/require-object-coercible-x/-/require-object-coercible-x-1.4.3.tgz", "integrity": "sha512-5wEaS+NIiU5HLJQTqBQ+6XHtX7yplUS374j/H/nRDlc7rMWfENqp026jnUHWAOCZ+ekixkXuFHEnTF28oqqVLA==", "requires": { - "is-nil-x": "1.4.2" + "is-nil-x": "^1.4.2" } }, "require-uncached": { @@ -11112,8 +13322,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "requizzle": { @@ -11122,7 +13332,7 @@ "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", "dev": true, "requires": { - "underscore": "1.6.0" + "underscore": "~1.6.0" }, "dependencies": { "underscore": { @@ -11134,11 +13344,11 @@ } }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-cwd": { @@ -11147,7 +13357,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" }, "dependencies": { "resolve-from": { @@ -11158,6 +13368,16 @@ } } }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", @@ -11169,22 +13389,43 @@ "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "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.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -11192,17 +13433,17 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "rollup": { @@ -11210,7 +13451,17 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.36.4.tgz", "integrity": "sha1-oiRJTFOGwdc9OPe7hvafXrARo9I=", "requires": { - "source-map-support": "0.4.18" + "source-map-support": "^0.4.0" + } + }, + "rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "dev": true, + "requires": { + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" } }, "rsvp": { @@ -11224,7 +13475,16 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" } }, "rw": { @@ -11244,21 +13504,36 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "rxjs": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", - "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "version": "5.5.10", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", + "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", + "dev": true, "requires": { "symbol-observable": "1.0.1" } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "samsam": { "version": "1.3.0", @@ -11267,97 +13542,359 @@ "dev": true }, "sane": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/sane/-/sane-2.4.1.tgz", - "integrity": "sha512-fW9svvNd81XzHDZyis9/tEY1bZikDGryy8Hi1BErPyNPYv47CdLseUN+tI5FBHWXEENRtj1SWtX/jBnggLaP0w==", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "exec-sh": "0.2.1", - "fb-watchman": "2.0.0", - "fsevents": "1.1.3", - "minimatch": "3.0.4", - "minimist": "1.2.0", - "walker": "1.0.7", - "watch": "0.18.0" - } - }, - "sanitize-filename": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", - "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", - "requires": { - "truncate-utf8-bytes": "1.0.2" - } - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.5", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", + "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "capture-exit": "^1.2.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.3", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.18.0" }, "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "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.1.0", - "pinkie-promise": "2.0.1" - } + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "sanitize-filename": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", + "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "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" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "os-locale": { + "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } }, "path-exists": { @@ -11366,7 +13903,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-type": { @@ -11375,9 +13912,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { @@ -11392,9 +13929,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -11403,19 +13940,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "strip-bom": { @@ -11424,7 +13950,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "which-module": { @@ -11439,19 +13965,19 @@ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" } }, "yargs-parser": { @@ -11460,33 +13986,22 @@ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "^3.0.0" } } } }, "sass-loader": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz", - "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz", + "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", "dev": true, "requires": { - "async": "2.6.0", - "clone-deep": "0.3.0", - "loader-utils": "1.1.0", - "lodash.tail": "4.1.1", - "pify": "3.0.0" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.5" - } - } + "clone-deep": "^2.0.1", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "neo-async": "^2.5.0", + "pify": "^3.0.0" } }, "sax": { @@ -11500,17 +14015,23 @@ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", "dev": true, "requires": { - "ajv": "5.5.2" + "ajv": "^5.0.0" } }, + "scoped-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", + "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=", + "dev": true + }, "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, "requires": { - "js-base64": "2.4.3", - "source-map": "0.4.4" + "js-base64": "^2.1.8", + "source-map": "^0.4.2" }, "dependencies": { "source-map": { @@ -11519,26 +14040,37 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } }, + "seamless-immutable": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/seamless-immutable/-/seamless-immutable-7.1.3.tgz", + "integrity": "sha512-ODZawMxNf7n0Ufec01tvaD/CeeYEf9G+fjYc7Q6qAJytTWha1bdtNkjh4Oei1GeYakMF3S+mQMhZv9l7OtcORg==", + "dev": true + }, "seed-random": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=" }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-immediate-shim": { "version": "1.0.1", @@ -11546,46 +14078,59 @@ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "dev": true }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "sha.js": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", - "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", "dev": true, "requires": { - "is-extendable": "0.1.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", - "mixin-object": "2.0.1" + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" }, "dependencies": { "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } } @@ -11596,7 +14141,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -11605,6 +14150,17 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "shelljs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", + "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", @@ -11614,17 +14170,16 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-get": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", "requires": { - "once": "1.4.0", - "unzip-response": "1.0.2", - "xtend": "4.0.1" + "once": "^1.3.1", + "unzip-response": "^1.0.0", + "xtend": "^4.0.0" } }, "simple-mime": { @@ -11638,64 +14193,29 @@ "integrity": "sha512-3GoUxxnGznTByzfHWroolVvRQ9/OXISUKjJYcBioLRDnGX7oJSkepxmvUyBIBDZaU1WoWMEIa9WxCo/tz96bEQ==" }, "sinon": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.3.0.tgz", - "integrity": "sha512-pmf05hFgEZUS52AGJcsVjOjqAyJW2yo14cOwVYvzCyw7+inv06YXkLyW75WG6X6p951lzkoKh51L2sNbR9CDvw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz", + "integrity": "sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "diff": "3.4.0", - "lodash.get": "4.4.2", - "lolex": "2.3.2", - "nise": "1.2.5", - "supports-color": "5.2.0", - "type-detect": "4.0.8" - }, - "dependencies": { - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "@sinonjs/formatio": "^2.0.0", + "diff": "^3.1.0", + "lodash.get": "^4.4.2", + "lolex": "^2.2.0", + "nise": "^1.2.0", + "supports-color": "^5.1.0", + "type-detect": "^4.0.5" } }, "sinon-chrome": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sinon-chrome/-/sinon-chrome-2.2.4.tgz", - "integrity": "sha1-0e6weYECML2oNg/69kWAI8Jl0JY=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sinon-chrome/-/sinon-chrome-2.3.1.tgz", + "integrity": "sha1-QBOPS21aEPIR9frwhs2eiHkzhCY=", "dev": true, "requires": { - "lodash": "4.17.5", - "sinon": "2.4.1", - "urijs": "1.19.1" - }, - "dependencies": { - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", - "dev": true - }, - "sinon": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz", - "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==", - "dev": true, - "requires": { - "diff": "3.4.0", - "formatio": "1.2.0", - "lolex": "1.6.0", - "native-promise-only": "0.8.1", - "path-to-regexp": "1.7.0", - "samsam": "1.3.0", - "text-encoding": "0.6.4", - "type-detect": "4.0.8" - } - } + "lodash": "^4.16.3", + "sinon": "^4.4.2", + "urijs": "^1.18.2" } }, "slash": { @@ -11709,7 +14229,7 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" } }, "slide": { @@ -11718,891 +14238,352 @@ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.16.3" + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "is-plain-obj": "1.1.0" - } - }, - "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "requires": { - "source-map": "0.5.7" - } - }, - "spanan": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/spanan/-/spanan-1.3.0.tgz", - "integrity": "sha1-LMiSBhrmWC4jAD1MTkYiTDHoWm0=" - }, - "spark-md5": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", - "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } }, - "spdx": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/spdx/-/spdx-0.5.1.tgz", - "integrity": "sha1-02wnUIi0jXWpBGzUSoOM5LUzmZg=", + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "spdx-exceptions": "1.0.5", - "spdx-license-ids": "1.2.2" + "kind-of": "^3.2.0" } }, - "spdx-compare": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-0.1.2.tgz", - "integrity": "sha1-sGrz6jSvdDfZGp9Enq8tLpPDyPs=", - "dev": true, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "requires": { - "spdx-expression-parse": "1.0.4", - "spdx-ranges": "1.0.1" + "hoek": "2.x.x" + }, + "dependencies": { + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } } }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "is-plain-obj": "^1.0.0" } }, - "spdx-exceptions": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.5.tgz", - "integrity": "sha1-nSGsTaS9tx0GD7dOWmdTHQMsu6Y=", - "dev": true - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", "dev": true }, - "spdx-ranges": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-1.0.1.tgz", - "integrity": "sha1-D07se46kjtIC43S7iULo0Y3AET4=", - "dev": true + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, - "spdx-satisfies": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-0.1.3.tgz", - "integrity": "sha1-Z6HydOYRXUquKK/kdNt2FkvhC9w=", + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "spdx-compare": "0.1.2", - "spdx-expression-parse": "1.0.4" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "sprintf-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", - "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=" + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "^0.5.6" + } }, - "sqlite3": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.13.tgz", - "integrity": "sha512-JxXKPJnkZ6NuHRojq+g2WXWBt3M1G9sjZaYiHEWSTGijDM3cwju/0T2XbWqMXFmPqDgw+iB7zKQvnns4bvzXlw==", + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spanan": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/spanan/-/spanan-1.3.0.tgz", + "integrity": "sha1-LMiSBhrmWC4jAD1MTkYiTDHoWm0=" + }, + "spark-md5": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz", + "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=" + }, + "spdx": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/spdx/-/spdx-0.5.1.tgz", + "integrity": "sha1-02wnUIi0jXWpBGzUSoOM5LUzmZg=", + "dev": true, "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.38" + "spdx-exceptions": "^1.0.0", + "spdx-license-ids": "^1.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.8", - "bundled": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "bundled": true - }, - "co": { - "version": "4.6.0", - "bundled": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true - } - } - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true - }, - "extsprintf": { - "version": "1.3.0", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { + "spdx-exceptions": { "version": "1.0.5", - "bundled": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true - }, - "jsprim": { - "version": "1.4.1", - "bundled": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true - } - } - }, - "mime-db": { - "version": "1.30.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.17", - "bundled": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true - }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=" - }, - "node-pre-gyp": { - "version": "0.6.38", - "bundled": true, - "requires": { - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.2", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.4.1", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true - }, - "qs": { - "version": "6.4.0", - "bundled": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true - } - } - }, - "readable-stream": { - "version": "2.3.3", - "bundled": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true - }, - "semver": { - "version": "5.4.1", - "bundled": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.1", - "bundled": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "bundled": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "requires": { - "debug": "2.6.9", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.3.3", - "rimraf": "2.6.2", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.3", - "bundled": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.1.0", - "bundled": true - }, - "verror": { - "version": "1.10.0", - "bundled": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true - } - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "requires": { - "string-width": "1.0.2" - } + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.5.tgz", + "integrity": "sha1-nSGsTaS9tx0GD7dOWmdTHQMsu6Y=", + "dev": true }, - "wrappy": { - "version": "1.0.2", - "bundled": true + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true } } }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "spdx-compare": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-0.1.2.tgz", + "integrity": "sha1-sGrz6jSvdDfZGp9Enq8tLpPDyPs=", + "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "spdx-expression-parse": "^1.0.0", + "spdx-ranges": "^1.0.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + } + } + }, + "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 + }, + "spdx-ranges": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-1.0.1.tgz", + "integrity": "sha1-D07se46kjtIC43S7iULo0Y3AET4=", + "dev": true + }, + "spdx-satisfies": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-0.1.3.tgz", + "integrity": "sha1-Z6HydOYRXUquKK/kdNt2FkvhC9w=", + "dev": true, + "requires": { + "spdx-compare": "^0.1.2", + "spdx-expression-parse": "^1.0.0" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true } } }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, "stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", "dev": true }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "readable-stream": "2.3.4" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "is-descriptor": "^0.1.0" } } } }, + "stdout-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", @@ -12615,55 +14596,46 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", - "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz", + "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.4", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "stream-to-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", + "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", + "dev": true, + "requires": { + "any-observable": "^0.2.0" } }, "strict-uri-encode": { @@ -12678,8 +14650,8 @@ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", "dev": true, "requires": { - "astral-regex": "1.0.0", - "strip-ansi": "4.0.0" + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -12694,44 +14666,43 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "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, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^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-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "ansi-regex": "3.0.0" + "number-is-nan": "^1.0.0" } } } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -12744,7 +14715,14 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } } }, "strip-bom": { @@ -12753,6 +14731,27 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "strip-bom-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", + "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", + "dev": true, + "requires": { + "first-chunk-stream": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -12765,7 +14764,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "strip-json-comments": { @@ -12779,22 +14778,26 @@ "integrity": "sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "loader-utils": "^1.0.2", + "schema-utils": "^0.3.0" } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "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" + } }, "svg-url-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svg-url-loader/-/svg-url-loader-2.3.1.tgz", - "integrity": "sha1-KH7TEf/+SbhTzTuur8pWP6gDu/c=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/svg-url-loader/-/svg-url-loader-2.3.2.tgz", + "integrity": "sha1-3YaybBn+O5FPBOoQ7zlZTq3gRGQ=", "dev": true, "requires": { - "file-loader": "1.1.6", + "file-loader": "1.1.11", "loader-utils": "1.1.0" } }, @@ -12804,13 +14807,31 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + } } }, "symbol-observable": { @@ -12829,39 +14850,12 @@ "resolved": "https://registry.npmjs.org/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz", "integrity": "sha512-W31+GLiBmU/ZR02Ii0mVZICuNEN9daZ63xZMPDsYgPgNjMtg+atqLEGI7PPI936jYSQZxoLb/63xos8Adrx4Eg==" }, - "sync-promise": { - "version": "git+https://github.com/brettz9/sync-promise.git#25845a49a00aa2d2c985a5149b97c86a1fcdc75a" - }, "systemjs": { "version": "0.19.47", "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-0.19.47.tgz", "integrity": "sha1-yMk5NxgPP1SBx2nNJyB2P7SjHG8=", "requires": { - "when": "3.7.8" - } - }, - "systemjs-builder": { - "version": "0.16.12", - "resolved": "https://registry.npmjs.org/systemjs-builder/-/systemjs-builder-0.16.12.tgz", - "integrity": "sha512-E+INOPzUsi1VpXat3GYDKl1Xap3Acv3Bw6KmRC9TdpfdJnTk6Jh5K07DdM8P+LEPXZaLZvTaaN/5q2i+1FD1vA==", - "requires": { - "babel-core": "6.26.0", - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-amd-system-wrapper": "0.3.7", - "babel-plugin-transform-cjs-system-wrapper": "0.6.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-global-system-wrapper": "0.3.4", - "babel-plugin-transform-system-register": "0.0.1", - "bluebird": "3.5.1", - "data-uri-to-buffer": "0.0.4", - "es6-template-strings": "2.0.1", - "glob": "7.1.2", - "mkdirp": "0.5.1", - "rollup": "0.36.4", - "source-map": "0.5.7", - "systemjs": "0.19.47", - "traceur": "0.0.105", - "uglify-js": "2.8.29" + "when": "^3.7.5" } }, "table": { @@ -12870,41 +14864,37 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.3.1", - "lodash": "4.17.5", + "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" + "string-width": "^2.1.1" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.1" - } + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, - "chalk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", - "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "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": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "5.2.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, - "supports-color": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", - "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "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": { - "has-flag": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -12914,7 +14904,7 @@ "resolved": "https://registry.npmjs.org/tablesorter/-/tablesorter-2.29.2.tgz", "integrity": "sha512-yq9CvkPlekNeyjp/7aNp1S7/JZURBhClnY9h4R0W7LeYgaQ/rl5l3iwfHpAsyIRnOl70miCw9ti7/MM4viwCog==", "requires": { - "jquery": "2.2.4" + "jquery": ">=1.2.6" } }, "taffydb": { @@ -12924,9 +14914,9 @@ "dev": true }, "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", "dev": true }, "tar": { @@ -12934,83 +14924,356 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-fs": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.0.tgz", - "integrity": "sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.2.tgz", + "integrity": "sha512-LdknWjPEiZC1nOBwhv0JBzfJBGPJar08dZg2rwZe0ZTLQoRGEzgrl7vF3qUEkCHpI/wN9e7RyCuDhMsJUCLPPQ==", "requires": { - "chownr": "1.0.1", - "mkdirp": "0.5.1", - "pump": "1.0.3", - "tar-stream": "1.5.5" + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" } }, "tar-stream": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", - "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.0.tgz", + "integrity": "sha512-lh2iAPG/BHNmN6WB9Ybdynk9rEJ5GD/dy4zscHmVlwa1dq2tpE+BH78i5vjYwYVWEaOXGBjzxr89aVACF17Cpw==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.1.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.0.0", + "to-buffer": "^1.1.0", + "xtend": "^4.0.0" + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.1", - "readable-stream": "2.3.5", - "xtend": "4.0.1" + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" }, "dependencies": { - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + } + } + }, + "test-exclude": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", + "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^3.1.8", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } - } - } - }, - "test-exclude": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.0.tgz", - "integrity": "sha512-8hMFzjxbPv6xSlwGhXSvOMJ/vTy3bkng+2pxmf6E1z6VF7I9nIyNfvHtaw+NBPgvz647gADBbMSbwLfZYppT/w==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" - }, - "dependencies": { + }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "path-exists": { @@ -13019,7 +15282,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-type": { @@ -13028,9 +15291,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { @@ -13045,9 +15308,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -13056,8 +15319,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "strip-bom": { @@ -13066,7 +15329,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -13104,33 +15367,23 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { - "readable-stream": "2.3.5", - "xtend": "4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - } + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tiny-emitter": { @@ -13138,24 +15391,21 @@ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.0.tgz", "integrity": "sha1-utMnrbGAS0KiMa+nQVMr2ITNCa0=" }, - "tiny-queue": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz", - "integrity": "sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY=" - }, "tldjs": { - "version": "https://github.com/remusao/tld.js/releases/download/v2.2.0/tldjs-2.2.0.tgz", - "integrity": "sha512-ZqE0+8haN/FXKFhCi5q+tcGEEolLbNRp1jg1DZf651bQUZ9JakYjZAglhdZw/wcGjni0xEGM2P0VwlLeBjlmHw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tldjs/-/tldjs-2.3.1.tgz", + "integrity": "sha512-W/YVH/QczLUxVjnQhFC61Iq232NWu3TqDdO0S/MtXVz4xybejBov4ud+CIwN9aYqjOecEqIy0PscGkwpG9ZyTw==", "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "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" + "os-tmpdir": "~1.0.2" } }, "tmpl": { @@ -13175,6 +15425,11 @@ "resolved": "https://registry.npmjs.org/to-boolean-x/-/to-boolean-x-1.0.3.tgz", "integrity": "sha512-kQiMyJUgFprL8J+0CfgJuaSFKJMs3EvFe27/6aj/hVzVZT0HY4aA1QjPldLNxzBmjhLcapp7CctYHuD8QqtS3g==" }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", @@ -13185,10 +15440,10 @@ "resolved": "https://registry.npmjs.org/to-integer-x/-/to-integer-x-3.0.0.tgz", "integrity": "sha512-794L2Lpwjtynm7RxahJi2YdbRY75gTxUW27TMuN26UgwPkmJb/+HPhkFEFbz+E4vNoiP0dxq5tq5fkXoXLaK/w==", "requires": { - "is-finite-x": "3.0.4", - "is-nan-x": "1.0.3", - "math-sign-x": "3.0.0", - "to-number-x": "2.0.0" + "is-finite-x": "^3.0.2", + "is-nan-x": "^1.0.1", + "math-sign-x": "^3.0.0", + "to-number-x": "^2.0.0" } }, "to-number-x": { @@ -13196,11 +15451,20 @@ "resolved": "https://registry.npmjs.org/to-number-x/-/to-number-x-2.0.0.tgz", "integrity": "sha512-lGOnCoccUoSzjZ/9Uen8TC4+VFaQcFGhTroWTv2tYWxXgyJV1zqAZ8hEIMkez/Eo790fBMOjidTnQ/OJSCvAoQ==", "requires": { - "cached-constructors-x": "1.0.2", - "nan-x": "1.0.2", - "parse-int-x": "2.0.0", - "to-primitive-x": "1.1.0", - "trim-x": "3.0.0" + "cached-constructors-x": "^1.0.0", + "nan-x": "^1.0.0", + "parse-int-x": "^2.0.0", + "to-primitive-x": "^1.1.0", + "trim-x": "^3.0.0" + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" } }, "to-object-x": { @@ -13208,8 +15472,8 @@ "resolved": "https://registry.npmjs.org/to-object-x/-/to-object-x-1.5.0.tgz", "integrity": "sha512-AKn5GQcdWky+s20vjWkt+Wa6y3dxQH3yQyMBhOfBOPldUwqwhgvlqcIg5H092ntNc+TX8/Cxzs1kMHH19pyCnA==", "requires": { - "cached-constructors-x": "1.0.2", - "require-object-coercible-x": "1.4.3" + "cached-constructors-x": "^1.0.0", + "require-object-coercible-x": "^1.4.1" } }, "to-primitive-x": { @@ -13217,14 +15481,14 @@ "resolved": "https://registry.npmjs.org/to-primitive-x/-/to-primitive-x-1.1.0.tgz", "integrity": "sha512-gyMY0gi3wjK3e4MUBKqv9Zl8QGcWguIkaUr2VJmoBEsOpDcpDZSEyljR773eVG4maS48uX7muLkoQoh/BA82OQ==", "requires": { - "has-symbol-support-x": "1.4.2", - "is-date-object": "1.0.1", - "is-function-x": "3.3.0", - "is-nil-x": "1.4.2", - "is-primitive": "2.0.0", - "is-symbol": "1.0.1", - "require-object-coercible-x": "1.4.3", - "validate.io-undefined": "1.0.3" + "has-symbol-support-x": "^1.4.1", + "is-date-object": "^1.0.1", + "is-function-x": "^3.2.0", + "is-nil-x": "^1.4.1", + "is-primitive": "^2.0.0", + "is-symbol": "^1.0.1", + "require-object-coercible-x": "^1.4.1", + "validate.io-undefined": "^1.0.3" } }, "to-property-key-x": { @@ -13232,9 +15496,42 @@ "resolved": "https://registry.npmjs.org/to-property-key-x/-/to-property-key-x-2.0.2.tgz", "integrity": "sha512-YISLpZFYIazNm0P8hLsKEEUEZ3m8U3+eDysJZqTu3+B9tQp+2TrMpaEGT8Agh4fZ5LSoums60/glNEzk5ozqrg==", "requires": { - "has-symbol-support-x": "1.4.2", - "to-primitive-x": "1.1.0", - "to-string-x": "1.4.5" + "has-symbol-support-x": "^1.4.1", + "to-primitive-x": "^1.1.0", + "to-string-x": "^1.4.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } } }, "to-string-symbols-supported-x": { @@ -13242,9 +15539,9 @@ "resolved": "https://registry.npmjs.org/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.2.tgz", "integrity": "sha512-3MRqhIhSNVDsVAk4M6WNcuBZrAQe54W13xrXX6RzxXS+pA4nj6DQ96RegQS5z9BSNyYbFsBsPvMVDIpP+a/5RA==", "requires": { - "cached-constructors-x": "1.0.2", - "has-symbol-support-x": "1.4.2", - "is-symbol": "1.0.1" + "cached-constructors-x": "^1.0.2", + "has-symbol-support-x": "^1.4.2", + "is-symbol": "^1.0.1" } }, "to-string-tag-x": { @@ -13252,8 +15549,8 @@ "resolved": "https://registry.npmjs.org/to-string-tag-x/-/to-string-tag-x-1.4.3.tgz", "integrity": "sha512-5+0EZ6dOVt/XArXmkooxPzWxmOR081HM/uXitUow7h11WYg5pPo15uYqDWuqO7ZY+O3Atn/dG26wcJCK+mFevg==", "requires": { - "lodash.isnull": "3.0.0", - "validate.io-undefined": "1.0.3" + "lodash.isnull": "^3.0.0", + "validate.io-undefined": "^1.0.3" } }, "to-string-x": { @@ -13261,30 +15558,32 @@ "resolved": "https://registry.npmjs.org/to-string-x/-/to-string-x-1.4.5.tgz", "integrity": "sha512-5xzlZDyDa9BUWNjNzZzHgKQ95PnV7qjvEhbqpFaj1ixaHgfJXOFaa3xdMJ+WLYd4hhaMJaxt8Pt5uKaWXfruXA==", "requires": { - "cached-constructors-x": "1.0.2", - "is-symbol": "1.0.1" + "cached-constructors-x": "^1.0.0", + "is-symbol": "^1.0.1" } }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, "requires": { - "punycode": "2.1.0" + "punycode": "^2.1.0" }, "dependencies": { "punycode": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true } } }, @@ -13293,23 +15592,31 @@ "resolved": "https://registry.npmjs.org/traceur/-/traceur-0.0.105.tgz", "integrity": "sha1-XPne6D1rd4YcPWxE1ThZrterBHk=", "requires": { - "commander": "2.9.0", - "glob": "5.0.15", - "rsvp": "3.6.2", - "semver": "4.3.6", - "source-map-support": "0.2.10" + "commander": "2.9.x", + "glob": "5.0.x", + "rsvp": "^3.0.13", + "semver": "^4.3.3", + "source-map-support": "~0.2.8" }, "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "semver": { @@ -13322,7 +15629,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "source-map-support": { @@ -13340,11 +15647,11 @@ "resolved": "https://registry.npmjs.org/tree-sync/-/tree-sync-1.2.2.tgz", "integrity": "sha1-LPdrhYn1n/7bWNtaOsfLAT0BWLc=", "requires": { - "debug": "2.6.4", - "fs-tree-diff": "0.5.7", - "mkdirp": "0.5.1", - "quick-temp": "0.1.8", - "walk-sync": "0.2.7" + "debug": "^2.2.0", + "fs-tree-diff": "^0.5.6", + "mkdirp": "^0.5.1", + "quick-temp": "^0.1.5", + "walk-sync": "^0.2.7" }, "dependencies": { "walk-sync": { @@ -13352,16 +15659,16 @@ "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.2.7.tgz", "integrity": "sha1-tJvk7mhnZXrrc2l4tWop0Q+jmWk=", "requires": { - "ensure-posix-path": "1.0.2", - "matcher-collection": "1.0.5" + "ensure-posix-path": "^1.0.0", + "matcher-collection": "^1.0.0" } } } }, "treeify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.0.1.tgz", - "integrity": "sha1-abPNAiAioWhCTnz6HO1EyTnT6y8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", "dev": true }, "trim-left-x": { @@ -13369,9 +15676,9 @@ "resolved": "https://registry.npmjs.org/trim-left-x/-/trim-left-x-3.0.0.tgz", "integrity": "sha512-+m6cqkppI+CxQBTwWEZliOHpOBnCArGyMnS1WCLb6IRgukhTkiQu/TNEN5Lj2eM9jk8ewJsc7WxFZfmwNpRXWQ==", "requires": { - "cached-constructors-x": "1.0.2", - "require-coercible-to-string-x": "1.0.2", - "white-space-x": "3.0.1" + "cached-constructors-x": "^1.0.0", + "require-coercible-to-string-x": "^1.0.0", + "white-space-x": "^3.0.0" } }, "trim-newlines": { @@ -13390,9 +15697,9 @@ "resolved": "https://registry.npmjs.org/trim-right-x/-/trim-right-x-3.0.0.tgz", "integrity": "sha512-iIqEsWEbWVodqdixJHi4FoayJkUxhoL4AvSNGp4FF4FfQKRPGizt8++/RnyC9od75y7P/S6EfONoVqP+NddiKA==", "requires": { - "cached-constructors-x": "1.0.2", - "require-coercible-to-string-x": "1.0.2", - "white-space-x": "3.0.1" + "cached-constructors-x": "^1.0.0", + "require-coercible-to-string-x": "^1.0.0", + "white-space-x": "^3.0.0" } }, "trim-x": { @@ -13400,8 +15707,8 @@ "resolved": "https://registry.npmjs.org/trim-x/-/trim-x-3.0.0.tgz", "integrity": "sha512-w8s38RAUScQ6t3XqMkS75iz5ZkIYLQpVnv2lp3IuTS36JdlVzC54oe6okOf4Wz3UH4rr3XAb2xR3kR5Xei82fw==", "requires": { - "trim-left-x": "3.0.0", - "trim-right-x": "3.0.0" + "trim-left-x": "^3.0.0", + "trim-right-x": "^3.0.0" } }, "true-case-path": { @@ -13410,7 +15717,7 @@ "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", "dev": true, "requires": { - "glob": "6.0.4" + "glob": "^6.0.4" }, "dependencies": { "glob": { @@ -13419,11 +15726,11 @@ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -13433,7 +15740,7 @@ "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", "requires": { - "utf8-byte-length": "1.0.4" + "utf8-byte-length": "^1.0.1" } }, "tty-browserify": { @@ -13459,7 +15766,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { @@ -13479,35 +15786,27 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "typeson": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/typeson/-/typeson-5.7.1.tgz", - "integrity": "sha512-tVC1gcpUJl9R2uPE6xWDqeZ5+bLYI9deY5MyvDnSTcQVggktcqir67PmjTaq8TWC0WHPsLTLe0vMYtKAo8NzVQ==" - }, - "typeson-registry": { - "version": "1.0.0-alpha.18", - "resolved": "https://registry.npmjs.org/typeson-registry/-/typeson-registry-1.0.0-alpha.18.tgz", - "integrity": "sha512-/iqkwdB7DbmVHN31l6Y08m/BJHB0ZlyuyaDudmQVenU94QxSd8Bf+8UGqq0/LEWMRstnQC0Cbmn9qvcOdevIRQ==", - "requires": { - "base64-arraybuffer-es6": "0.3.1", - "typeson": "5.7.1", - "uuid": "3.2.1", - "whatwg-url": "6.4.0" - } - }, "ua-parser-js": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" + "version": "0.7.18", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", + "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==" }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "version": "3.3.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.24.tgz", + "integrity": "sha512-hS7+TDiqIqvWScCcKRybCQzmMnEzJ4ryl9ErRmW4GFyG48p0/dKZiy/5mVLbsFzU8CCnCgQdxMiJzZythvLzCg==", + "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "commander": "~2.15.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "uglify-to-browserify": { @@ -13517,26 +15816,83 @@ "optional": true }, "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", + "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", + "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0", + "uri-js": "^4.2.1" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.0.tgz", + "integrity": "sha512-4IV1DSSxC1QK48j9ONFK1MoIAKKkbE8i7u55w2R6IqBqbT7A/iG7aZBCR2Bi8piF0Uz+i/MG1aeqLwl/5vqF+A==" }, "underscore-contrib": { "version": "0.3.0", @@ -13560,14 +15916,44 @@ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", "requires": { - "sprintf-js": "1.1.1", - "util-deprecate": "1.0.2" + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" } }, - "unicode-9.0.0": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/unicode-9.0.0/-/unicode-9.0.0-0.7.4.tgz", - "integrity": "sha1-bf5a3TXC6m6E3YwnK22zGKXkDp4=" + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } }, "uniq": { "version": "1.0.1", @@ -13581,7 +15967,7 @@ "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", "dev": true, "requires": { - "macaddress": "0.2.8" + "macaddress": "^0.2.8" } }, "uniqs": { @@ -13590,11 +15976,75 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "universalify": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, "untildify": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", @@ -13605,18 +16055,47 @@ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" }, + "upath": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.5.tgz", + "integrity": "sha512-qbKn90aDQ0YEwvXoLqj0oiuUYroLX2lVHZ+b+xwjozFasAOC4GneDq5+OaIG5Zj+jFmbz/uO+f7a9qxjktJQww==", + "dev": true + }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", "dev": true }, + "uri-js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.1.tgz", + "integrity": "sha512-jpKCA3HjsBfSDOEgxRDAxQCNyHfCPSbq57PqCkd3gAyBuPb3IWxw54EHncqESznIdqSetHfw3D7ylThu2Kcc9A==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, "urijs": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==", "dev": true }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -13641,9 +16120,26 @@ "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "mime": "1.6.0", - "schema-utils": "0.3.0" + "loader-utils": "^1.0.2", + "mime": "^1.4.1", + "schema-utils": "^0.3.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + } } }, "url-pattern": { @@ -13661,6 +16157,29 @@ "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "useragent.js": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/useragent.js/-/useragent.js-0.5.6.tgz", @@ -13709,8 +16228,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "1.1.2", - "object.getownpropertydescriptors": "2.0.3" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, "uuid": { @@ -13718,14 +16237,20 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, + "v8-compile-cache": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", + "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==", + "dev": true + }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "validate.io-undefined": { @@ -13749,9 +16274,9 @@ } }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", "dev": true }, "verror": { @@ -13759,15 +16284,50 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", + "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^2.0.0", + "vinyl": "^1.1.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } } } }, @@ -13791,7 +16351,7 @@ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", "dev": true, "requires": { - "browser-process-hrtime": "0.1.2" + "browser-process-hrtime": "^0.1.2" } }, "walk-sync": { @@ -13799,8 +16359,8 @@ "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.2.tgz", "integrity": "sha512-FMB5VqpLqOCcqrzA9okZFc0wq0Qbmdm396qJxvQZhDpyu0W95G9JCmp74tx7iyYnyOcBtUuKJsgIKAqjozvmmQ==", "requires": { - "ensure-posix-path": "1.0.2", - "matcher-collection": "1.0.5" + "ensure-posix-path": "^1.0.0", + "matcher-collection": "^1.0.0" } }, "walker": { @@ -13809,7 +16369,7 @@ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "requires": { - "makeerror": "1.0.11" + "makeerror": "1.0.x" } }, "warning": { @@ -13817,7 +16377,7 @@ "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "watch": { @@ -13826,175 +16386,733 @@ "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", "dev": true, "requires": { - "exec-sh": "0.2.1", - "minimist": "1.2.0" + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" } }, "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "dependencies": { + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.1.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "webassemblyjs": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/webassemblyjs/-/webassemblyjs-1.3.1.tgz", + "integrity": "sha512-jaqGpR+MLye6fzxKTiv0/TPEm6ma7ypef76JlQVk9E1z5M2N6EXNrsMOuh7P6aXUVFHJSioRp4N9QOFpcWfIVA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1", + "@webassemblyjs/validation": "1.3.1", + "@webassemblyjs/wasm-parser": "1.3.1", + "@webassemblyjs/wast-parser": "1.3.1", + "long": "^3.2.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.8.1.tgz", + "integrity": "sha512-xkxthzaVR298HmvmrjBCjiCmgzWnBnvBlgPzuvqmxWSh8QImrPvCCmr482YIx7ixWkTtQj1aMRz+cjoNPUsGEQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.3.1", + "@webassemblyjs/wasm-edit": "1.3.1", + "@webassemblyjs/wasm-parser": "1.3.1", + "acorn": "^5.0.0", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^0.1.1", + "enhanced-resolve": "^4.0.0", + "eslint-scope": "^3.7.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.0.1" + }, + "dependencies": { + "ajv": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", + "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0", + "uri-js": "^4.2.1" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-addons": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/webpack-addons/-/webpack-addons-1.1.5.tgz", + "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", "dev": true, "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" + "jscodeshift": "^0.4.0" }, "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "ast-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", + "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", + "dev": true + }, "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + }, + "colors": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.4.tgz", + "integrity": "sha512-6Y+iBnWmXL+AWtlOp2Vr6R2w5MUlNJRwR0ShVFaAb1CqWzhPOpQg4L0jxD+xpw/Nc8QJwaq3KM79QUCriY8CWQ==", + "dev": true + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "jscodeshift": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", + "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", "dev": true, "requires": { - "lodash": "4.17.5" + "async": "^1.5.0", + "babel-plugin-transform-flow-strip-types": "^6.8.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-stage-1": "^6.5.0", + "babel-register": "^6.9.0", + "babylon": "^6.17.3", + "colors": "^1.1.2", + "flow-parser": "^0.*", + "lodash": "^4.13.1", + "micromatch": "^2.3.7", + "node-dir": "0.1.8", + "nomnom": "^1.8.1", + "recast": "^0.12.5", + "temp": "^0.8.1", + "write-file-atomic": "^1.2.0" } - } - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", - "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", - "dev": true, - "requires": { - "acorn": "5.4.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "6.1.1", - "ajv-keywords": "3.1.0", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" - }, - "dependencies": { - "ajv": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.1.1.tgz", - "integrity": "sha1-l41Zf7wrfQ5aXD3esUmmgvKr+g4=", + }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", "dev": true, "requires": { - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "chalk": "~0.4.0", + "underscore": "~1.6.0" } }, - "ajv-keywords": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", - "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "recast": { + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", + "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", + "dev": true, + "requires": { + "ast-types": "0.10.1", + "core-js": "^2.4.1", + "esprima": "~4.0.0", + "private": "~0.1.5", + "source-map": "~0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "dev": true, "requires": { - "lodash": "4.17.5" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + } + } + }, + "webpack-cli": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.1.3.tgz", + "integrity": "sha512-5AsKoL/Ccn8iTrwk3uErdyhetGH+c7VRQ7Itim2GL0IhBRq5rtojVDk00buMRmFmBpw1RvHXq97Gup965LbozA==", + "dev": true, + "requires": { + "chalk": "^2.3.2", + "cross-spawn": "^6.0.5", + "diff": "^3.5.0", + "enhanced-resolve": "^4.0.0", + "envinfo": "^4.4.2", + "glob-all": "^3.1.0", + "global-modules": "^1.0.0", + "got": "^8.2.0", + "import-local": "^1.0.0", + "inquirer": "^5.1.0", + "interpret": "^1.0.4", + "jscodeshift": "^0.5.0", + "listr": "^0.13.0", + "loader-utils": "^1.1.0", + "lodash": "^4.17.5", + "log-symbols": "^2.2.0", + "mkdirp": "^0.5.1", + "p-each-series": "^1.0.0", + "p-lazy": "^1.0.0", + "prettier": "^1.5.3", + "supports-color": "^5.3.0", + "v8-compile-cache": "^1.1.2", + "webpack-addons": "^1.1.5", + "yargs": "^11.1.0", + "yeoman-environment": "^2.0.0", + "yeoman-generator": "^2.0.4" + }, + "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 }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "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.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "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": { - "number-is-nan": "1.0.1" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "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": { - "has-flag": "2.0.0" + "ansi-regex": "^3.0.0" } }, "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -14011,8 +17129,8 @@ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -14023,24 +17141,6 @@ } } }, - "websql": { - "version": "git+https://github.com/brettz9/node-websql.git#c9828a34c92eced64858fc19151ec099fd60e8dd", - "requires": { - "argsarray": "0.0.1", - "immediate": "3.2.3", - "noop-fn": "1.0.0", - "pouchdb-collections": "1.0.1", - "sqlite3": "3.1.13", - "tiny-queue": "0.2.1" - }, - "dependencies": { - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" - } - } - }, "what-input": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/what-input/-/what-input-4.3.1.tgz", @@ -14053,21 +17153,36 @@ "dev": true, "requires": { "iconv-lite": "0.4.19" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + } } }, "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + }, + "whatwg-mimetype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", + "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==", + "dev": true }, "whatwg-url": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz", - "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", + "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", + "dev": true, "requires": { - "lodash.sortby": "4.7.0", - "tr46": "1.0.1", - "webidl-conversions": "4.0.2" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, "when": { @@ -14086,7 +17201,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -14104,31 +17219,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, "requires": { - "string-width": "1.0.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "string-width": "^1.0.2" } }, "window-size": { @@ -14137,9 +17229,18 @@ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } }, "workerpool": { "version": "2.3.0", @@ -14155,30 +17256,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -14192,7 +17271,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "write-file-atomic": { @@ -14201,9 +17280,9 @@ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "write-stream": { @@ -14211,7 +17290,7 @@ "resolved": "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz", "integrity": "sha1-g8yMA0fQr2BXqThitOOuAd5cgcE=", "requires": { - "readable-stream": "0.0.4" + "readable-stream": "~0.0.2" }, "dependencies": { "readable-stream": { @@ -14222,14 +17301,13 @@ } }, "ws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", - "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", "dev": true, "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" } }, "xhr2": { @@ -14237,12 +17315,6 @@ "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", - "dev": true - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -14271,21 +17343,51 @@ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.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 + }, + "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" + } + }, + "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" + } + } } }, "yargs-parser": { @@ -14294,26 +17396,187 @@ "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" + } + }, + "yeoman-environment": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", + "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "debug": "^3.1.0", + "diff": "^3.3.1", + "escape-string-regexp": "^1.0.2", + "globby": "^6.1.0", + "grouped-queue": "^0.3.3", + "inquirer": "^3.3.0", + "is-scoped": "^1.0.0", + "lodash": "^4.17.4", + "log-symbols": "^2.1.0", + "mem-fs": "^1.1.0", + "text-table": "^0.2.0", + "untildify": "^3.0.2" }, "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "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" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, + "yeoman-generator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.5.tgz", + "integrity": "sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg==", + "dev": true, + "requires": { + "async": "^2.6.0", + "chalk": "^2.3.0", + "cli-table": "^0.3.1", + "cross-spawn": "^6.0.5", + "dargs": "^5.1.0", + "dateformat": "^3.0.3", + "debug": "^3.1.0", + "detect-conflict": "^1.0.0", + "error": "^7.0.2", + "find-up": "^2.1.0", + "github-username": "^4.0.0", + "istextorbinary": "^2.2.1", + "lodash": "^4.17.10", + "make-dir": "^1.1.0", + "mem-fs-editor": "^4.0.0", + "minimist": "^1.2.0", + "pretty-bytes": "^4.0.2", + "read-chunk": "^2.1.0", + "read-pkg-up": "^3.0.0", + "rimraf": "^2.6.2", + "run-async": "^2.0.0", + "shelljs": "^0.8.0", + "text-table": "^0.2.0", + "through2": "^2.0.0", + "yeoman-environment": "^2.0.5" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "^4.14.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "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" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + } + } + }, "ytdl-core": { - "version": "0.18.7", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.18.7.tgz", - "integrity": "sha512-ZAopedHbn8YQzXAanz1EvD20JLs5+E/BTADOmPPwtLR8QP9ipMi3Iamcs5lhf5FztCNcjtasPIMyxslZZc3szQ==", - "requires": { - "html-entities": "1.2.1", - "m3u8stream": "0.2.1", - "miniget": "1.1.0", - "sax": "1.2.4" + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.20.2.tgz", + "integrity": "sha512-7AAIdhVRJgS3HulFCdT4C4G8FpeKouFinMCa8YA2cvKmEjXoIiNcMJmtnOI1VJil+l57K1Ly4MzEKlvR6H7C0g==", + "requires": { + "html-entities": "^1.1.3", + "m3u8stream": "^0.2.1", + "miniget": "^1.1.0", + "sax": "^1.1.3" } }, "yuidoc-bootstrap-theme": { diff --git a/package.json b/package.json index 3f3bea07f..7ef1382a0 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,13 @@ "license": "MPL-2.0", "main": "webpack.config.js", "scripts": { - "build.dev": "webpack --display-error-details --progress --verbose --env.dev", - "build.prod": "cross-env NODE_ENV=production webpack --display-error-details --progress --env.prod", - "build.watch": "webpack --watch --display-error-details --progress --env.dev --env.watch", + "build.dev": "webpack --mode development --display-error-details --progress --env.dev", + "build.prod": "webpack --mode production --display-error-details --progress --env.prod", + "build.watch": "webpack --mode development --display-error-details --progress --verbose --watch --env.dev --env.watch", "prebuild.dev": "node ./tools/licenses/fetchLicenses.js", "prebuild.prod": "node ./tools/licenses/fetchLicenses.js", "prebuild.watch": "node ./tools/licenses/fetchLicenses.js", - "test.unit": "BABEL_ENV=test jest", + "test.unit": "cross-env BABEL_ENV=test jest", "lint": "eslint --ext .js,.jsx ./app ./src", "lint.fix": "eslint --ext .js,.jsx ./app ./src --fix", "lint.raw": "eslint --ext .js,.jsx", @@ -42,7 +42,7 @@ "homepage": "https://github.com/ghostery/ghostery-extension#readme", "dependencies": { "base64-js": "^1.2.1", - "browser-core": "https://s3.amazonaws.com/cdncliqz/update/edge/ghostery/v7.24/7.24.3.tgz", + "browser-core": "https://s3.amazonaws.com/cdncliqz/update/edge/ghostery/v7.26/1.26.3.tgz?v=1", "classnames": "^2.2.5", "d3": "^4.13.0", "d3-scale": "^1.0.6", @@ -54,6 +54,7 @@ "react-redux": "^5.0.6", "react-remarkable": "^1.1.3", "react-router-dom": "^4.2.2", + "react-shadow": "^16.2.0", "redux": "^3.7.2", "redux-thunk": "^2.2.0", "ua-parser-js": "^0.7.17", @@ -71,12 +72,13 @@ "clean-webpack-plugin": "^0.1.16", "cross-env": "^5.1.3", "css-loader": "^0.28.7", + "enzyme": "^3.3.0", + "enzyme-adapter-react-16": "^1.1.1", "eslint": "^4.17.0", "eslint-config-airbnb": "^16.1.0", "eslint-plugin-import": "^2.8.0", "eslint-plugin-jsx-a11y": "^6.0.3", "eslint-plugin-react": "^7.6.1", - "extract-text-webpack-plugin": "^3.0.0", "fs-extra": "^4.0.3", "glob": "^7.1.2", "html-loader": "^0.5.1", @@ -85,18 +87,24 @@ "jsonfile": "^4.0.0", "license-checker": "^15.0.0", "markdown-extract": "^1.0.2", + "mini-css-extract-plugin": "^0.4.0", "node-sass": "^4.5.3", "oboe": "^2.1.3", "path": "^0.12.7", + "react-router": "^4.2.0", + "react-test-renderer": "^16.2.0", "read-file": "^0.2.0", + "redux-mock-store": "^1.5.1", "sass-loader": "^6.0.6", + "seamless-immutable": "^7.1.3", "sinon": "^4.2.2", "sinon-chrome": "^2.2.1", "style-loader": "^0.19.0", "svg-url-loader": "^2.2.1", "url-loader": "^0.6.2", "vendor-copy": "^1.3.1", - "webpack": "^3.8.1", + "webpack": "^4.6.0", + "webpack-cli": "^2.0.13", "webpack-shell-plugin": "^0.5.0", "whatwg-fetch": "^2.0.3" } diff --git a/src/background.js b/src/background.js index 8253ff887..53b6f2516 100644 --- a/src/background.js +++ b/src/background.js @@ -20,13 +20,13 @@ */ import _ from 'underscore'; import moment from 'moment/min/moment-with-locales.min'; -import CLIQZ from 'browser-core'; +import cliqz from './classes/Cliqz'; // object classes -import Button from './classes/BrowserButton'; import Events from './classes/EventHandlers'; import PanelData from './classes/PanelData'; // static classes import bugDb from './classes/BugDb'; +import button from './classes/BrowserButton'; import c2pDb from './classes/Click2PlayDb'; import cmp from './classes/CMP'; import abtest from './classes/ABTest'; @@ -39,6 +39,7 @@ import globals from './classes/Globals'; import surrogatedb from './classes/SurrogateDb'; import tabInfo from './classes/TabInfo'; import metrics from './classes/Metrics'; +import rewards from './classes/Rewards'; // utilities import * as accounts from './utils/accounts'; import { allowAllwaysC2P } from './utils/click2play'; @@ -46,45 +47,62 @@ import * as common from './utils/common'; import * as utils from './utils/utils'; // class instantiation -const button = new Button(); const events = new Events(); - const panelData = new PanelData(); -const cliqz = new (CLIQZ.App)(); // function shortcuts const { log } = common; const { sendMessage } = utils; const { onMessage } = chrome.runtime; // simple consts const { - GHOSTERY_DOMAIN, CDN_SUB_DOMAIN, BROWSER_INFO, IS_CLIQZ + GHOSTERY_DOMAIN, CDN_SUB_DOMAIN, BROWSER_INFO, IS_CLIQZ, DEBUG } = globals; const IS_EDGE = (BROWSER_INFO.name === 'edge'); const VERSION_CHECK_URL = `https://${CDN_SUB_DOMAIN}.ghostery.com/update/version`; const OFFERS_HANDLER_ID = 'ghostery'; +const REAL_ESTATE_ID = 'ghostery'; const onBeforeRequest = events.onBeforeRequest.bind(events); const onHeadersReceived = events.onHeadersReceived.bind(events); // Cliqz Modules const humanweb = cliqz.modules['human-web']; -const { adblocker, antitracking } = cliqz.modules; +const { adblocker, antitracking, hpn } = cliqz.modules; const messageCenter = cliqz.modules['message-center']; const offers = cliqz.modules['offers-v2']; +/** + * Enable or disable specified module. + * @memberOf Background + * @param {Object} module Cliqz module + * @param {boolean} enabled true - enable, false - disable + * @return {Promise} + */ function setCliqzModuleEnabled(module, enabled) { if (enabled) { + log('SET CLIQZ MODULE ENABLED', module); return cliqz.enableModule(module.name); } - return module.isReady().then(() => cliqz.disableModule(module.name)); + log('SET CLIQZ MODULE DISABLED', module); + cliqz.disableModule(module.name); + return Promise.resolve(); } +/** + * Register/unregister real estate with Offers core module. + * @memberOf Background + * @param {Object} offersModule offers module + * @param {Boolean} register true - register, false - unregister + */ +function registerWithOffers(offersModule, register) { + if (!offersModule.isEnabled) { + return Promise.resolve(); + } -// local varialbes -let HUMAN_WEB_PROCESSING = false; -let OFFERS_PROCESSING = false; -let ANTI_TRACKING_PROCESSING = false; -let AD_BLOCK_PROCESSING = false; -let BACKGROUND_LOADING = true; - + log('REGISTER WITH OFFERS CALLED', register); + return offersModule.action(register ? 'registerRealEstate' : 'unregisterRealEstate', { realEstateID: REAL_ESTATE_ID }) + .catch((e) => { + log(`FAILED TO ${register ? 'REGISTER' : 'UNREGISTER'} REAL ESTATE WITH OFFERS CORE`); + }); +} /** * Check and fetch (if needed) a new tracker library every 12 hours * @memberOf Background @@ -192,6 +210,7 @@ function getSiteData() { if (!tab) { reject(new Error('Tab not found. Cannot gather page data')); + return; } resolve({ @@ -370,7 +389,7 @@ function handleClick2Play(name, message, tab_id, callback) { * * @param {string} name message name * @param {Object} message message data - * @param {number} tab_id tab id + * @param {number} tab_id tab id * @param {function} callback function to call (at most once) when you have a response */ function handleBlockedRedirect(name, message, tab_id, callback) { @@ -393,7 +412,40 @@ function handleBlockedRedirect(name, message, tab_id, callback) { } /** - * Handle messages sent from dist/settings_redirect.js script. + * Handle messages sent from dist/rewards.js content script. + * @memberOf Background + * + * @param {string} name message name + * @param {Object} message message data + * @param {number} tab_id tab id + * @param {function} callback function to call (at most once) when you have a response + */ +function handleRewards(name, message, tab_id, callback) { + switch (name) { + case 'rewardSignal': + rewards.sendSignal(message); + break; + case 'rewardSeen': + rewards.markRewardRead(message.offerId); + button.update(); + break; + case 'deleteReward': + rewards.deleteReward(message.offerId); + button.update(); + break; + case 'rewardsDisabled': + conf.enable_offers = false; + break; + case 'rewardsPromptAccepted': + conf.rewards_accepted = true; + break; + default: + break; + } +} + +/** + * Handle messages sent from dist/settings_redirect.js script * of the settings_redirect.html local page. Used on @EDGE and Chrome. * @memberOf Background * @@ -528,6 +580,8 @@ function onMessageHandler(request, sender, callback) { return handleClick2Play(name, message, tab_id, callback); } else if (origin === 'blocked_redirect') { return handleBlockedRedirect(name, message, tab_id, callback); + } else if (origin === 'rewards' || origin === 'rewardsPanel') { + return handleRewards(name, message, tab_id, callback); } // HANDLE UNIVERSAL EVENTS HERE (NO ORIGIN LISTED ABOVE) @@ -775,45 +829,37 @@ function initializeDispatcher() { }); dispatcher.on('conf.save.enable_human_web', (enableHumanWeb) => { if (!IS_EDGE && !IS_CLIQZ) { - if (!HUMAN_WEB_PROCESSING && !BACKGROUND_LOADING) { - HUMAN_WEB_PROCESSING = true; - setCliqzModuleEnabled(humanweb, enableHumanWeb).then(() => { - HUMAN_WEB_PROCESSING = false; - // humanweb enable/disable may change telemetry abtest behaviour - setupABTests(); - }); - } + setCliqzModuleEnabled(humanweb, enableHumanWeb).then((data) => { + setupABTest(); + }); + } else { + setCliqzModuleEnabled(humanweb, false); } }); dispatcher.on('conf.save.enable_offers', (enableOffers) => { + button.update(); if (!IS_EDGE && !IS_CLIQZ) { - if (!OFFERS_PROCESSING && !BACKGROUND_LOADING) { - OFFERS_PROCESSING = true; - setCliqzModuleEnabled(messageCenter, enableOffers) - .then(() => setCliqzModuleEnabled(offers, enableOffers)); - OFFERS_PROCESSING = false; + if (!enableOffers) { + registerWithOffers(offers, enableOffers); } + setCliqzModuleEnabled(offers, enableOffers); + } else { + setCliqzModuleEnabled(offers, false); + registerWithOffers(offers, false); } }); dispatcher.on('conf.save.enable_anti_tracking', (enableAntitracking) => { if (!IS_CLIQZ) { - if (!ANTI_TRACKING_PROCESSING && !BACKGROUND_LOADING) { - ANTI_TRACKING_PROCESSING = true; - setCliqzModuleEnabled(antitracking, enableAntitracking) - .then(() => { - ANTI_TRACKING_PROCESSING = false; - }); - } + setCliqzModuleEnabled(antitracking, enableAntitracking); + } else { + setCliqzModuleEnabled(antitracking, false); } }); dispatcher.on('conf.save.enable_ad_block', (enableAdBlock) => { if (!IS_CLIQZ) { - if (!AD_BLOCK_PROCESSING && !BACKGROUND_LOADING) { - setCliqzModuleEnabled(adblocker, enableAdBlock) - .then(() => { - AD_BLOCK_PROCESSING = false; - }); - } + setCliqzModuleEnabled(adblocker, enableAdBlock); + } else { + setCliqzModuleEnabled(adblocker, false); } }); @@ -855,11 +901,10 @@ function getAntitrackingTestConfig() { } /** - * Setup Antitracking and Offers based on the results - * returned from the abtest endpoint. - * @memberOf Background + * Adjust antitracking parameters based on the current state + * of ABTest and availability of Human Web. */ -function setupABTests() { +function setupABTest() { const antitrackingConfig = getAntitrackingTestConfig(); if (antitrackingConfig && conf.enable_anti_tracking) { if (!conf.enable_human_web) { @@ -872,8 +917,6 @@ function setupABTests() { antitracking.action('setConfigOption', opt, val); }); } - // enable offers ONLY if ABTest is true and user has left it enabled. - conf.enable_offers = (abtest.hasTest('offers') && conf.enable_offers); } /** @@ -939,8 +982,9 @@ function initialiseWebRequestPipeline() { * * @return {boolean} */ -function isWhitelisted(url) { - return globals.SESSION.paused_blocking || events.policy.getSitePolicy(url) === 2; +function isWhitelisted(state) { + const url = state.sourceUrl; + return globals.SESSION.paused_blocking || events.policy.getSitePolicy(url) === 2 || state.ghosteryWhitelisted; } // Set listener for 'enabled' event for Antitracking module which replaces @@ -950,8 +994,40 @@ function isWhitelisted(url) { // @memberOf Background antitracking.on('enabled', () => { antitracking.isReady().then(() => { - // TODO: this should be exposed as an action from the antitracking module - antitracking.background.attrack.urlWhitelist.isWhitelisted = hostname => isWhitelisted(`http://${hostname}/`); + // remove Cliqz-side whitelisting steps and replace with ghostery ones. + const replacedSteps = ['onBeforeSendHeaders', 'onHeadersReceived'].map(stage => + Promise.all([ + antitracking.action('removePipelineStep', stage, 'checkIsCookieWhitelisted'), + antitracking.action('addPipelineStep', stage, { + name: 'checkGhosteryWhitelisted', + spec: 'break', + fn: (state) => { + if (isWhitelisted(state)) { + const step = stage === 'onHeadersReceived' ? 'set_cookie' : 'cookie'; + state.incrementStat(`${step}_allow_whitelisted`); + return false; + } + return true; + }, + before: ['cookieContext.checkCookieTrust'], + }) + ]) + ).concat([ + antitracking.action('removePipelineStep', 'onBeforeRequest', 'checkSourceWhitelisted'), + antitracking.action('addPipelineStep', 'onBeforeRequest', { + name: 'checkGhosteryWhitelisted', + spec: 'break', + fn: (state) => { + if (isWhitelisted(state)) { + state.incrementStat('ghostery_whitelisted'); + return false; + } + return true; + }, + before: ['checkShouldBlock'], + }), + ]); + return Promise.all(replacedSteps); }); }); @@ -959,65 +1035,91 @@ antitracking.on('enabled', () => { // Set listener for 'enabled' event for Adblock module // which replaces Adblock isWhitelisted method with Ghostery's isWhitelisted method adblocker.on('enabled', () => { - adblocker.isReady().then(() => { - // TODO: this should be exposed as an action from the adblocker module - adblocker.background.adb.urlWhitelist.isWhitelisted = isWhitelisted; - }); + adblocker.isReady().then(() => + Promise.all([ + adblocker.action('removePipelineStep', 'checkWhitelist'), + adblocker.action('addPipelineStep', { + name: 'checkGhosteryWhitelist', + spec: 'break', + fn: state => !isWhitelisted(state), + before: ['checkBlocklist'] + }) + ]) + ); }); - -// Set listener for 'enabled' event for Offers module. -// It registers message handler for messages with the offers. -// This handler adds incoming message data to the array of -// notimication messages (CMP_DATA) to be eventually displayed. offers.on('enabled', () => { - const messageCenter = cliqz.modules['message-center']; - return messageCenter.action('registerMessageHandler', OFFERS_HANDLER_ID, (msg) => { - // ffers enabled at the moment when message received - messageCenter.action('hideMessage', OFFERS_HANDLER_ID, msg); - msg.Dismiss = 1; // to be immediately dismissed once shown - - /** - * We changed the message structure here so we need to map - * to the new way on ghostery 8 after nav-ext 1.18 - * - * { - * id: offerInfoCpy.display_id, - * Message: offerInfoCpy.ui_info.template_data.title, - * Link: offerInfoCpy.ui_info.template_data.call_to_action.url, - * LinkText: offerInfoCpy.ui_info.template_data.call_to_action.text, - * type: 'offers', - * origin: 'cliqz', - * data: { - * offer_info: { - * offer_id: data.offer_data.offer_id, - * offer_urls: urlsToShow - * } - * } - * } - */ - - // first check that the message is from core and is the one we expect - if (msg.origin === 'offers-core' && - msg.type === 'push-offer' && - msg.data.offer_data) { - const { data } = msg; - const cmpMsg = { - id: data.offer_data.display_id, - Message: data.offer_data.ui_info.template_data.title, - Link: data.offer_data.ui_info.template_data.call_to_action.url, - LinkText: data.offer_data.ui_info.template_data.call_to_action.text, - type: 'offers', - origin: 'cliqz', - data: { - offer_info: { - offer_id: data.offer_data.offer_id, - offer_urls: data.offer_data.rule_info.url - } - } - }; - cmp.CMP_DATA.push(cmpMsg); + offers.isReady().then(() => { + log('IN OFFERS ON ENABLED', offers, messageCenter); + + if (DEBUG) { + offers.action('setConfiguration', { + config_location: 'de', + triggersBE: 'http://offers-api-stage.clyqz.com:81', + showConsoleLogs: true, + offersLogsEnabled: true, + offersDevFlag: true, + offersTelemetryFreq: '10' + }); } + registerWithOffers(offers, true) + .then(() => { + setCliqzModuleEnabled(messageCenter, true); + }); + }); +});/** + * Set listener for 'enabled' event for Offers module. + * It registers message handler for messages with the offers. + * This handler adds incoming message data to the array of + * notimication messages (CMP_DATA) to be eventually displayed. + */ +messageCenter.on('enabled', () => { + messageCenter.isReady().then(() => { + log('IN MESSAGE CENTER ON ENABLED', offers, messageCenter); + // const messageCenter = cliqz.modules['message-center']; + return messageCenter.action('registerMessageHandler', OFFERS_HANDLER_ID, (msg) => { + // ffers enabled at the moment when message received + messageCenter.action('hideMessage', OFFERS_HANDLER_ID, msg); + msg.Dismiss = 1; // to be immediately dismissed once shown + /** + * We changed the message structure here so we need to map + * to the new way on ghostery 8 after nav-ext 1.18 + * + * { + * id: offerInfoCpy.display_id, + * Message: offerInfoCpy.ui_info.template_data.title, + * Link: offerInfoCpy.ui_info.template_data.call_to_action.url, + * LinkText: offerInfoCpy.ui_info.template_data.call_to_action.text, + * type: 'offers', + * origin: 'cliqz', + * data: { + * offer_info: { + * offer_id: data.offer_data.offer_id, + * offer_urls: urlsToShow + * } + * } + * } + */ + // first check that the message is from core and is the one we expect + if (msg.origin === 'offers-core' && + msg.type === 'push-offer' && + msg.data.offer_data) { + const unreadIdx = rewards.unreadOfferIds.indexOf(msg.data.offer_id); + if (unreadIdx !== -1) { + rewards.unreadOfferIds.splice(unreadIdx, 1); + } + rewards.storedOffers[msg.data.offer_id] = msg.data; + rewards.unreadOfferIds.push(msg.data.offer_id); + + log('RECEIVED OFFER', msg); + button.update(); + utils.getActiveTab((tab) => { + let tabId = 0; + if (tab) tabId = tab.id; + rewards.showHotDog(tabId, msg.data); + }); + } + }); }); }); @@ -1226,6 +1328,8 @@ function initializeGhosteryModules() { conf.version_history = version_history; metrics.ping('upgrade'); + // We don't want install_complete pings for upgrade + conf.metrics.install_complete_all = Number(new Date().getTime()); } else if (globals.JUST_INSTALLED) { log('JUST INSTALLED'); const date = new Date(); @@ -1267,60 +1371,56 @@ function initializeGhosteryModules() { if (globals.JUST_UPGRADED_FROM_7) { conf.enable_ad_block = false; conf.enable_anti_tracking = false; - setCliqzModuleEnabled(antitracking, conf.enable_anti_tracking); - setCliqzModuleEnabled(adblocker, conf.enable_ad_block); - setCliqzModuleEnabled(humanweb, IS_EDGE ? false : conf.enable_human_web); + conf.enable_offers = false; + conf.enable_human_web = (IS_EDGE || IS_CLIQZ) ? false : conf.enable_human_web; } else { - conf.enable_ad_block = !adblocker.isDisabled; - conf.enable_anti_tracking = !antitracking.isDisabled; - conf.enable_human_web = IS_EDGE ? false : !humanweb.isDisabled; + conf.enable_ad_block = IS_CLIQZ ? false : !adblocker.isDisabled; + conf.enable_anti_tracking = IS_CLIQZ ? false : !antitracking.isDisabled; + conf.enable_human_web = (IS_EDGE || IS_CLIQZ) ? false : !humanweb.isDisabled; + conf.enable_offers = (IS_EDGE || IS_CLIQZ) ? false : !offers.isDisabled; } - // sync conf from module status - conf.enable_offers = IS_EDGE ? false : !offers.isDisabled; })).catch((e) => { log('cliqzStartup error', e); }); if (IS_EDGE) { - cliqz.disableModule('hpn'); - cliqz.disableModule('offers-v2'); - cliqz.disableModule('human-web'); + setCliqzModuleEnabled(hpn, false); } - cliqzStartup.then(() => { - if (!IS_EDGE) { - abtest.fetch().then(() => { - setupABTests(); - }).catch((err) => { - log('cliqzStartup abtest fetch error', err); - }); - } - }); - - // record active ping - metrics.ping('active'); - - // init the CMP - cmp.fetchCMPData(); - // Set these tasks to run every 30min + // Set these tasks to run every hour function scheduledTasks() { // auto-fetch from CMP cmp.fetchCMPData(); - if (!IS_EDGE) { + if (!IS_EDGE && !IS_CLIQZ) { // auto-fetch human web offer abtest.fetch().then(() => { - setupABTests(); + setupABTest(); }).catch((err) => { log('Unable to reach abtest server'); }); } - - // auto-update bugs dbs - autoUpdateBugDb(); } - scheduledTasks(); - setInterval(scheduledTasks, 1800000); + + cliqzStartup.then(() => { + if (!IS_EDGE && !IS_CLIQZ) { + abtest.fetch().then(() => { + setupABTest(); + }).catch((err) => { + log('cliqzStartup abtest fetch error', err); + }); + } + }); + + // Check CMP right away. + cmp.fetchCMPData(); + // Check CMP and ABTest every hour. + setInterval(scheduledTasks, 3600000); + + // Update db right away. + autoUpdateBugDb(); + // Schedule it to run every 30 min. + setInterval(autoUpdateBugDb, 1800000); // listen for changes to specific conf properties initializeDispatcher(); @@ -1334,6 +1434,8 @@ function initializeGhosteryModules() { button.update(tabId); }); + // record active ping + metrics.ping('active'); // initialize all tracker and surrogate DBs in parallel with Promise.all return Promise.all([ bugDb.init(globals.JUST_UPGRADED), @@ -1358,16 +1460,13 @@ function init() { initializePopup(); initializeEventListeners(); initializeVersioning(); - return metrics.init(globals.JUST_INSTALLED).then(() => initializeGhosteryModules().then(() => { - BACKGROUND_LOADING = false; - return accounts.pullUserSettings().catch((err) => { - log('init() cannot pull user settings:', err); - }).then(() => { - // persist Conf properties to storage only after init has completed - common.prefsSet(globals.initProps); - globals.INIT_COMPLETE = true; - }); - })); + return metrics.init(globals.JUST_INSTALLED).then(() => initializeGhosteryModules().then(() => accounts.pullUserSettings().catch((err) => { + log('init() cannot pull user settings:', err); + }).then(() => { + // persist Conf properties to storage only after init has completed + common.prefsSet(globals.initProps); + globals.INIT_COMPLETE = true; + }))); }).catch((err) => { log('Error in init()', err); return Promise.reject(err); diff --git a/src/classes/ABTest.js b/src/classes/ABTest.js index 6ee9f8115..ff57a6b86 100644 --- a/src/classes/ABTest.js +++ b/src/classes/ABTest.js @@ -30,7 +30,7 @@ class ABTest { this.tests = {}; } /** - * @class to determine if a test with specified name is present. + * Determine if a test with specified name is present. * @param {string} name test name */ hasTest(name) { diff --git a/src/classes/BrowserButton.js b/src/classes/BrowserButton.js index f7762d91d..30a59033d 100644 --- a/src/classes/BrowserButton.js +++ b/src/classes/BrowserButton.js @@ -15,6 +15,7 @@ import conf from './Conf'; import foundBugs from './FoundBugs'; +import rewards from './Rewards'; import Policy from './Policy'; import { getTab } from '../utils/utils'; import { log } from '../utils/common'; @@ -23,7 +24,6 @@ import globals from './Globals'; /** * @class for handling Ghostery button. * @memberof BackgroundClasses - * @todo make it a Singelton */ class BrowserButton { constructor() { @@ -77,10 +77,13 @@ class BrowserButton { if (globals.BROWSER_INFO.os === 'android') { return; } if (tabId <= 0) { return; } + const iconAlt = (!active) ? '_off' : + (conf.enable_offers && rewards.unreadOfferIds.length > 0) ? '_star' : ''; + chrome.browserAction.setIcon({ path: { - 19: `app/images/icon19${active ? '' : '_off'}.png`, - 38: `app/images/icon38${active ? '' : '_off'}.png` + 19: `app/images/icon19${iconAlt}.png`, + 38: `app/images/icon38${iconAlt}.png` }, tabId }, () => { @@ -101,11 +104,10 @@ class BrowserButton { // Only show the badge if the conf setting allows it if (conf.show_badge) { - // Add tracker count to the badgeText - chrome.browserAction.setBadgeText({ - text: trackerCount, - tabId - }); + // Don't show badgeText when there is a new reward and Ghostery is active + // Otherwise set the tracker count to the badgeText + const text = (conf.enable_offers && rewards.unreadOfferIds.length && active) ? '' : trackerCount; + chrome.browserAction.setBadgeText({ text, tabId }); // Set badge background color chrome.browserAction.setBadgeBackgroundColor({ @@ -153,4 +155,4 @@ class BrowserButton { } } -export default BrowserButton; +export default new BrowserButton(); diff --git a/src/classes/Cliqz.js b/src/classes/Cliqz.js new file mode 100644 index 000000000..a0112c0a3 --- /dev/null +++ b/src/classes/Cliqz.js @@ -0,0 +1,17 @@ +/** + * Cliqz Import Class + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +/* @memberOf BackgroundClasses */ +import CLIQZ from 'browser-core'; + +export default new (CLIQZ.App)(); diff --git a/src/classes/ConfData.js b/src/classes/ConfData.js index 246f68ed5..4ee1553d1 100644 --- a/src/classes/ConfData.js +++ b/src/classes/ConfData.js @@ -105,6 +105,7 @@ class ConfData { _initProperty('last_cmp_date', 0); _initProperty('notify_library_updates', false); _initProperty('notify_upgrade_updates', true); + _initProperty('rewards_accepted', false); _initProperty('settings_last_imported', 0); _initProperty('settings_last_exported', 0); _initProperty('show_alert', true); diff --git a/src/classes/EventHandlers.js b/src/classes/EventHandlers.js index 8bbbe2e70..41618927e 100644 --- a/src/classes/EventHandlers.js +++ b/src/classes/EventHandlers.js @@ -16,16 +16,17 @@ import _ from 'underscore'; import bugDb from './BugDb'; -import Button from './BrowserButton'; +import button from './BrowserButton'; import c2pDb from './Click2PlayDb'; import cmp from './CMP'; import conf from './Conf'; import foundBugs from './FoundBugs'; import globals from './Globals'; import latency from './Latency'; -import Policy from './Policy'; +import Policy, { BLOCK_REASON_SS_UNBLOCKED, BLOCK_REASON_C2P_ALLOWED_THROUGH } from './Policy'; import PolicySmartBlock from './PolicySmartBlock'; import PurpleBox from './PurpleBox'; +import rewards from './Rewards'; import surrogatedb from './SurrogateDb'; import compDb from './CompatibilityDb'; import tabInfo from './TabInfo'; @@ -34,7 +35,6 @@ import { log } from '../utils/common'; import { isBug } from '../utils/matcher'; import * as utils from '../utils/utils'; -const button = new Button(); const RequestsMap = new Map(); /** * This class is a collection of handlers for @@ -43,7 +43,6 @@ const RequestsMap = new Map(); */ class EventHandlers { constructor() { - this.button = new Button(); this.policy = new Policy(); this.policySmartBlock = new PolicySmartBlock(); this.purplebox = new PurpleBox(); @@ -159,7 +158,7 @@ class EventHandlers { // we look for a cliqz offer which does not have urls specified (meaning good for any site) // All Cliqz offers have Dismiss === 1, so the found one is injected and removed. // Lastly we look for non-cliqz offers (classic CMPs) - if (cmp.CMP_DATA.length !== 0) { + if (!rewards.currentOffer && cmp.CMP_DATA.length !== 0) { const CMPS = cmp.CMP_DATA; const numOffers = CMPS.length; let cliqzOffer; @@ -357,7 +356,7 @@ class EventHandlers { /* ** SMART BLOCKING - Privacy ** */ // block HTTP request on HTTPS page - if (this.policySmartBlock.isInsecureRequest(tab_id, page_protocol, processed.protocol)) { + if (this.policySmartBlock.isInsecureRequest(tab_id, page_protocol, processed.protocol, processed.host)) { return this._blockHelper(details, tab_id, null, null, request_id, from_redirect, true); } @@ -372,21 +371,16 @@ class EventHandlers { return { cancel: false }; } - let app_id; - let cat_id; - let incognito; - let tab_host; - let fromRedirect; - let block; - if (bug_id) { - app_id = bugDb.db.bugs[bug_id].aid; - cat_id = bugDb.db.apps[app_id].cat; - incognito = tabInfo.getTabInfo(tab_id, 'incognito'); - tab_host = tabInfo.getTabInfo(tab_id, 'host'); - fromRedirect = globals.REDIRECT_MAP.has(request_id); - block = this._checkBlocking(app_id, cat_id, tab_id, tab_host, page_url, request_id); + const app_id = bugDb.db.bugs[bug_id].aid; + const cat_id = bugDb.db.apps[app_id].cat; + const incognito = tabInfo.getTabInfo(tab_id, 'incognito'); + const tab_host = tabInfo.getTabInfo(tab_id, 'host'); + const fromRedirect = globals.REDIRECT_MAP.has(request_id); + const { block, reason } = this._checkBlocking(app_id, cat_id, tab_id, tab_host, page_url, request_id); + if (!block && reason === BLOCK_REASON_SS_UNBLOCKED) { + // The way to pass this flag to Cliqz handlers + details.ghosteryWhitelisted = true; } - // Latency initialization needs to be synchronous to avoid race condition with onCompleted, etc. // TODO can URLs repeat within a redirect chain? what are the cases of repeating URLs (trackers only, ...)? if (block === false) { @@ -679,7 +673,8 @@ class EventHandlers { } /** - * Checks to see if the URL is valid + * Checks to see if the URL is valid. Also checks to make sure we + * are not on the Chrome new tab page (_/chrome/newtab) or Firefox about:pages * * @private * @@ -687,7 +682,7 @@ class EventHandlers { * @return {Boolean} */ _isValidUrl(parsedURL) { - if (parsedURL.protocol.startsWith('http') && parsedURL.host.includes('.') && /[A-Za-z]/.test(parsedURL.host)) { + if (parsedURL.protocol.startsWith('http') && parsedURL.host.includes('.') && /[A-Za-z]/.test(parsedURL.host) && !parsedURL.path.includes('_/chrome/newtab')) { return true; } @@ -759,6 +754,12 @@ class EventHandlers { return true; } + /** + * @typedef {Object} BlockWithReason + * @property {boolean} block indicates if the tracker should be blocked. + * @property {string} reason indicates the reason for the block result. + */ + /** * Determine whether this request should be blocked * @@ -767,10 +768,10 @@ class EventHandlers { * @param {number} app_id tracker id * @param {number} cat_id tracker category id * @param {number} tab_id tab id - * @param {string} tab_host tab url host - * @param {string} page_url full tab url + * @param {string} tab_host tab url host + * @param {string} page_url full tab url * @param {number} request_id request id - * @return {boolean} + * @return {BlockWithReason} block result with reason */ _checkBlocking(app_id, cat_id, tab_id, tab_host, page_url, request_id) { const fromRedirect = globals.REDIRECT_MAP.has(request_id); @@ -779,7 +780,7 @@ class EventHandlers { // If we let page-level c2p trackers through, we don't want to block it // along with all subsequent top-level redirects. if (fromRedirect && globals.LET_REDIRECTS_THROUGH) { - block = false; + block = { block: false, reason: BLOCK_REASON_C2P_ALLOWED_THROUGH }; } else { block = this.policy.shouldBlock(app_id, cat_id, tab_id, tab_host, page_url); } diff --git a/src/classes/FoundBugs.js b/src/classes/FoundBugs.js index 0408ac24f..d4e7adcb0 100644 --- a/src/classes/FoundBugs.js +++ b/src/classes/FoundBugs.js @@ -35,7 +35,7 @@ import globals from './Globals'; import tabInfo from './TabInfo'; const { BROWSER_INFO } = globals; -const LATENCY_ISSUE_THRESHOLD = (BROWSER_INFO.name === 'firefox') ? 2000 : 1000; // Temporary: bump up the latency threshold for FF only +const LATENCY_ISSUE_THRESHOLD = (BROWSER_INFO.name === 'firefox') ? 2000 : 1000; // Temporary: bump up the latency threshold for Firefox only /** * Class for handling detected trackers. * @memberOf BackgroundClasses diff --git a/src/classes/Globals.js b/src/classes/Globals.js index 804da3e91..f9fd3faea 100644 --- a/src/classes/Globals.js +++ b/src/classes/Globals.js @@ -122,7 +122,7 @@ class Globals { buildBrowserInfo() { const ua = parser(navigator.userAgent); const browser = ua.browser.name.toLowerCase(); - const { version } = ua.browser; + const version = parseInt(ua.browser.version.toString(), 10); // convert to string for Chrome const platform = ua.os.name.toLowerCase(); // Set name and token properties. CMP uses `name` value. Metrics uses `token` diff --git a/src/classes/Metrics.js b/src/classes/Metrics.js index 941671077..372fbc593 100644 --- a/src/classes/Metrics.js +++ b/src/classes/Metrics.js @@ -15,6 +15,7 @@ import globals from './Globals'; import conf from './Conf'; import { log, prefsSet, prefsGet } from '../utils/common'; import { processUrlQuery } from '../utils/utils'; +import abtest from './ABTest'; // CONSTANTS const FREQUENCIES = { // in milliseconds @@ -24,6 +25,7 @@ const FREQUENCIES = { // in milliseconds monthly: 2419200000 }; const CRITICAL_METRICS = ['install', 'install_complete', 'upgrade', 'active', 'engaged', 'uninstall']; +const CAMPAIGN_METRICS = ['install', 'active', 'uninstall']; const { METRICS_SUB_DOMAIN, EXTENSION_VERSION, BROWSER_INFO } = globals; const IS_EDGE = (BROWSER_INFO.name === 'edge'); const MAX_DELAYED_PINGS = 100; @@ -53,10 +55,7 @@ class Metrics { // This query fails on Edge chrome.tabs.query({ url: [ - 'https://www.ghostery.com/lp*', - 'https://www.ghostery.com/*/lp*', - 'https://www.ghostery.com/products*', - 'https://www.ghostery.com/*/products*' + 'https://www.ghostery.com/*' ] }, (tabs) => { tabs.forEach((tab) => { @@ -71,9 +70,7 @@ class Metrics { prefsSet({ utm_source: this.utm_source, utm_campaign: this.utm_campaign - }) - .then(prefs => resolve(prefs)) - .catch(err => reject(err)); + }); }); resolve(); }); @@ -84,8 +81,7 @@ class Metrics { let foundUTM = false; tabs.forEach((tab) => { if (foundUTM) { return; } - if (tab.url && tab.url.includes('https://www.ghostery.com/') && - (tab.url.includes('products') || tab.url.includes('lp'))) { + if (tab.url && tab.url.includes('https://www.ghostery.com/')) { const query = processUrlQuery(tab.url); if (!query.utm_source || !query.utm_campaign) { return; } this.utm_source = query.utm_source; @@ -94,9 +90,7 @@ class Metrics { prefsSet({ utm_source: this.utm_source, utm_campaign: this.utm_campaign - }) - .then(reject) - .catch(reject); + }); } }); resolve(); @@ -114,9 +108,6 @@ class Metrics { /** * Prepare data and send telemetry pings. - * All existing pings are listed here: - * https://docs.ghostery.com/confluence/display/CT/GBE+Usage+Analytics+Pings - * * @param {string} type type of the telemetry ping */ ping(type) { @@ -140,86 +131,36 @@ class Metrics { // Extension Usage case 'pause': - this._sendReq('pause', ['all', 'daily', 'weekly']); - break; case 'resume': - this._sendReq('resume', ['all', 'daily', 'weekly']); - break; case 'trust_site': - this._sendReq('trust_site', ['all', 'daily', 'weekly']); - break; case 'restrict_site': - this._sendReq('restrict_site', ['all', 'daily', 'weekly']); - break; case 'live_scan': - this._sendReq('live_scan', ['all', 'daily', 'weekly']); - break; case 'sign_in': - this._sendReq('sign_in', ['all', 'daily', 'weekly']); + this._sendReq(type, ['all', 'daily', 'weekly']); break; // New case 'list_dash': - this._sendReq('list_dash', ['all', 'daily', 'weekly', 'monthly']); // ??? Why daily, etc? - break; case 'history_dash': - this._sendReq('history_dash', ['all', 'daily', 'weekly', 'monthly']); - break; case 'history_learn': - this._sendReq('history_learn', ['all', 'daily', 'weekly', 'monthly']); - break; case 'performance_dash': - this._sendReq('performance_dash', ['all', 'daily', 'weekly', 'monthly']); - break; case 'performance_learn': - this._sendReq('performance_learn', ['all', 'daily', 'weekly', 'monthly']); - break; case 'rewards_dash': - this._sendReq('rewards_dash', ['all', 'daily', 'weekly', 'monthly']); - break; case 'rewards_learn': - this._sendReq('rewards_learn', ['all', 'daily', 'weekly', 'monthly']); - break; case 'premium_dash': - this._sendReq('premium_dash', ['all', 'daily', 'weekly', 'monthly']); - break; case 'premium_learn': - this._sendReq('premium_learn', ['all', 'daily', 'weekly', 'monthly']); - break; case 'antitrack_on': - this._sendReq('antitrack_on', ['all', 'daily', 'weekly', 'monthly']); - break; case 'antitrack_off': - this._sendReq('antitrack_off', ['all', 'daily', 'weekly', 'monthly']); - break; case 'adblock_on': - this._sendReq('adblock_on', ['all', 'daily', 'weekly', 'monthly']); - break; case 'adblock_off': - this._sendReq('adblock_off', ['all', 'daily', 'weekly', 'monthly']); - break; case 'smartblock_on': - this._sendReq('smartblock_on', ['all', 'daily', 'weekly', 'monthly']); - break; case 'smartblock_off': - this._sendReq('smartblock_off', ['all', 'daily', 'weekly', 'monthly']); - break; case 'pause_snooze': - this._sendReq('pause_snooze', ['all', 'daily', 'weekly', 'monthly']); - break; case 'viewchange_from_simple': - this._sendReq('viewchange_from_simple', ['all', 'daily', 'weekly', 'monthly']); - break; case 'viewchange_from_detailed': - this._sendReq('viewchange_from_detailed', ['all', 'daily', 'weekly', 'monthly']); - break; case 'viewchange_from_expanded': - this._sendReq('viewchange_from_expanded', ['all', 'daily', 'weekly', 'monthly']); - break; case 'create_account_extension': - this._sendReq('create_account_extension', ['all', 'daily', 'weekly', 'monthly']); - break; case 'create_account_setup': - this._sendReq('create_account_setup', ['all', 'daily', 'weekly', 'monthly']); + this._sendReq(type, ['all', 'daily', 'weekly', 'monthly']); break; // uncaught ping type default: @@ -266,7 +207,7 @@ class Metrics { _buildMetricsUrl(type, frequency) { const frequencyString = (type !== 'uninstall') ? `/${frequency}` : ''; - return `https://${METRICS_SUB_DOMAIN}.ghostery.com/${type}${frequencyString}?gr=-1` + + let metrics_url = `https://${METRICS_SUB_DOMAIN}.ghostery.com/${type}${frequencyString}?gr=-1` + // Old parameters, old names // Human web `&hw=${encodeURIComponent(IS_EDGE ? '0' : (conf.enable_human_web ? '1' : '0'))}` + @@ -278,9 +219,12 @@ class Metrics { `&os=${encodeURIComponent(BROWSER_INFO.os)}` + // Browser language `&l=${encodeURIComponent(conf.language)}` + + // Browser version + `&bv=${encodeURIComponent(BROWSER_INFO.version)}` + + // Old parameters, new names // Offers (former offers) - `&of=${encodeURIComponent(IS_EDGE ? '0' : (conf.enable_offers ? '1' : '0'))}` + + `&of=${encodeURIComponent(IS_EDGE ? '0' : ((conf.enable_offers && abtest.hasTest('offers')) ? '1' : '0'))}` + // Random number, assigned at install (former install_rand) `&ir=${encodeURIComponent(conf.install_random_number)}` + // Login state (former signed_in) @@ -293,10 +237,6 @@ class Metrics { `&pb=${encodeURIComponent(conf.show_alert ? (conf.alert_expanded ? '1' : '2') : '0')}` + // Showing campaign messages (former show_cmp) `&sc=${encodeURIComponent(conf.show_cmp ? '1' : '0')}` + - // Marketing source (Former utm_source) - `&us=${encodeURIComponent(this.utm_source)}` + - // Marketing campaign (Former utm_campaign) - `&uc=${encodeURIComponent(this.utm_campaign)}` + // New parameters, new names // Extension_view - which view of the extension is the user in @@ -315,6 +255,17 @@ class Metrics { `&sb=${encodeURIComponent(conf.setup_block.toString())}` + // Recency, days since last active daily ping `&rc=${encodeURIComponent(this._getRecency().toString())}`; + + if (CAMPAIGN_METRICS.includes(type)) { + // only send campaign attribution when necessary + metrics_url += + // Marketing source (Former utm_source) + `&us=${encodeURIComponent(this.utm_source)}` + + // Marketing campaign (Former utm_campaign) + `&uc=${encodeURIComponent(this.utm_campaign)}`; + } + + return metrics_url; } /** diff --git a/src/classes/PanelData.js b/src/classes/PanelData.js index 71eb99238..84e80fe31 100644 --- a/src/classes/PanelData.js +++ b/src/classes/PanelData.js @@ -15,7 +15,7 @@ */ import _ from 'underscore'; -import Button from './BrowserButton'; +import button from './BrowserButton'; import conf from './Conf'; import foundBugs from './FoundBugs'; import bugDb from './BugDb'; @@ -23,11 +23,11 @@ import globals from './Globals'; import Policy from './Policy'; import tabInfo from './TabInfo'; import abtest from './ABTest'; +import rewards from './Rewards'; import { pushUserSettings, buildUserSettings } from '../utils/accounts'; import { getActiveTab, flushChromeMemoryCache } from '../utils/utils'; import { objectEntries, log } from '../utils/common'; -const button = new Button(); const SYNC_SET = new Set(globals.SYNC_ARRAY); const IS_EDGE = (globals.BROWSER_INFO.name === 'edge'); const { IS_CLIQZ } = globals; @@ -48,6 +48,7 @@ class PanelData { this._panelView = {}; this._summaryView = {}; this._blockingView = {}; + this._rewardsView = {}; this._settingsView = {}; } @@ -80,6 +81,8 @@ class PanelData { return this.summaryView; case 'blocking': return this.blockingView; + case 'rewards': + return this.rewardsView; default: return false; } @@ -171,6 +174,7 @@ class PanelData { enable_ad_block: this._confData.get('enable_ad_block'), enable_anti_tracking: this._confData.get('enable_anti_tracking'), enable_smart_block: this._confData.get('enable_smart_block'), + enable_offers: this._confData.get('enable_offers'), is_expanded: this._confData.get('is_expanded'), is_expert: this._confData.get('is_expert'), is_android: globals.BROWSER_INFO.os === 'android', @@ -183,9 +187,10 @@ class PanelData { needsReload: this._trackerData.get('needsReload'), smartBlock: this._trackerData.get('smartBlock'), tab_id: this._trackerData.get('tab_id'), + unread_offer_ids: rewards.unreadOfferIds, }, summary: this.summaryView, - blocking: this._confData.get('is_expert') ? this.blockingView : false + blocking: this._confData.get('is_expert') ? this.blockingView : false, }; return this._panelView; } @@ -232,6 +237,19 @@ class PanelData { return this._blockingView; } + /** + * Get rewards data for the Rewards View + * @return {Object} Rewards view data + */ + get rewardsView() { + this._rewardsView = { + enable_offers: this._confData.get('enable_offers'), + rewards: rewards.storedOffers, + unread_offer_ids: rewards.unreadOfferIds, + }; + return this._rewardsView; + } + /** * Get conf and tracker data for Settings View. Note we have overlapping properties * from blockView incase the user is in Simple Mode. @@ -250,7 +268,6 @@ class PanelData { enable_human_web: this._confData.get('enable_human_web'), enable_offers: this._confData.get('enable_offers'), enable_metrics: this._confData.get('enable_metrics'), - enable_metrics_abtest: abtest.hasTest('offers'), first_name: this._confData.get('first_name'), last_name: this._confData.get('last_name'), hide_alert_trusted: this._confData.get('hide_alert_trusted'), diff --git a/src/classes/Policy.js b/src/classes/Policy.js index e58020738..4dfd344e0 100644 --- a/src/classes/Policy.js +++ b/src/classes/Policy.js @@ -20,12 +20,23 @@ import conf from './Conf'; import { processUrl } from '../utils/utils'; import globals from './Globals'; -const POLICY_BLOCK_NOTHING = 'POLICY_BLOCK_NOTHING'; -const POLICY_BLOCK_EVERYTHING = 'POLICY_BLOCK_EVERYTHING'; -const POLICY_BLOCK_ADS = 'POLICY_BLOCK_ADS'; +/** + * Enum for reasons returned by shouldBlock + * TBD: See if we can do with integer values for performance. + * @type {string} + */ +export const BLOCK_REASON_BLOCK_PAUSED = 'BLOCK_REASON_BLOCK_PAUSED'; +export const BLOCK_REASON_GLOBAL_BLOCKED = 'BLOCK_REASON_GLOBAL_BLOCKED'; +export const BLOCK_REASON_WHITELISTED = 'BLOCK_REASON_WHITELISTED'; +export const BLOCK_REASON_BLACKLISTED = 'BLOCK_REASON_BLACKLISTED'; +export const BLOCK_REASON_SS_UNBLOCKED = 'BLOCK_REASON_SS_UNBLOCKED'; +export const BLOCK_REASON_SS_BLOCKED = 'BLOCK_REASON_SS_BLOCKED'; +export const BLOCK_REASON_C2P_ALLOWED_ONCE = 'BLOCK_REASON_C2P_ALLOWED_ONCE'; +export const BLOCK_REASON_C2P_ALLOWED_THROUGH = 'BLOCK_REASON_C2P_ALLOWED_THROUGH'; + /** * Class for handling site policy. - * @memberOf BackgroundClasses + * @memberof BackgroundClasses * @todo make it a Singelton ??? */ class Policy { @@ -92,6 +103,12 @@ class Policy { return false; } + /** + * @typedef {Object} BlockWithReason + * @property {boolean} block indicates if the tracker should be blocked. + * @property {string} reason indicates the reason for the block result. + */ + /** * Check the users blocking settings (selected_app_ids and site_specific_blocks/unblocks) * to determine whether a tracker should be blocked @@ -100,35 +117,40 @@ class Policy { * @param {number} tab_id tab id * @param {string} tab_host tab url host * @param {string} tab_url tab url - * @return {boolean} + * @return {BlockWithReason} block result with reason */ shouldBlock(app_id, cat_id, tab_id, tab_host, tab_url) { if (globals.SESSION.paused_blocking) { - return false; + return { block: false, reason: BLOCK_REASON_BLOCK_PAUSED }; } if (conf.selected_app_ids.hasOwnProperty(app_id)) { if (conf.toggle_individual_trackers && conf.site_specific_unblocks.hasOwnProperty(tab_host) && conf.site_specific_unblocks[tab_host].includes(+app_id)) { if (this.blacklisted(tab_url)) { - return !c2pDb.allowedOnce(tab_id, app_id); + const allowedOnce = c2pDb.allowedOnce(tab_id, app_id); + return { block: !allowedOnce, reason: allowedOnce ? BLOCK_REASON_C2P_ALLOWED_ONCE : BLOCK_REASON_BLACKLISTED }; } - return false; + return { block: false, reason: BLOCK_REASON_SS_UNBLOCKED }; } if (this.whitelisted(tab_url)) { - return false; + return { block: false, reason: BLOCK_REASON_WHITELISTED }; } - return !c2pDb.allowedOnce(tab_id, app_id); + const allowedOnce = c2pDb.allowedOnce(tab_id, app_id); + return { block: !allowedOnce, reason: allowedOnce ? BLOCK_REASON_C2P_ALLOWED_ONCE : BLOCK_REASON_GLOBAL_BLOCKED }; } + // We get here when app_id is not selected for blocking if (conf.toggle_individual_trackers && conf.site_specific_blocks.hasOwnProperty(tab_host) && conf.site_specific_blocks[tab_host].includes(+app_id)) { if (this.whitelisted(tab_url)) { - return false; + return { block: false, reason: BLOCK_REASON_WHITELISTED }; } - return !c2pDb.allowedOnce(tab_id, app_id); + const allowedOnce = c2pDb.allowedOnce(tab_id, app_id); + return { block: !allowedOnce, reason: allowedOnce ? BLOCK_REASON_C2P_ALLOWED_ONCE : BLOCK_REASON_SS_BLOCKED }; } if (this.blacklisted(tab_url)) { - return !c2pDb.allowedOnce(tab_id, app_id); + const allowedOnce = c2pDb.allowedOnce(tab_id, app_id); + return { block: !allowedOnce, reason: allowedOnce ? BLOCK_REASON_C2P_ALLOWED_ONCE : BLOCK_REASON_BLACKLISTED }; } - return false; + return { block: false, reason: BLOCK_REASON_GLOBAL_BLOCKED }; } } diff --git a/src/classes/PolicySmartBlock.js b/src/classes/PolicySmartBlock.js index 808fc50c6..547844085 100644 --- a/src/classes/PolicySmartBlock.js +++ b/src/classes/PolicySmartBlock.js @@ -1,7 +1,7 @@ /** - * Site Policy Class + * Smart Blocking Policy Class * - * Handles whitelist and blacklist functionality + * Handles policy for Smart Blocking * * Ghostery Browser Extension * https://www.ghostery.com/ @@ -41,7 +41,7 @@ class PolicySmartBlock { * Determine if the tracker should be unblocked on a particular site to prevent site breaking. * @param {string} appId tracker id * @param {string} catId category id - * @param {number} tabId tab id + * @param {number} tabId tab id * @param {string} pageURL tab url * @param {string} requestType type of the request * @return {boolean} true if one of the conditions is met, false they are not @@ -50,35 +50,30 @@ class PolicySmartBlock { shouldUnblock(appId, catId, tabId, pageURL, requestType) { if (!this.shouldCheck(tabId, appId)) { return false; } - // allow if tracker is in compatibility list - if (this._appHasKnownIssue(tabId, appId, pageURL)) { - return true; - } - - // allow if tracker is in breaking category - if (this._allowedCategories(tabId, appId, catId)) { - return true; - } + let reason; - // allow if tracker is in breaking type - if (this._allowedTypes(tabId, appId, requestType)) { - return true; + if (this._appHasKnownIssue(tabId, appId, pageURL)) { + reason = 'hasIssue'; // allow if tracker is in compatibility list + } else if (this._allowedCategories(tabId, appId, catId)) { + reason = 'allowedCategory'; // allow if tracker is in breaking category + } else if (this._allowedTypes(tabId, appId, requestType)) { + reason = 'allowedType'; // allow if tracker is in breaking type + } else if (this._pageWasReloaded(tabId, appId)) { + reason = 'pageReloaded'; // allow if page has been reloaded recently } - // allow if page has been reloaded recently - if (this._pageWasReloaded(tabId, appId)) { + if (reason) { + tabInfo.setTabSmartBlockAppInfo(tabId, appId, reason, false); return true; } - // TODO tabInfo.setTabSmartBlockAppInfo() should happen here - return false; } /** * Determine if the tracker should be blocked on a particular site to prevent site breaking. * @param {string} appId tracker id * @param {string} catId category id - * @param {number} tabId tab id + * @param {number} tabId tab id * @param {string} pageURL tab url * @param {string} requestType type of the request * @return {boolean} true if one of the conditions is met, false they are not @@ -87,34 +82,35 @@ class PolicySmartBlock { shouldBlock(appId, catId, tabId, pageURL, requestType, requestTimestamp) { if (!this.shouldCheck(tabId, appId)) { return false; } + let reason; + // block if it's been more than 5 seconds since page load started if (this._requestWasSlow(tabId, appId, requestTimestamp)) { - // allow if tracker is in compatibility list - if (this._appHasKnownIssue(tabId, appId, pageURL)) { - return true; - } - - // allow if tracker is in breaking category - if (this._allowedCategories(tabId, appId, catId)) { - return true; - } + reason = 'slow'; - // allow if tracker is in breaking type - if (this._allowedTypes(tabId, appId, requestType)) { - return true; - } - - // allow if page has been reloaded recently - if (this._pageWasReloaded(tabId, appId)) { - return true; + if (this._appHasKnownIssue(tabId, appId, pageURL)) { + reason = 'hasIssue'; // allow if tracker is in compatibility list + } else if (this._allowedCategories(tabId, appId, catId)) { + reason = 'allowedCategory'; // allow if tracker is in breaking category + } else if (this._allowedTypes(tabId, appId, requestType)) { + reason = 'allowedType'; // allow if tracker is in breaking type + } else if (this._pageWasReloaded(tabId, appId)) { + reason = 'pageReloaded'; // allow if page has been reloaded recently } } - // TODO tabInfo.setTabSmartBlockAppInfo() should happen here + const result = (reason === 'slow'); + if (result) { + // We don't want record in tabInfo reasons other than 'slow' + // Smart blocking should not claim that it unblock trackers which were unlocked + // for other reasons before shouldBlock was called for them. + tabInfo.setTabSmartBlockAppInfo(tabId, appId, 'slow', true); + } - return false; + return result; } + /** * Check if Smart Block should proceed based on: * 1. Smart Block is enabled @@ -122,6 +118,9 @@ class PolicySmartBlock { * 3. Page is neither whitelisted or blacklisted * 4. Tracker is not site-specific unblocked * 5. Tracker is not site-specific blocked + * + * @param {number} tabId tab id + * @param {string | boolean} appId tracker id * @return {boolean} */ shouldCheck(tabId, appId = false) { @@ -137,10 +136,11 @@ class PolicySmartBlock { ); } - // TODO: this check will still fail when pageHost is "foo.bar.domain.com" - // and requestHost is "some.other.subdomain.domain.com" /** * Check if request host matches page host + * @TODO: this check will still fail when pageHost is "foo.bar.domain.com" + * and requestHost is "some.other.subdomain.domain.com" + * @param {number} tabId tab id * @param {string} pageHost host of the page url * @param {string} requestHost host of the request url * @return {boolean} @@ -164,75 +164,68 @@ class PolicySmartBlock { } /** - * Check if tab was reloaded - * @param {string} tabId tab id + * Check if tab was reloaded. + * @param {number} tabId tab id + * @param {string} appId app id * @return {boolean} */ _pageWasReloaded(tabId, appId) { - const checks = tabInfo.getTabInfo(tabId, 'reloaded') || false; - if (checks) { - tabInfo.setTabSmartBlockAppInfo(tabId, appId, 'pageReloaded', false); - } - - return checks; + return tabInfo.getTabInfo(tabId, 'reloaded') || false; } /** - * Check if app has a known issue with a URL - * @param {string} appId tracker id - * @param {string} pageURL tab url - * @return {boolean} + * Check if app has a known issue with a URL. + * @param {number} tabId tab id + * @param {string} appId tracker id + * @param {string} pageURL tab url + * @return {boolean} */ _appHasKnownIssue(tabId, appId, pageURL) { - const checks = compDb.hasIssue(appId, pageURL); - if (checks) { - tabInfo.setTabSmartBlockAppInfo(tabId, appId, 'hasIssue', false); - } - - return checks; + return compDb.hasIssue(appId, pageURL); } /** * Check if HTTP or WS (insecure web socket) request is loading on a HTTPS page - * @param {string} pageProtocol protocol of the tab url - * @param {string} requestProtocol protocol of the request url - * @return {boolean} + * @param {number} tabId tab id + * @param {string} pageProtocol protocol of the tab url + * @param {string} requestProtocol protocol of the request url + * @param {string} requestHost host of the request url + * @return {boolean} */ - isInsecureRequest(tabId, pageProtocol, requestProtocol) { + isInsecureRequest(tabId, pageProtocol, requestProtocol, requestHost) { if (!this.shouldCheck(tabId)) { return false; } - const checks = ( + // don't block mixed content from localhost + if (requestHost === 'localhost' || requestHost === '127.0.0.1') { + return false; + } + + return ( pageProtocol === 'https' && (requestProtocol === 'http' || requestProtocol === 'ws') || false ); - if (checks) { - // tabInfo.setTabSmartBlockInfo(tabId, 'isInsecure'); - } - - return checks; } /** * Check if given category is in the list of whitelisted categories - * @param {string} catId category id + * @param {number} tabId tab id + * @param {string} appId tracker id + * @param {string} catId category id * @return {boolean} */ _allowedCategories(tabId, appId, catId) { - const checks = this.allowedCategoriesList.includes(catId); - if (checks) { - tabInfo.setTabSmartBlockAppInfo(tabId, appId, 'allowedCategory', false); - } - - return checks; + return this.allowedCategoriesList.includes(catId); } + /** + * Check if given request type is in the list of whitelisted requests + * @param {number} tabId tab id + * @param {string} appId tracker id + * @param {string} requestType request type + * @return {boolean} + */ _allowedTypes(tabId, appId, requestType) { - const checks = this.allowedTypesList.includes(requestType); - if (checks) { - tabInfo.setTabSmartBlockAppInfo(tabId, appId, 'allowedType', false); - } - - return checks; + return this.allowedTypesList.includes(requestType); } /** @@ -252,20 +245,16 @@ class PolicySmartBlock { } /** - * Check if request loaded after a threshhold time since page load - * @param {string} tabId tab id - * @param {number} requestTimestamp timestamp of the request - * @return {boolean} + * Check if request loaded after a threshhold time since page load. + * @param {string} tabId tab id + * @param {string} appId tracker id + * @param {number} requestTimestamp timestamp of the request + * @return {boolean} */ _requestWasSlow(tabId, appId, requestTimestamp) { const THRESHHOLD = 5000; // 5 seconds const pageTimestamp = tabInfo.getTabInfo(tabId, 'timestamp'); - const checks = (requestTimestamp - pageTimestamp > THRESHHOLD) || false; - if (checks) { - tabInfo.setTabSmartBlockAppInfo(tabId, appId, 'slow', true); - } - - return checks; + return (requestTimestamp - pageTimestamp > THRESHHOLD) || false; } } diff --git a/src/classes/PurpleBox.js b/src/classes/PurpleBox.js index 8bdb07d06..c22088ef1 100644 --- a/src/classes/PurpleBox.js +++ b/src/classes/PurpleBox.js @@ -45,11 +45,11 @@ class PurpleBox { */ createBox(tab_id) { const tab = tabInfo.getTabInfo(tab_id); - // If the tab is prefetched, we can't add purplebox to it. + // Skip in the event of pause, trust, prefetching, newtab page, or Firefox about:pages if (!conf.show_alert || globals.SESSION.paused_blocking || (conf.hide_alert_trusted && !!this.policy.whitelisted(tab.url)) || - !tab || tab.purplebox || globals.EXCLUDES.includes(tab.host)) { + !tab || tab.purplebox || tab.path.includes('_/chrome/newtab') || tab.protocol === 'about' || globals.EXCLUDES.includes(tab.host)) { return Promise.resolve(false); } diff --git a/src/classes/Rewards.js b/src/classes/Rewards.js new file mode 100644 index 000000000..e06932fd6 --- /dev/null +++ b/src/classes/Rewards.js @@ -0,0 +1,132 @@ +/** + * Rewards Class + * + * Ghostery Browser Extension + * https://www.ghostery.com/ + * + * Copyright 2018 Ghostery, Inc. All rights reserved. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0 + */ + +/* eslint consistent-return: 0 */ + +import button from './BrowserButton'; +import cliqz from './Cliqz'; +import conf from './Conf'; +import tabInfo from './TabInfo'; +import Policy from './Policy'; +import globals from './Globals'; +import { log } from '../utils/common'; +import { sendMessage, injectScript } from '../utils/utils'; +import * as accounts from '../utils/accounts'; + +const t = chrome.i18n.getMessage; +/** + * Class for handling Ghostery Rewards Box overlay. + * @memberOf BackgroundClasses + * @todo make it a Singelton + */ +class Rewards { + constructor() { + this.storedOffers = {}; + this.unreadOfferIds = []; + this.currentOffer = null; + this.ports = new Map(); + this.channelsSupported = (typeof chrome.runtime.onConnect === 'object'); + } + + deleteReward(offerId) { + this.markRewardRead(offerId); + delete this.storedOffers[offerId]; + // @TODO send signal? + } + + markRewardRead(offerId) { + const rewardIdx = this.unreadOfferIds.indexOf(offerId); + this.unreadOfferIds.splice(rewardIdx, 1); + } + + sendSignal(message) { + const { offerId, actionId } = message; + const signal = { + origin: 'ghostery', + type: 'action-signal', + data: { + action_id: actionId, + offer_id: offerId + } + }; + cliqz.modules['offers-v2'].background.actions.processRealEstateMessage(signal); + } + + showHotDog(tab_id, offer) { + this.currentOffer = offer; + const tab = tabInfo.getTabInfo(tab_id); + + // If the tab is prefetched, we can't add purplebox to it. + if (!conf.enable_offers || + !tab || tab.rewards) { + return Promise.resolve(false); + } + + // Inject script cannot handle errors properly, but we call createBox after verifying that the tab is OK + // So update hotdog status for this tab + // tabInfo.setTabInfo(tab_id, 'rewards', true); + if (this.channelsSupported) { + if (this.ports.has(tab_id)) { + this.ports.get(tab_id).disconnect(); + this.ports.delete(tab_id); + } + if (!this.connectListenerAdded) { + this.connectListenerAdded = true; + chrome.runtime.onConnect.addListener((port) => { + if (port && port.name === 'rewardsPort' && port.sender && port.sender.tab && port.sender.tab.id) { + const tabId = port.sender.tab.id; + if (!this.ports.has(tabId)) { + this.ports.set(tabId, port); + this.ports.get(tabId).onMessage.addListener((message) => { + switch (message.name) { + case 'rewardsLoaded': + this.ports.get(tabId).postMessage({ + name: 'showHotDog', + reward: this.currentOffer, + conf: { + rewardsPromptAccepted: conf.rewards_accepted + } + }); + break; + case 'rewardSignal': + this.sendSignal(message.message); + break; + case 'rewardsDisabled': + conf.enable_offers = false; + break; + case 'rewardsPromptAccepted': + // @TODO set conf disabled + conf.rewards_accepted = true; + break; + case 'rewardSeen': + this.markRewardRead(message.offerId); + button.update(); + break; + default: + break; + } + }); + } + } + }); + } + } + + return injectScript(tab_id, 'dist/rewards.js', 'dist/css/rewards_styles.css', 'document_start').catch((err) => { + log('rewards injectScript error', err); + return false; + }); + } +} + +export default new Rewards(); diff --git a/src/classes/TabInfo.js b/src/classes/TabInfo.js index df3423490..1a726702f 100644 --- a/src/classes/TabInfo.js +++ b/src/classes/TabInfo.js @@ -55,6 +55,7 @@ class TabInfo { partialScan: true, prefetched: false, purplebox: false, + rewards: false, timestamp: Date.now(), // assign only when smartBlock is enabled so avoid false positives // when enabling smartBlock is enabled for the first time diff --git a/src/utils/accounts.js b/src/utils/accounts.js index e8d8134cf..18c1e5176 100644 --- a/src/utils/accounts.js +++ b/src/utils/accounts.js @@ -534,11 +534,13 @@ function _refreshToken() { return new Promise((resolve, reject) => { if (!conf.login_info.logged_in) { resolve('User not logged in'); + return; } const decoded_user_token = conf.login_info.decoded_user_token; if (!decoded_user_token || !decoded_user_token.exp) { reject('User token is corrupted or null'); + return; } const currentTime = (new Date()).getTime(); diff --git a/src/utils/click2play.js b/src/utils/click2play.js index 4b109acba..fab3b9ca0 100644 --- a/src/utils/click2play.js +++ b/src/utils/click2play.js @@ -225,8 +225,8 @@ function _injectClickToPlay(tab_id) { } const tab = tabInfo.getTabInfo(tab_id); - if (!tab || tab.prefetched || globals.EXCLUDES.includes(tab.host)) { - // If the tab is prefetched, we can't add C2P to it. + if (!tab || tab.prefetched || tab.path.includes('_/chrome/newtab') || tab.protocol === 'about' || globals.EXCLUDES.includes(tab.host)) { + // If the tab is prefetched, a chrome newtab or Firefox about:page, we can't add C2P to it. return Promise.resolve(true); } diff --git a/src/utils/matcher.js b/src/utils/matcher.js index 690bdb23a..4b0b31123 100644 --- a/src/utils/matcher.js +++ b/src/utils/matcher.js @@ -31,10 +31,9 @@ import { log } from './common'; */ export function isBug(src, tab_url) { const { db } = bugDb; - const processedSrc = processUrl(src); + const processedSrc = processUrl(src.toLowerCase()); let found = false; - found = // pattern classification 2: check host+path hash _matchesHost(db.patterns.host_path, processedSrc.host, processedSrc.path) || @@ -57,6 +56,7 @@ export function isBug(src, tab_url) { return found; } + /** * Determine if a url matches an entry in an array urls. * The matching is permissive. @@ -68,7 +68,7 @@ export function isBug(src, tab_url) { * @return {boolean} true if match is found, false otherwise */ export function fuzzyUrlMatcher(url, urls) { - const parsed = processUrl(url); + const parsed = processUrl(url.toLowerCase()); let tab_host = parsed.host; const tab_path = parsed.path; @@ -99,6 +99,7 @@ export function fuzzyUrlMatcher(url, urls) { } return false; } + /** * Determine if a path part of an url matches to a path property * of a node in an array of json nodes with paths. @@ -129,6 +130,7 @@ function _matchesHostPath(roots, src_path) { return false; } + /** * Use host and path parts of a url to traverse database trie node * looking for matching parts. Reaching the leaf would yeild bug id. @@ -201,6 +203,7 @@ function _matchesRegex(src) { return false; } + /** * Match a path part of a url agains the path property of database patterns section. * @private @@ -208,7 +211,8 @@ function _matchesRegex(src) { * @param {string} src_path path part of an url * * @return {int|boolean} bug id or false if the match was not found - */ function _matchesPath(src_path) { + */ +function _matchesPath(src_path) { const paths = bugDb.db.patterns.path; // NOTE: we re-add the "/" in order to match patterns that include "/" diff --git a/src/utils/utils.js b/src/utils/utils.js index 2b1f1a381..868b7eb4c 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -527,6 +527,10 @@ export function fetchLocalJSONResource(url) { /** * Inject content scripts and CSS into a given tabID. + * Note: Chrome 61 blocks content scripts on the new tab page (_/chrome/newtab). Be + * sure to check the current URL before calling this function, otherwise Chrome will throw + * a permission error + * * @memberOf BackgroundUtils * * @param {number} tabId tab id @@ -541,10 +545,16 @@ export function injectScript(tabId, scriptfile, cssfile, runAt) { if (chrome.runtime.lastError) { log('injectScript error', chrome.runtime.lastError); reject(new Error(chrome.runtime.lastError)); + return; } if (cssfile) { chrome.tabs.insertCSS(tabId, { file: cssfile, runAt }, () => { + if (chrome.runtime.lastError) { + log('insertCSS error', chrome.runtime.lastError); + reject(new Error(chrome.runtime.lastError)); + return; + } resolve(); }); } else { @@ -568,8 +578,8 @@ export function injectNotifications(tab_id, importExport = false) { return Promise.resolve(true); } const tab = tabInfo.getTabInfo(tab_id); - // check for prefetching and chrome new tab page - if (tab && tab.prefetched === true || (tab.path && tab.path.includes('_/chrome/newtab')) || (!importExport && globals.EXCLUDES.includes(tab.host))) { + // check for prefetching, chrome new tab page and Firefox about:pages + if (tab && tab.prefetched === true || tab.path.includes('_/chrome/newtab') || tab.protocol === 'about' || (!importExport && globals.EXCLUDES.includes(tab.host))) { // return false to prevent sendMessage calls return Promise.resolve(false); } diff --git a/test/setup.js b/test/setup.js index 81935f914..fb3a6f56d 100644 --- a/test/setup.js +++ b/test/setup.js @@ -11,9 +11,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0 */ -//Set stubs for all chrome.* methods and properties +// Set stubs for all chrome.* methods and properties import chrome from 'sinon-chrome'; +// Set up Enzyme for React Snapshot testing +import Enzyme from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; +Enzyme.configure({ adapter: new Adapter() }); + // Create global stubs global.chrome = chrome; chrome.runtime.getManifest.returns({ diff --git a/test/src/matcher.test.js b/test/src/matcher.test.js index 9756dd080..b77509948 100644 --- a/test/src/matcher.test.js +++ b/test/src/matcher.test.js @@ -67,6 +67,9 @@ describe('src/utils/matcher.js', () => { } } } + }, + "path": { + "js/tracking.js": 13 } } }); @@ -101,8 +104,18 @@ describe('src/utils/matcher.js', () => { } describe('testing isBug()', () => { - test('basic tracker detection works', () => { - return expect(isBug('https://apis.google.com/js/plusone.js', 'example.com')).toBe(1240); + describe('testing basic pattern matching', () => { + test('host+path tracker matching works', () => { + return expect(isBug('https://apis.google.com/js/plusone.js', 'example.com')).toBe(1240); + }); + + test('path only tracker matching works', () => { + return expect(isBug('https://apis.google.com/js/tracking.js', 'example.com')).toBe(13); + }); + + test('pattern matching is case insensitive', () => { + return expect(isBug('https://APIS.Google.com/js/Tracking.js', 'example.com')).toBe(13); + }); }); describe('testing isBug() first party exceptions for twitter', () => { diff --git a/tools/edge/appxmanifest.xml b/tools/edge/appxmanifest.xml new file mode 100644 index 000000000..f52edbe50 --- /dev/null +++ b/tools/edge/appxmanifest.xml @@ -0,0 +1,69 @@ + + + + + ms-resource:DisplayName + Ghostery + Assets/icon50.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/edge/assets/icon150.png b/tools/edge/assets/icon150.png new file mode 100644 index 000000000..41e6d0266 Binary files /dev/null and b/tools/edge/assets/icon150.png differ diff --git a/tools/edge/assets/icon44.png b/tools/edge/assets/icon44.png new file mode 100644 index 000000000..0cbfa8c55 Binary files /dev/null and b/tools/edge/assets/icon44.png differ diff --git a/tools/edge/assets/icon50.png b/tools/edge/assets/icon50.png new file mode 100644 index 000000000..f33aad25e Binary files /dev/null and b/tools/edge/assets/icon50.png differ diff --git a/tools/edge/priconfig.xml b/tools/edge/priconfig.xml new file mode 100644 index 000000000..a411314c7 --- /dev/null +++ b/tools/edge/priconfig.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/edge/resources/de/resources.resjson b/tools/edge/resources/de/resources.resjson new file mode 100644 index 000000000..8952f7d26 --- /dev/null +++ b/tools/edge/resources/de/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – datenschutzorientierter Werbeblocker","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – datenschutzorientierter Werbeblocker","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery ist eine leistungsstarke Datenschutz-Erweiterung. Damit können Sie Werbung blockieren, Tracker stoppen und Websites beschleunigen.","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/en/resources.resjson b/tools/edge/resources/en/resources.resjson new file mode 100644 index 000000000..e2476609e --- /dev/null +++ b/tools/edge/resources/en/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – Privacy Ad Blocker","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – Privacy Ad Blocker","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery is a powerful privacy extension. Block ads, stop trackers and speed up websites.","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/es/resources.resjson b/tools/edge/resources/es/resources.resjson new file mode 100644 index 000000000..e983934cc --- /dev/null +++ b/tools/edge/resources/es/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – Bloqueador de anuncios para privacidad","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – Bloqueador de anuncios para privacidad","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery es una potente extensión para tu privacidad. Bloquea anuncios, detiene rastreadores y acelera sitios web.","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/fr/resources.resjson b/tools/edge/resources/fr/resources.resjson new file mode 100644 index 000000000..94fa3e108 --- /dev/null +++ b/tools/edge/resources/fr/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – Bloqueur de publicité protégeant la vie privée","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – Bloqueur de publicité protégeant la vie privée","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery est une puissante extension de protection de la vie privée. Bloquez les publicités, déjouez les outils de pistage et accélérez les sites Web.","_Description.comment":"Court descriptif de cette extension (Ghostery)."} diff --git a/tools/edge/resources/hu/resources.resjson b/tools/edge/resources/hu/resources.resjson new file mode 100644 index 000000000..ce22661c0 --- /dev/null +++ b/tools/edge/resources/hu/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – Adatavédelmi Reklámblokkoló","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – Adatavédelmi Reklámblokkoló","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ennek a kiegészítőnek a rövid leírása. Blokkolja a reklámokat, leállítja a trackereket (követőalkalmazások) és felgyorsítja a weboldalakat.","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/it/resources.resjson b/tools/edge/resources/it/resources.resjson new file mode 100644 index 000000000..ae047ff14 --- /dev/null +++ b/tools/edge/resources/it/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – Ad Blocker per la Privacy","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – Ad Blocker per la Privacy","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery è una potente estensione per la protezione della privacy. Blocca pubblicità e tracker, e accelera i siti web.","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/ja/resources.resjson b/tools/edge/resources/ja/resources.resjson new file mode 100644 index 000000000..9e0921418 --- /dev/null +++ b/tools/edge/resources/ja/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – プライバシー広告ブロッカー","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – プライバシー広告ブロッカー","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghosteryは強力なプライバシー拡張機能です。広告をブロックし、トラッカーを阻止し、ウェブサイトを高速化します。","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/ko/resources.resjson b/tools/edge/resources/ko/resources.resjson new file mode 100644 index 000000000..ae3c2e3ee --- /dev/null +++ b/tools/edge/resources/ko/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – 개인정보 보호용 광고 차단기","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – 개인정보 보호용 광고 차단기","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery는 강력한 개인정보 보호 확장 프로그램입니다. 광고와 트래커를 차단하고 웹 사이트의 속도를 높여줍니다.","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/nl/resources.resjson b/tools/edge/resources/nl/resources.resjson new file mode 100644 index 000000000..7d2c709b6 --- /dev/null +++ b/tools/edge/resources/nl/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – Privacy Ad Blocker","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – Privacy Ad Blocker","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery is een krachtige privacy extensie. Blokkeer ads, stop trackers en maak websites sneller,","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/pl/resources.resjson b/tools/edge/resources/pl/resources.resjson new file mode 100644 index 000000000..39ce486fb --- /dev/null +++ b/tools/edge/resources/pl/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – Bloker reklam chroniący prywatność","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – Bloker reklam chroniący prywatność","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery to potężne rozszerzenie do ochrony prywatności. Blokuje reklamy, wstrzymuje tropiciele i przyspiesza działanie stron internetowych.","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/pt-br/resources.resjson b/tools/edge/resources/pt-br/resources.resjson new file mode 100644 index 000000000..54f11078e --- /dev/null +++ b/tools/edge/resources/pt-br/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – Bloqueador de anúncios para privacidade","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – Bloqueador de anúncios para privacidade","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"O Ghostery é uma poderosa extensão de privacidade. Bloqueie anúncios, interrompa rastreadores e acelere sites.","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/ru/resources.resjson b/tools/edge/resources/ru/resources.resjson new file mode 100644 index 000000000..cbfe33286 --- /dev/null +++ b/tools/edge/resources/ru/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – Конфиденциальный Блокировщик Рекламы","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – Конфиденциальный Блокировщик Рекламы","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery - это мощное расширение для обеспечения конфиденциальности. Блокируйте рекламу, отключайте средства слежения и ускоряйте загрузку веб-сайтов.","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/zh-cn/resources.resjson b/tools/edge/resources/zh-cn/resources.resjson new file mode 100644 index 000000000..028f7bab4 --- /dev/null +++ b/tools/edge/resources/zh-cn/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery – 隐私广告拦截工具","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery – 隐私广告拦截工具","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery 是强大的隐私保护扩展程序。拦截广告,停止跟踪器,提高网站速度。","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/tools/edge/resources/zh-tw/resources.resjson b/tools/edge/resources/zh-tw/resources.resjson new file mode 100644 index 000000000..11d8c505d --- /dev/null +++ b/tools/edge/resources/zh-tw/resources.resjson @@ -0,0 +1 @@ +{"DisplayName":"Ghostery –隱私廣告攔截器","_DisplayName.comment":"The title of this extension (Ghostery).","PublisherName":"Ghostery –隱私廣告攔截器","_PublisherName.comment":"The title of this extension (Ghostery).","Description":"Ghostery是一個強效的隱私擴增功能。攔截廣告、制止追蹤器及加快網頁運行。","_Description.comment":"A short description of this extension (Ghostery)."} diff --git a/webpack.config.js b/webpack.config.js index 026df3888..4f8ad8df7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -15,7 +15,7 @@ const glob = require('glob'); const path = require('path'); const webpack = require('webpack'); -const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const WebpackShellPlugin = require('webpack-shell-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const spawnSync = require('child_process').spawnSync; @@ -27,14 +27,15 @@ const SRC_DIR = path.resolve(__dirname, 'src'); const PANEL_DIR = path.resolve(__dirname, 'app/panel'); const SETUP_DIR = path.resolve(__dirname, 'app/setup'); const LICENSES_DIR = path.resolve(__dirname, 'app/licenses'); +const REWARDS_DIR = path.resolve(__dirname, 'app/rewards'); const SASS_DIR = path.resolve(__dirname, 'app/scss'); const CONTENT_SCRIPTS_DIR = path.resolve(__dirname, 'app/content-scripts'); const RM = (process.platform === 'win32') ? 'powershell remove-item' : 'rm'; // webpack plugins -const extractSass = new ExtractTextPlugin({ - filename: 'css/[name].css', - disable: false + +const extractSass = new MiniCssExtractPlugin({ + filename: "css/[name].css" }); // @TODO: Refactor so this isn't necessary @@ -46,7 +47,8 @@ const cleanTmpStyleFiles = new WebpackShellPlugin({ `${RM} ./dist/panel_android.js`, `${RM} ./dist/purplebox_styles.js`, `${RM} ./dist/setup.js`, - `${RM} ./dist/ghostery_dot_com_css.js` + `${RM} ./dist/ghostery_dot_com_css.js`, + `${RM} ./dist/rewards_styles.js` ] }); @@ -56,7 +58,7 @@ const t = function (messageName, substitutions) { const lintOnChange = function() { // @TODO: Why it fails on Windows? - if (process.argv.includes('--env.nolint') || + if ((process.argv.includes('--env.nolint') || process.env.NO_LINT) || process.platform === 'win32') { return; } @@ -64,38 +66,31 @@ const lintOnChange = function() { if (process.argv.includes('--env.fix')) { args.push('--', '--fix') } - lint = spawnSync('npm', args, { stdio: 'inherit'}); + let lint = spawnSync('npm', args, { stdio: 'inherit'}); if (lint.status !== 0) { process.exit(lint.status); } }; lintOnChange.prototype.apply = function(compiler) { - if (process.argv.includes('--env.prod') || process.argv.includes('--env.nolint')) { + if (process.argv.includes('--env.prod') || (process.argv.includes('--env.nolint') || process.env.NO_LINT)) { return; } - compiler.plugin('emit', function(compilation, callback) { - let changedFiles = Object.keys(compilation.fileTimestamps).filter(function(watchfile) { - return (this.prevTimestamps[watchfile] || this.startTime) < (compilation.fileTimestamps[watchfile] || Infinity); - }.bind(this)); - - changedFiles = changedFiles.filter((file) => { + compiler.plugin("done", () => { + const changedTimes = compiler.watchFileSystem.watcher.mtimes; + const changedFiles = Object.keys(changedTimes).filter((file) => { return file.indexOf('.js') !== -1; }); - - if(changedFiles.length > 0) { + if (changedFiles.length) { const args = ['run', 'lint.raw', '--', ...changedFiles]; if (process.argv.includes('--env.fix')) { args.push('--fix') } - lint = spawnSync('npm', args, { stdio: 'inherit'}); + setTimeout(() => { + spawnSync('npm', args, { stdio: 'inherit'}); + }); } - - this.startTime = Date.now(); - this.prevTimestamps = {}; - - callback(); - }.bind(this)); + }); }; const buildPlugins = [ @@ -107,44 +102,10 @@ const buildPlugins = [ new webpack.DefinePlugin({ 't': t, }), - new webpack.DefinePlugin({ - 'process.env': { - 'NODE_ENV': JSON.stringify(process.env.NODE_ENV) - } - }), new webpack.BannerPlugin({ banner: "if(typeof browser!=='undefined'){chrome=browser;}", raw: true, include: /\.js$/ - }), - new webpack.optimize.CommonsChunkPlugin({ - name: "browser-core", - filename: "browser-core.js", - chunks: ['background'], - minChunks: function (module) { - return module.context - && module.context.includes('browser-core'); - } - }), - new webpack.optimize.CommonsChunkPlugin({ - name: "vendor", - chunks: ['background', 'browser-core'], - minChunks: function (module) { - return module.context - && module.context.includes('node_modules') - && !module.context.includes('browser-core'); - } - }), - new webpack.optimize.CommonsChunkPlugin({ - name: "vendor-panel", - chunks: ['panel_react'], - minChunks: function (module) { - return module.context && module.context.includes("node_modules"); - } - }), - new webpack.SourceMapDevToolPlugin({ - filename: "sourcemaps/[file].map", - include: ["panel_react.js", "browser-core.js", "background.js"] }) ]; @@ -158,6 +119,7 @@ const config = { notifications: [CONTENT_SCRIPTS_DIR + '/notifications.js'], page_performance: [CONTENT_SCRIPTS_DIR + '/page_performance.js'], platform_pages: [CONTENT_SCRIPTS_DIR + '/platform_pages.js'], + rewards: [CONTENT_SCRIPTS_DIR + '/rewards'], purplebox: [CONTENT_SCRIPTS_DIR + '/purplebox.js'], content_script_bundle: [CLIQZ_DIR + '/core/content-script.bundle.js'], panel_react: [PANEL_DIR + '/index.jsx'], @@ -170,7 +132,10 @@ const config = { purplebox_styles: [SASS_DIR + '/purplebox.scss'], setup: [SASS_DIR + '/setup.scss'], licenses: [SASS_DIR + '/licenses.scss'], + rewards_styles: [SASS_DIR + '/rewards.scss'], }, + devtool: 'none', + performance: { hints: false }, output: { filename: '[name].js', path: BUILD_DIR @@ -188,25 +153,25 @@ const config = { loader: 'html-loader' } },{ - test : /\.jsx?/, - include : [PANEL_DIR, SETUP_DIR, LICENSES_DIR], + test : /\.(jsx|js)?/, + include : [PANEL_DIR, SETUP_DIR, LICENSES_DIR, CONTENT_SCRIPTS_DIR, REWARDS_DIR], use: { loader: 'babel-loader' } },{ test: /\.scss?/, - use: extractSass.extract({ - use: [{ - loader: 'css-loader' - }, { - loader: 'sass-loader', - options: { - includePaths: [path.resolve(__dirname, 'node_modules/foundation-sites/scss')] - } - }], - // use style-loader in development - fallback: 'style-loader' - }) + use: [ + MiniCssExtractPlugin.loader, + { + loader: "css-loader" + }, { + loader: "sass-loader", + options: { + includePaths: [ + path.resolve(__dirname, 'node_modules/foundation-sites/scss'), + ] + } + }] },{ test: /\.svg$/, loader: 'svg-url-loader'