diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..17cd3d69e4d288748253e54a11147dffc3249969 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +.babel_cache/* +docs/* +OSX/* +target/* + +**metabase.jar diff --git a/Dockerfile b/Dockerfile index 134bf36af67219343aa863496f7966c61f253365..e4a6dec22db4b30393e7e8beeee2c72849aecfd2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,21 @@ -FROM ubuntu:trusty +FROM java:openjdk-7-jre-alpine -# Make sure we are using UTF-8 -RUN locale-gen en_US.UTF-8 -ENV LANG en_US.UTF-8 -ENV LANGUAGE en_US:en -ENV LC_ALL en_US.UTF-8 - -ENV DEBIAN_FRONTEND noninteractive -ENV DEBCONF_NONINTERACTIVE_SEEN true +ENV JAVA_HOME=/usr/lib/jvm/default-jvm +ENV PATH /usr/local/bin:$PATH +ENV LEIN_ROOT 1 # install core build tools -RUN apt-get update && \ - apt-get install -y openjdk-7-jdk && \ - apt-get install -y nodejs && \ - apt-get install -y npm && \ - apt-get install -y git && \ - apt-get install -y wget +RUN apk add --update nodejs git wget bash python make g++ java-cacerts && \ + ln -sf "${JAVA_HOME}/bin/"* "/usr/bin/" + +# fix broken cacerts +RUN rm -f /usr/lib/jvm/default-jvm/jre/lib/security/cacerts && \ + ln -s /etc/ssl/certs/java/cacerts /usr/lib/jvm/default-jvm/jre/lib/security/cacerts + +# install lein ADD https://raw.github.com/technomancy/leiningen/stable/bin/lein /usr/local/bin/lein RUN chmod 744 /usr/local/bin/lein -# little bit of cleanup so that our build process will work -ENV PATH /usr/local/bin:$PATH -ENV LEIN_ROOT 1 -RUN ln -s /usr/bin/nodejs /usr/bin/node - # add the application source to the image ADD . /app/source @@ -31,6 +23,10 @@ ADD . /app/source WORKDIR /app/source RUN bin/build +# remove unnecessary packages & tidy up +RUN apk del nodejs git wget python make g++ +RUN rm -rf /root/.lein /root/.m2 /root/.node-gyp /root/.npm /tmp/* /var/cache/apk/* /app/source/node_modules + # expose our default runtime port EXPOSE 3000 diff --git a/README.md b/README.md index 3ae66e0a242d3dd42e0e8ac8b1904174fb5b4585..8a57b4ec97557395c433d55a1a1e239377030f66 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ +[](https://github.com/metabase/metabase/releases) +[](https://raw.githubusercontent.com/metabase/metabase/master/LICENSE.txt) [](https://circleci.com/gh/metabase/metabase) -[](https://jarkeeper.com/metabase/metabase) +[](https://jarkeeper.com/metabase/metabase) [](https://david-dm.org/metabase/metabase) # Overview @@ -8,12 +10,12 @@ Metabase is an easy way to generate charts and dashboards, ask simple ad hoc que With a bit of tagging and annotation of what the tables and fields in your database mean, it can be used to provide a rich, humanized version analytics server and administration interface. -For more information check out [www.metabase.com](http://www.metabase.com) +For more information check out [www.metabase.com](http://www.metabase.com). # Security Disclosure -Security is very important to us. If discover any issue regarding security, please disclose the information responsibly by sending an email to security@metabase.com and not by creating a github issue. +Security is very important to us. If discover any issue regarding security, please disclose the information responsibly by sending an email to security@metabase.com and not by creating a GitHub issue. # Installation @@ -73,4 +75,4 @@ Unless otherwise noted, all Metabase source files are made available under the t See [LICENSE.txt](https://github.com/metabase/metabase/blob/master/LICENSE.txt) for details and exceptions. -Unless otherwise noted, all files © 2015 Metabase, Inc. +Unless otherwise noted, all files © 2016 Metabase, Inc. diff --git a/bin/docker/Dockerfile b/bin/docker/Dockerfile index 55863f5705c2bb580b65d004616d62f2e04bc9bf..ade3c9b403ca738929ee10c03a396b4721ac90f1 100644 --- a/bin/docker/Dockerfile +++ b/bin/docker/Dockerfile @@ -1,9 +1,12 @@ -FROM java:openjdk-7-jre +FROM java:openjdk-7-jre-alpine -ENV LC_ALL C -ENV LANG C.UTF-8 -ENV DEBIAN_FRONTEND noninteractive -ENV DEBCONF_NONINTERACTIVE_SEEN true +# need bash +RUN apk add --update bash + +# fix broken cacerts +RUN apk add --update java-cacerts && \ + rm -f /usr/lib/jvm/default-jvm/jre/lib/security/cacerts && \ + ln -s /etc/ssl/certs/java/cacerts /usr/lib/jvm/default-jvm/jre/lib/security/cacerts # add Metabase jar COPY ./metabase.jar /app/ @@ -12,6 +15,9 @@ COPY ./metabase.jar /app/ COPY ./run_metabase.sh /app/ RUN chmod 755 /app/run_metabase.sh +# tidy up +RUN rm -rf /tmp/* /var/cache/apk/* + # expose our default runtime port EXPOSE 3000 diff --git a/bin/version b/bin/version index d96529e092221e26c8657d345098fb712a513c28..2f59efbcdcf79da6b71666760df85251742dc1ae 100755 --- a/bin/version +++ b/bin/version @@ -1,6 +1,6 @@ #!/usr/bin/env bash -VERSION="v0.16.0-snapshot" +VERSION="v0.17.0-snapshot" # dynamically pull more interesting stuff from latest git commit HASH=$(git show-ref --head --hash=7 head) # first 7 letters of hash should be enough; that's what GitHub uses diff --git a/docs/operations-guide/running-metabase-on-elastic-beanstalk.md b/docs/operations-guide/running-metabase-on-elastic-beanstalk.md index 247565daddb03cc1d5fdf768744bbcc69b3ca3a7..a936d5a7a72be8110eadfb9b3914adeb18c2dcb4 100644 --- a/docs/operations-guide/running-metabase-on-elastic-beanstalk.md +++ b/docs/operations-guide/running-metabase-on-elastic-beanstalk.md @@ -16,7 +16,7 @@ The Metabase team runs a number of production installations on AWS using Elastic Metabase provides an Elastic Beanstalk pre-configured launch url to help new installations getting started. If you are starting fresh we recommend you follow this link to begin creating the Elastic Beanstalk deployment with a few choices pre-filled. -[Launch Metabase on Elastic Beanstalk](http://downloads.metabase.com/v0.15.1/launch-aws-eb.html) +[Launch Metabase on Elastic Beanstalk](http://downloads.metabase.com/v0.16.0/launch-aws-eb.html) The rest of this guide will follow each phase of the Elastic Beanstalk setup step-by-step. @@ -53,7 +53,7 @@ When your environment type settings look like the above then go ahead and click The application version describes the exact binary you wish to deploy to your Elastic Beanstalk application. Metabase provides a pre-built AWS Elastic Beanstalk application version which can be linked to directly. Simply enter the following url in the `S3 URL` textbox: -https://s3.amazonaws.com/downloads.metabase.com/v0.15.1/metabase-aws-eb.zip +https://s3.amazonaws.com/downloads.metabase.com/v0.16.0/metabase-aws-eb.zip Leave all the settings under Deployment Limits on their defaults. These settings won't impact Metabase. @@ -186,7 +186,7 @@ Here's each step: 1. Go to Elastic Beanstalk and select your `Metabase` application * Click on `Application Versions` on the left nav (you can also choose `Application Versions` from the dropdown at the top of the page) * Download the latest Metabase Elastic Beanstalk deployment file - * https://s3.amazonaws.com/downloads.metabase.com/v0.15.1/metabase-aws-eb.zip + * https://s3.amazonaws.com/downloads.metabase.com/v0.16.0/metabase-aws-eb.zip * Upload a new Application Version * Click the `Upload` button on the upper right side of the listing * Give the new version a name, ideally including the Metabase version number (e.g. v0.13.0) diff --git a/docs/users-guide/05-sharing-answers.md b/docs/users-guide/05-sharing-answers.md index 32528a3a2b0d9a6e5fa896c398dba4a0696ad3a5..377eeef3cff60836765752b41b2a493cffff7098 100644 --- a/docs/users-guide/05-sharing-answers.md +++ b/docs/users-guide/05-sharing-answers.md @@ -24,27 +24,55 @@ You can make as many dashboards as you want. Go nuts. ### How to Create a Dashboard Once you have a question saved, you can create a dashboard. Click the **Dashboards** dropdown at the top of the screen, then **Create a new dashboard**. Give your new dashboard a name and a description, then click **Create**, and you’ll be taken to your shiny new dashboard. You can always get to your dashboards from the dropdown at the very top of the screen. + + ### Adding saved questions to a dashboard You can add a newly saved question to a dashboard directly from the window that pops up after you save the question, or by clicking the Add to Dashboard icon in the top-right of a question page. You can also go to one of your dashboards and click the plus icon in the top right to add any of your saved questions to the dashboard. Once you add a question to your dashboard, it’ll look something like this: - + ### Arranging cards Each question on a dashboard is in its own card that you can move around or resize as you see fit; just click the edit icon that looks like a pencil in the top-right of the dashboard screen. -The lines around the card will change from solid to dotted, showing you that you’re in edit mode. +Once you're in edit mode you'll see a grid appear. You can move and resize the cards in the dashboard to your liking and they'll snap to the grid. + + - +- To move cards just click and drag. +- To resize a card just click and drag the handle at the bottom right corner of the card. +- To remove a card, click the X icon in the top right corner. + +Questions in your dashboard will automatically update their display based on the size you choose to make sure your data looks great at any size. -* To resize a card, hover your pointer over the lower right corner of it and click and drag. -* To reorder your cards, click on the card and drag it to where you want it to be. The other cards will rearrange themselves as you move the card around. -* To remove a card, click the trashcan icon on it. ## Deleting a dashboard Deleting a dashboard does not delete the individual saved questions on it — it just deletes the dashboard. Remember — dashboards are shared by everyone on your team, so think twice before you delete something that someone else might be using! To delete a dashboard, click the pencil-looking **Edit** icon in the top right of the dashboard, then click **Delete**. +## Fullscreen dashboards + +After you've made your ideal dashboard you may want to put it on a TV or present it in some other visible space to help keep your team up-to-date throughout the day. + +To enter fullscreen mode just click the fullscreen icon in the top right of the dashboard. + +Once you've entered fullscreen mode you can also switch the dashboard into "Night mode" for higher contrast. + + + +## Auto refresh +If your data is more realtime in nature you can set your dashboard up to auto refresh. + + + +You can set your dashboard to update in 1, 5, 10, 15, 30, and 60 minute intervals depending on how fresh you need the data to be. + +Enabling auto refresh will re-run all the queries on the dashboard at the interval you choose, so keep the size of the dashboard and the complexity of the questions in mind when setting up auto refresh. + +Combining fullscreen mode and auto refresh is a great way to keep your team in sync with your data throughout the day. + +--- + Next, we'll offer up some suggestions on how to create useful dashboards, in our [Tips on Dashboards](06-dashboard-tips.md). diff --git a/docs/users-guide/10-metabot.md b/docs/users-guide/10-metabot.md new file mode 100644 index 0000000000000000000000000000000000000000..031239b662dd1e6ee06fa4a86e5ea9452cf7288f --- /dev/null +++ b/docs/users-guide/10-metabot.md @@ -0,0 +1,44 @@ +# Getting answers in Slack with Metabot + +You can already send data to Slack on a set schedule via [Pulses](http://www.metabase.com/docs/latest/users-guide/07-pulses) but what about when you need an answer right now? Say hello to Metabot. + +Metabot helps add context to conversations you’re having in Slack by letting you insert results from Metabase. + +## Connecting to Slack. +To use Metabot with Slack you’ll first need to connect Metabase to your Slack with an API token. + +See [Setting up Slack](http://www.metabase.com/docs/v0.15.1/administration-guide/07-setting-up-slack) for more information. + + +## What can Metabot do? + +Metabot can show individual questions and also lists of questions that have already been asked in Metabase. + +If you ever need help remembering what Metabot can do, just type ```metabot help``` in Slack. + + + +## Showing questions + +To see a question from Metabase in Slack type +```metabot show "<question-name>"``` where question name is the title of one of saved questions. If you have several similarly named questions Metabot will ask you to differentiate between the two by typing the number next to the name. + + + +That number is the ID number of the question in Metabase and if you find yourself using the same question over and over again you can save a bit of time by typing “metabot show 19.†+ + + +## Listing questions +If you don’t have a sense of which questions you want to view in Slack, you can type ```metabot list``` to get a list of recent questions from your Metabase. + + + + +## To review + +- [Connect to Slack](http://www.metabase.com/docs/latest/users-guide/07-pulses) to start using Metabot. +- Show data from Metabase in Slack using ```metabot show <question-id>``` +- Search for questions by typing ```metabot show <search-term>``` +- Get a list of questions by typing ```metabot list``` +- ```metabot help``` lets you see everything Metabot can do if you forget or need more information diff --git a/docs/users-guide/images/FirstDashboard.png b/docs/users-guide/images/FirstDashboard.png deleted file mode 100644 index 387db3618a0701d18c99728d24d952436ebbce68..0000000000000000000000000000000000000000 Binary files a/docs/users-guide/images/FirstDashboard.png and /dev/null differ diff --git a/docs/users-guide/images/dashboards/DashboardAutorefresh.png b/docs/users-guide/images/dashboards/DashboardAutorefresh.png new file mode 100644 index 0000000000000000000000000000000000000000..575e3e7ede5c3a39fd9ed0c821028c6438505645 Binary files /dev/null and b/docs/users-guide/images/dashboards/DashboardAutorefresh.png differ diff --git a/docs/users-guide/images/dashboards/DashboardCreate.png b/docs/users-guide/images/dashboards/DashboardCreate.png new file mode 100644 index 0000000000000000000000000000000000000000..d70d98746be14ceb6cd4146d123fb4bea31e0e3f Binary files /dev/null and b/docs/users-guide/images/dashboards/DashboardCreate.png differ diff --git a/docs/users-guide/images/dashboards/DashboardEdit.png b/docs/users-guide/images/dashboards/DashboardEdit.png new file mode 100644 index 0000000000000000000000000000000000000000..827a25c6775a36aee0d20cebec36f16286806fdb Binary files /dev/null and b/docs/users-guide/images/dashboards/DashboardEdit.png differ diff --git a/docs/users-guide/images/dashboards/DashboardNightMode.png b/docs/users-guide/images/dashboards/DashboardNightMode.png new file mode 100644 index 0000000000000000000000000000000000000000..39370c54c7f10351b9ed805216fe01b8b2f75f17 Binary files /dev/null and b/docs/users-guide/images/dashboards/DashboardNightMode.png differ diff --git a/docs/users-guide/images/Editmode.png b/docs/users-guide/images/dashboards/Editmode.png similarity index 100% rename from docs/users-guide/images/Editmode.png rename to docs/users-guide/images/dashboards/Editmode.png diff --git a/docs/users-guide/images/dashboards/FirstDashboard.png b/docs/users-guide/images/dashboards/FirstDashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4d9084dffb5de17d2b9c0c79237c715ccae5de Binary files /dev/null and b/docs/users-guide/images/dashboards/FirstDashboard.png differ diff --git a/docs/users-guide/images/metabot/MetabotHelp.png b/docs/users-guide/images/metabot/MetabotHelp.png new file mode 100644 index 0000000000000000000000000000000000000000..a64753b52bd79ff5578ce892ac067177a6f1156d Binary files /dev/null and b/docs/users-guide/images/metabot/MetabotHelp.png differ diff --git a/docs/users-guide/images/metabot/MetabotList.png b/docs/users-guide/images/metabot/MetabotList.png new file mode 100644 index 0000000000000000000000000000000000000000..830786d3a05386d8ce32249183592d829e8917b8 Binary files /dev/null and b/docs/users-guide/images/metabot/MetabotList.png differ diff --git a/docs/users-guide/images/metabot/MetabotShow.png b/docs/users-guide/images/metabot/MetabotShow.png new file mode 100644 index 0000000000000000000000000000000000000000..c2df74c663595815b566238c92e393dce785b620 Binary files /dev/null and b/docs/users-guide/images/metabot/MetabotShow.png differ diff --git a/docs/users-guide/images/metabot/MetabotSimilarItems.png b/docs/users-guide/images/metabot/MetabotSimilarItems.png new file mode 100644 index 0000000000000000000000000000000000000000..ee81c9ec50a20c3191e3dd3f85debdd73975cfbe Binary files /dev/null and b/docs/users-guide/images/metabot/MetabotSimilarItems.png differ diff --git a/docs/users-guide/start.md b/docs/users-guide/start.md index b83f65f335329ec2fa483270c9f437c706fac4d3..80c0bbfa3e44929229e7cac91a70484d01a2260e 100644 --- a/docs/users-guide/start.md +++ b/docs/users-guide/start.md @@ -20,4 +20,6 @@ > [Visualizing multiple series](09-data-model-reference.md) +> [Get answers in Slack with Metabot](10-metabot.md) + Let's get started with an overview of [What Metabase does](01-what-is-metabase.md). diff --git a/frontend/src/admin/settings/components/SettingsSlackForm.jsx b/frontend/src/admin/settings/components/SettingsSlackForm.jsx index f418f769ec55a07f1106b1eac7b3324a22f8f6ca..5d870459091ef88d5368270feec42be8b09289de 100644 --- a/frontend/src/admin/settings/components/SettingsSlackForm.jsx +++ b/frontend/src/admin/settings/components/SettingsSlackForm.jsx @@ -99,6 +99,10 @@ export default class SettingsSlackForm extends Component { this.setState({ formData: { ...this.state.formData, [element.key]: (MetabaseUtils.isEmpty(value)) ? null : value } }); + + if (element.key === "metabot-enabled") { + MetabaseAnalytics.trackEvent("Slack Settings", "Toggle Metabot", value); + } } handleFormErrors(error) { diff --git a/frontend/src/card/card.controllers.js b/frontend/src/card/card.controllers.js index d95f70acff9e966b16696686e485c2124b2decc2..b7015cd8a07cff1327a49a9d368b29c9553aa7f8 100644 --- a/frontend/src/card/card.controllers.js +++ b/frontend/src/card/card.controllers.js @@ -290,6 +290,7 @@ CardControllers.controller('CardDetail', [ var dataReferenceModel = { Metabase: Metabase, closeFn: toggleDataReference, + setCardAndRun: (card) => setCard(card, {runQuery: true}), runQueryFn: runQuery, setQueryFn: onQueryChanged, setDatabaseFn: setDatabase, diff --git a/frontend/src/card/card.module.js b/frontend/src/card/card.module.js index f012aeac8cab682e592533d4ff91284a5ecbce95..63043d1a1c1db0b9c3b37b012193902441f22ec3 100644 --- a/frontend/src/card/card.module.js +++ b/frontend/src/card/card.module.js @@ -1,4 +1,13 @@ -// Card +const CARD_DETAIL_TEMPLATE = +`<div class="QueryBuilder flex flex-column bg-white spread" ng-class="{ 'QueryBuilder--showDataReference': isShowingDataReference }"> + <div id="react_qb_header"></div> + <div id="react_qb_editor" class="z2"></div> + <div id="react_qb_viz" class="flex z1"></div> +</div> +<div class="DataReference" id="react_data_reference"></div> +<div id="react_qb_tutorial"></div> +<div id="react_qbnewb_modal"></div>`; + var Card = angular.module('metabase.card', [ 'ngRoute', 'ngCookies', @@ -10,11 +19,11 @@ var Card = angular.module('metabase.card', [ Card.config(['$routeProvider', function($routeProvider) { $routeProvider.when('/q', { - templateUrl: '/app/card/partials/card_detail.html', + template: CARD_DETAIL_TEMPLATE, controller: 'CardDetail' }); $routeProvider.when('/card/:cardId', { - templateUrl: '/app/card/partials/card_detail.html', + template: CARD_DETAIL_TEMPLATE, controller: 'CardDetail' }); diff --git a/frontend/src/components/AbsoluteContainer.jsx b/frontend/src/components/AbsoluteContainer.jsx deleted file mode 100644 index b089af83826547492054ce95d69e270257d70bc1..0000000000000000000000000000000000000000 --- a/frontend/src/components/AbsoluteContainer.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React, { Component, PropTypes } from "react"; - -export default ComposedComponent => class extends Component { - static displayName = "AbsoluteContainer["+(ComposedComponent.displayName || ComposedComponent.name)+"]"; - - render() { - const { className, style, width, height } = this.props; - return ( - <div className={className} style={{ position: "relative", ...style }}> - <div style={{ position: "absolute", top: 0, left: 0, width: width, height: height }}> - { width != null && height != null && - <ComposedComponent - width={width} - height={height} - {...this.props} - /> - } - </div> - </div> - ); - } -} diff --git a/frontend/src/components/DeleteModalWithConfirm.jsx b/frontend/src/components/DeleteModalWithConfirm.jsx index 313d0d8a5172b4ec3e0ef33ce3a529b74d30a3e9..e45d47fd545f6e416c6ef4b36a4235c0b39d932f 100644 --- a/frontend/src/components/DeleteModalWithConfirm.jsx +++ b/frontend/src/components/DeleteModalWithConfirm.jsx @@ -38,7 +38,7 @@ export default class DeleteModalWithConfirm extends Component { title={"Delete \"" + objectName + "\"?"} closeFn={this.props.onClose} > - <div className="px4"> + <div className="px4 pb4"> <ul> {confirmItems.map((item, index) => <li className="pb2 mb2 border-row-divider flex align-center"> diff --git a/frontend/src/components/ExplicitSize.jsx b/frontend/src/components/ExplicitSize.jsx index ab1db2c8c85e35de467cda8c939b7a672bca989c..27e39713d7d29f352ba5819b5299b4b904195b7a 100644 --- a/frontend/src/components/ExplicitSize.jsx +++ b/frontend/src/components/ExplicitSize.jsx @@ -24,6 +24,6 @@ export default ComposedComponent => class extends Component { } render() { - return <ComposedComponent {...this.state} {...this.props} /> + return <ComposedComponent {...this.props} {...this.state} /> } } diff --git a/frontend/src/components/dashboard/dashboard.css b/frontend/src/components/dashboard/dashboard.css index 2694df172491fa573a189ef4f9f4b452014c4992..4f6cd05f9bc6f35b12d503681175083e3e7877e1 100644 --- a/frontend/src/components/dashboard/dashboard.css +++ b/frontend/src/components/dashboard/dashboard.css @@ -1,3 +1,6 @@ +:root { + --night-mode-color: rgba(255, 255, 255, 0.86); +} .Dashboard { background-color: #f9fbfc; } @@ -37,20 +40,24 @@ } /* Night mode */ +.Dashboard.Dashboard--night { + background-color: rgb(34, 37, 39); +} + .Dashboard.Dashboard--night .Header-button, .Dashboard.Dashboard--night .Header-button svg { - color: rgba(151, 151, 151, 0.3) !important; + color: rgba(151, 151, 151, 0.3); } -.Dashboard.Dashboard--night { - background-color: rgb(34, 37, 39); -} +.Dashboard.Dashboard--fullscreen .fullscreen-normal-text { + color: #3f3a3a; + transition: color 1s linear; +} -.Dashboard.Dashboard--night .DashCard .Card a, -.Dashboard.Dashboard--night .DashCard .Card div, -.Dashboard.Dashboard--night .DashCard .Card span { - color: rgba(255, 255, 255, 0.86) !important; +.Dashboard.Dashboard--night.Dashboard--fullscreen .fullscreen-night-text { + color: var(--night-mode-color); + transition: color 1s linear; } .Dashboard.Dashboard--night .DashCard .Card svg text { @@ -59,12 +66,12 @@ .Dashboard.Dashboard--night .DashCard .Card { background-color: rgb(54, 58, 61); - border: 1px solid rgb(46, 49, 52) !important; + border: 1px solid rgb(46, 49, 52); } .Dashboard.Dashboard--night .enable-dots-onhover .dc-tooltip circle.dot:hover, .Dashboard.Dashboard--night .enable-dots .dc-tooltip circle.dot { - fill: currentColor !important; + fill: currentColor; } /* Night mode transition */ @@ -73,16 +80,6 @@ transition: background-color 1s linear, border 1s linear; } -.Dashboard.Dashboard--fullscreen .DashCard .Card a, -.Dashboard.Dashboard--fullscreen .DashCard .Card div, -.Dashboard.Dashboard--fullscreen .DashCard .Card span, -.Dashboard.Dashboard--fullscreen .Header-button, -.Dashboard.Dashboard--fullscreen .Header-button svg { - transition: color 1s linear; -} - - - .DashboardGrid { margin-top: 5px; } diff --git a/frontend/src/dashboard/components/DashCard.jsx b/frontend/src/dashboard/components/DashCard.jsx index ba77ea073ac762db4f3f44467262f95755ec71ac..9a6ee29f23f65be659402dc042d6875ca1d5a682 100644 --- a/frontend/src/dashboard/components/DashCard.jsx +++ b/frontend/src/dashboard/components/DashCard.jsx @@ -4,8 +4,6 @@ import ReactDOM from "react-dom"; import visualizations from "metabase/visualizations"; import Visualization from "metabase/visualizations/components/Visualization.jsx"; -import LegendHeader from "metabase/visualizations/components/LegendHeader.jsx"; -import LoadingSpinner from "metabase/components/LoadingSpinner.jsx"; import Icon from "metabase/components/Icon.jsx"; @@ -74,8 +72,9 @@ export default class DashCard extends Component { } } - renderCard(CardVisualization) { + render() { const { dashcard, cardData, isEditing, onAddSeries, onRemove } = this.props; + const cards = [dashcard.card].concat(dashcard.series || []); const series = cards .map(card => ({ @@ -86,28 +85,25 @@ export default class DashCard extends Component { const errors = series.map(s => s.error).filter(e => e); const error = errors[0] || this.state.error; + let errorMessage; if (error) { - let message; if (error.data) { - message = error.data.message; + errorMessage = error.data.message; } else if (error.status === 503) { - message = "I'm sorry, the server timed out while asking your question." + errorMessage = "I'm sorry, the server timed out while asking your question." } else if (typeof error === "string") { - message = error; + errorMessage = error; } else { - message = "Oh snap! Something went wrong loading this card :sad:"; + errorMessage = "Oh snap! Something went wrong loading this card :sad:"; } - return ( - <div className="p1 text-centered flex-full flex flex-column layout-centered"> - <h2 className="text-normal text-grey-2">{message}</h2> - </div> - ); } - if (series.length > 0 && _.every(series, (s) => s.data)) { - return ( + const CardVisualization = visualizations.get(series[0].card.display); + return ( + <div className={"Card bordered rounded flex flex-column " + cx({ "Card--recent": dashcard.isAdded })}> <Visualization className="flex-full" + error={errorMessage} series={series} isDashboard={true} isEditing={isEditing} @@ -115,32 +111,6 @@ export default class DashCard extends Component { actionButtons={isEditing ? <DashCardActionButtons series={series} visualization={CardVisualization} onRemove={onRemove} onAddSeries={onAddSeries} /> : undefined} onUpdateVisualizationSetting={this.props.onUpdateVisualizationSetting} /> - ); - } - - return ( - <div className="p1 text-brand text-centered flex-full flex flex-column layout-centered"> - <LoadingSpinner /> - <h1 className="ml1 text-normal text-grey-2">Loading...</h1> - </div> - ); - } - - render() { - const { dashcard, onAddSeries, onRemove, isEditing } = this.props; - const series = [dashcard.card].concat(dashcard.series || []).map(card => ({ card })); - const Viz = visualizations.get(series[0].card.display); - return ( - <div className={"Card bordered rounded flex flex-column " + cx({ "Card--recent": dashcard.isAdded })}> - { !Viz.noHeader && - <div className="p1"> - <LegendHeader - series={series} - actionButtons={isEditing ? <DashCardActionButtons visualization={Viz} series={series} onRemove={onRemove} onAddSeries={onAddSeries} /> : undefined} - /> - </div> - } - {this.renderCard(Viz)} </div> ); } diff --git a/frontend/src/dashboard/components/Dashboard.jsx b/frontend/src/dashboard/components/Dashboard.jsx index b60ec9003d60739b01883043209075ebe79ae5ce..2c03263c44eb7d2a235c08cab48a6130dd87be31 100644 --- a/frontend/src/dashboard/components/Dashboard.jsx +++ b/frontend/src/dashboard/components/Dashboard.jsx @@ -4,6 +4,7 @@ import ReactDOM from "react-dom"; import DashboardHeader from "../components/DashboardHeader.jsx"; import DashboardGrid from "../components/DashboardGrid.jsx"; import LoadingAndErrorWrapper from "metabase/components/LoadingAndErrorWrapper.jsx"; +import MetabaseAnalytics from "metabase/lib/analytics"; import screenfull from "screenfull"; @@ -134,6 +135,7 @@ export default class Dashboard extends Component { if (refreshPeriod != null) { this._interval = setInterval(this.tickRefreshClock, TICK_PERIOD * 1000); this.setState({ refreshPeriod, refreshElapsed: 0 }); + MetabaseAnalytics.trackEvent("Dashboard", "Set Refresh", refreshPeriod); } else { this.setState({ refreshPeriod: null, refreshElapsed: null }); } diff --git a/frontend/src/dashboard/components/DashboardGrid.jsx b/frontend/src/dashboard/components/DashboardGrid.jsx index d6e70895b09bc203005a848011f33a926fdb3e08..475901b71e04a9f4143124330a2334ba69596eb9 100644 --- a/frontend/src/dashboard/components/DashboardGrid.jsx +++ b/frontend/src/dashboard/components/DashboardGrid.jsx @@ -242,7 +242,7 @@ export default class DashboardGrid extends Component { isEditing={isEditing} > {dashboard && dashboard.ordered_cards.map(dc => - <div key={dc.id} className="DashCard" onMouseDownCapture={this.onDashCardMouseDown}> + <div key={dc.id} className="DashCard" onMouseDownCapture={this.onDashCardMouseDown} onTouchStartCapture={this.onDashCardMouseDown}> <DashCard dashcard={dc} cardData={this.props.cardData} diff --git a/frontend/src/dashboard/components/DashboardHeader.jsx b/frontend/src/dashboard/components/DashboardHeader.jsx index 97e35ff88efe5774714c24a834ac94479980680f..e2a4ae648b00346fe2a20026f71394693fc82323 100644 --- a/frontend/src/dashboard/components/DashboardHeader.jsx +++ b/frontend/src/dashboard/components/DashboardHeader.jsx @@ -134,7 +134,7 @@ export default class DashboardHeader extends Component { ref="dashboardHistory" triggerElement={ <Tooltip tooltip="Revision History"> - <span> + <span data-metabase-event={"Dashboard;Revisions"}> <Icon className="text-brand-hover" name="history" width="16px" height="16px" /> </span> </Tooltip> @@ -190,14 +190,14 @@ export default class DashboardHeader extends Component { if (!isEditing && !isEmpty) { buttons.push( - <RefreshWidget className="text-brand-hover" key="refresh" period={this.props.refreshPeriod} elapsed={this.props.refreshElapsed} onChangePeriod={this.props.setRefreshPeriod} /> + <RefreshWidget data-metabase-event="Dashboard;Refresh Menu Open" className="text-brand-hover" key="refresh" period={this.props.refreshPeriod} elapsed={this.props.refreshElapsed} onChangePeriod={this.props.setRefreshPeriod} /> ); } if (!isEditing && isFullscreen) { buttons.push( <Tooltip tooltip={isNightMode ? "Daytime mode" : "Nighttime mode"}> - <span> + <span data-metabase-event={"Dashboard;Night Mode;"+!isNightMode}> <NightModeIcon className="text-brand-hover cursor-pointer" key="night" isNightMode={isNightMode} onClick={() => this.props.onNightModeChange(!isNightMode) } /> </span> </Tooltip> @@ -208,7 +208,7 @@ export default class DashboardHeader extends Component { // option click to enter fullscreen without making the browser go fullscreen buttons.push( <Tooltip tooltip={isFullscreen ? "Exit fullscreen" : "Enter fullscreen"}> - <span> + <span data-metabase-event={"Dashboard;Fullscreen Mode;"+!isFullscreen}> <FullscreenIcon className="text-brand-hover cursor-pointer" key="fullscreen" isFullscreen={isFullscreen} onClick={(e) => this.props.onFullscreenChange(!isFullscreen, !e.altKey)} /> </span> </Tooltip> diff --git a/frontend/src/query_builder/DataReferenceField.jsx b/frontend/src/query_builder/DataReferenceField.jsx index ba4d27fe62b847e70dc0a78406c5691c0bcd80f9..955e0d9bfc6398e54ac37735333f9d7444401bfc 100644 --- a/frontend/src/query_builder/DataReferenceField.jsx +++ b/frontend/src/query_builder/DataReferenceField.jsx @@ -3,6 +3,8 @@ import React, { Component, PropTypes } from "react"; import DataReferenceQueryButton from './DataReferenceQueryButton.jsx'; import Icon from "metabase/components/Icon.jsx"; import Query from "metabase/lib/query"; +import { createCard } from "metabase/lib/card"; +import { createQuery } from "metabase/lib/query"; import { isDimension } from "metabase/lib/schema_metadata"; import inflection from 'inflection'; @@ -28,9 +30,7 @@ export default class DataReferenceField extends Component { loadTableFn: PropTypes.func.isRequired, runQueryFn: PropTypes.func.isRequired, setQueryFn: PropTypes.func.isRequired, - setDatabaseFn: PropTypes.func.isRequired, - setSourceTableFn: PropTypes.func.isRequired, - setDisplayFn: PropTypes.func.isRequired + setCardAndRun: PropTypes.func.isRequired }; componentWillMount() { @@ -54,56 +54,45 @@ export default class DataReferenceField extends Component { } Query.addFilter(query.query); Query.updateFilter(query.query, Query.getFilters(query.query).length - 1, [null, this.props.field.id, null]); - this.setQuery(query, false); + this.props.setQueryFn(query); } groupBy() { - var query = this.setDatabaseAndTable(); + let query = this.props.query; if (!Query.hasValidAggregation(query.query)) { Query.updateAggregation(query.query, ["rows"]); } Query.addDimension(query.query); Query.updateDimension(query.query, this.props.field.id, query.query.breakout.length - 1); - this.setQuery(query); + this.props.setQueryFn(query); + this.props.runQueryFn(); + } + + newCard() { + let card = createCard(); + card.dataset_query = createQuery("query", this.state.table.db_id, this.state.table.id); + return card; } setQuerySum() { - var query = this.setDatabaseAndTable(); - query.query.aggregation = ["sum", this.props.field.id]; - query.query.breakout = []; - query.query.filter = []; - this.setQuery(query); + let card = this.newCard(); + card.dataset_query.query.aggregation = ["sum", this.props.field.id]; + this.props.setCardAndRun(card); } setQueryDistinct() { - var query = this.setDatabaseAndTable(); - query.query.aggregation = ["rows"]; - query.query.breakout = [this.props.field.id]; - query.query.filter = []; - this.setQuery(query); + let card = this.newCard(); + card.dataset_query.query.aggregation = ["rows"]; + card.dataset_query.query.breakout = [this.props.field.id]; + this.props.setCardAndRun(card); } setQueryCountGroupedBy(chartType) { - var query = this.setDatabaseAndTable(); - query.query.aggregation = ["count"]; - query.query.breakout = [this.props.field.id]; - query.query.filter = []; - this.setQuery(query); - this.props.setDisplayFn(chartType); - } - - setDatabaseAndTable() { - var query; - query = this.props.setDatabaseFn(this.state.table.db_id); - query = this.props.setSourceTableFn(this.state.table.id); - return query; - } - - setQuery(query, run = true) { - this.props.setQueryFn(query); - if (run) { - this.props.runQueryFn(); - } + let card = this.newCard(); + card.dataset_query.query.aggregation = ["count"]; + card.dataset_query.query.breakout = [this.props.field.id]; + card.display = chartType; + this.props.setCardAndRun(card); } render() { @@ -125,20 +114,21 @@ export default class DataReferenceField extends Component { // TODO: allow for filters/grouping via foreign keys if (!query.query || query.query.source_table == undefined || query.query.source_table === field.table_id) { - useForCurrentQuestion.push( - <li key="filter-by" className="mt1"> - <a className="Button Button--white text-default text-brand-hover border-brand-hover no-decoration" onClick={this.filterBy}> - <Icon className="mr1" name="add" width="12px" height="12px"/> Filter by {name} - </a> - </li> - ); + // NOTE: disabled this for now because we need a way to capture the completed filter before adding it to the query, or to pop open the filter widget here? + // useForCurrentQuestion.push( + // <li key="filter-by" className="mt1"> + // <a className="Button Button--white text-default text-brand-hover border-brand-hover no-decoration" onClick={this.filterBy}> + // <Icon className="mr1" name="add" width="12px" height="12px"/> Filter by {name} + // </a> + // </li> + // ); // current field must be a valid breakout option for this table AND cannot already be in the breakout clause of our query - if (validBreakout && (query.query.breakout && !_.contains(query.query.breakout, field.id))) { + if (validBreakout && this.state.table.id === this.props.query.query.source_table && (query.query.breakout && !_.contains(query.query.breakout, field.id))) { useForCurrentQuestion.push( <li key="group-by" className="mt1"> <a className="Button Button--white text-default text-brand-hover border-brand-hover no-decoration" onClick={this.groupBy}> - <Icon className="mr2" name="add" width="12px" height="12px" /> Group by {name} + <Icon className="mr1" name="add" width="12px" height="12px" /> Group by {name} </a> </li> ); diff --git a/frontend/src/query_builder/DataReferenceTable.jsx b/frontend/src/query_builder/DataReferenceTable.jsx index 426e9b5217aa1d00c00659c3f7c3210781218f98..8bce486ad853d31e99d7ac673744c6fbe460e5c2 100644 --- a/frontend/src/query_builder/DataReferenceTable.jsx +++ b/frontend/src/query_builder/DataReferenceTable.jsx @@ -1,6 +1,7 @@ import React, { Component, PropTypes } from "react"; import DataReferenceQueryButton from './DataReferenceQueryButton.jsx'; +import { createCard } from "metabase/lib/card"; import { createQuery } from "metabase/lib/query"; import { foreignKeyCountsByOriginTable } from 'metabase/lib/schema_metadata'; import inflection from 'inflection'; @@ -23,10 +24,7 @@ export default class DataReferenceTable extends Component { query: PropTypes.object.isRequired, loadTableFn: PropTypes.func.isRequired, closeFn: PropTypes.func.isRequired, - runQueryFn: PropTypes.func.isRequired, - setQueryFn: PropTypes.func.isRequired, - setDatabaseFn: PropTypes.func.isRequired, - setSourceTableFn: PropTypes.func.isRequired + setCardAndRun: PropTypes.func.isRequired }; componentWillMount() { @@ -47,9 +45,9 @@ export default class DataReferenceTable extends Component { } setQueryAllRows() { - var query = createQuery("query", this.state.table.db_id, this.state.table.id); - this.props.setQueryFn(query); - this.props.runQueryFn(); + let card = createCard(); + card.dataset_query = createQuery("query", this.state.table.db_id, this.state.table.id); + this.props.setCardAndRun(card); } render() { diff --git a/frontend/src/query_builder/RunButton.jsx b/frontend/src/query_builder/RunButton.jsx index 7af527d33cc9eb677fc31cf7c8ce1a79f071218d..d67925275c345e9f82ceae073d286ba1b14059da 100644 --- a/frontend/src/query_builder/RunButton.jsx +++ b/frontend/src/query_builder/RunButton.jsx @@ -11,7 +11,7 @@ export default class RunButton extends Component { }; render() { - var runButtonText = (this.props.isRunning) ? "Loading..." : "Run query"; + var runButtonText = (this.props.isRunning) ? "Loading..." : "Get Answer"; var classes = cx({ "Button": true, "Button--primary": true, diff --git a/frontend/src/tutorial/QueryBuilderTutorial.jsx b/frontend/src/tutorial/QueryBuilderTutorial.jsx index 444b4dd47aa2f07144f005ca7dfe288726bb343c..e2e011277ff5cdc3d6b5f8d8c2cfa7f91563b92d 100644 --- a/frontend/src/tutorial/QueryBuilderTutorial.jsx +++ b/frontend/src/tutorial/QueryBuilderTutorial.jsx @@ -136,7 +136,7 @@ const QUERY_BUILDER_STEPS = [ <div className="text-centered"> <RetinaImage className="mb2" forceOriginalDimensions={false} src="/app/img/qb_tutorial/boat.png" width={190} /> <h3>Well done!</h3> - <p>That's all! If you still have questions, check out our <a className="link" target="_blank" href="http://www.metabase.com/docs/latest/users-guide/">User's Guide</a>. Have fun exploring your data!</p> + <p>That's all! If you still have questions, check out our <a className="link" target="_blank" href="http://www.metabase.com/docs/latest/users-guide/start">User's Guide</a>. Have fun exploring your data!</p> <a className="Button Button--primary" onClick={props.onNext}>Thanks!</a> </div> }, diff --git a/frontend/src/visualizations/PieChart.jsx b/frontend/src/visualizations/PieChart.jsx index 606b957c52d82c0b813c19db36185e5a5afbf402..a478e4b6b9904031377a5dde85f72f3be4d70bc1 100644 --- a/frontend/src/visualizations/PieChart.jsx +++ b/frontend/src/visualizations/PieChart.jsx @@ -12,6 +12,8 @@ import { formatValue } from "metabase/lib/formatting"; import * as colors from "metabase/lib/colors"; +import cx from "classnames"; + import d3 from "d3"; import _ from "underscore"; @@ -133,7 +135,7 @@ export default class PieChart extends Component { > <div className={styles.ChartAndDetail}> <div ref="detail" className={styles.Detail}> - <div className={styles.Value}>{value}</div> + <div className={cx(styles.Value, "fullscreen-normal-text fullscreen-night-text")}>{value}</div> <div className={styles.Title}>{title}</div> </div> <div className={styles.Chart}> diff --git a/frontend/src/visualizations/Scalar.jsx b/frontend/src/visualizations/Scalar.jsx index 1a3b8243dcc1b6978aab2620fa7dfce734f4b7bd..8a81ef372ffa7adf1f1649781a6333661700173a 100644 --- a/frontend/src/visualizations/Scalar.jsx +++ b/frontend/src/visualizations/Scalar.jsx @@ -108,11 +108,11 @@ export default class Scalar extends Component { return ( <div className={cx(className, styles.Scalar, styles[isSmall ? "small" : "large"])}> <div className="Card-title absolute top right p1 px2">{actionButtons}</div> - <Ellipsified className={cx(styles.Value, 'ScalarValue')} tooltip={fullScalarValue} alwaysShowTooltip={fullScalarValue !== compactScalarValue}> + <Ellipsified className={cx(styles.Value, 'ScalarValue', 'fullscreen-normal-text', 'fullscreen-night-text')} tooltip={fullScalarValue} alwaysShowTooltip={fullScalarValue !== compactScalarValue}> {compactScalarValue} </Ellipsified> <Ellipsified className={styles.Title} tooltip={card.name}> - <a className="no-decoration" href={Urls.card(card.id)}>{card.name}</a> + <a className="no-decoration fullscreen-normal-text fullscreen-night-text" href={Urls.card(card.id)}>{card.name}</a> </Ellipsified> </div> ); diff --git a/frontend/src/visualizations/Table.jsx b/frontend/src/visualizations/Table.jsx index fe77adc27c5b26a660bdc82dd62e4c0494a3b078..3d7a4e3ad4843b881060e8cfb4c99aab58f2da3c 100644 --- a/frontend/src/visualizations/Table.jsx +++ b/frontend/src/visualizations/Table.jsx @@ -35,6 +35,7 @@ export default class Bar extends Component { } componentWillReceiveProps(newProps) { + // TODO: remove use of deprecated "card" and "data" props if (newProps.data !== this.state.rawData && newProps.data) { // check if the data is pivotable (2 groupings + 1 agg != 'rows') const isPivoted = !!( diff --git a/frontend/src/visualizations/TableSimple.jsx b/frontend/src/visualizations/TableSimple.jsx index bb96cc928f3c9d9cdf7ec97eb9ccc42a20397ec9..ce4bf08aa619d8db2cc8c25ee199800ea09ba943 100644 --- a/frontend/src/visualizations/TableSimple.jsx +++ b/frontend/src/visualizations/TableSimple.jsx @@ -45,17 +45,17 @@ export default class TableSimple extends Component { let headerHeight = ReactDOM.findDOMNode(this.refs.header).getBoundingClientRect().height; let footerHeight = this.refs.footer ? ReactDOM.findDOMNode(this.refs.footer).getBoundingClientRect().height : 0; let rowHeight = ReactDOM.findDOMNode(this.refs.firstRow).getBoundingClientRect().height + 1; - let pageSize = Math.floor((this.props.height - headerHeight - footerHeight) / rowHeight) || 1; + let pageSize = Math.max(1, Math.floor((this.props.height - headerHeight - footerHeight) / rowHeight)); if (this.state.pageSize !== pageSize) { this.setState({ pageSize }); } } render() { - const { series } = this.props; + const { data } = this.props; const { page, pageSize, sortColumn, sortDescending } = this.state; - let { rows, cols } = series[0].data; + let { rows, cols } = data; let start = pageSize * page; let end = Math.min(rows.length - 1, pageSize * (page + 1) - 1); @@ -71,7 +71,7 @@ export default class TableSimple extends Component { <div className={cx(this.props.className, "relative flex flex-column")}> <div className="flex-full relative border-bottom"> <div className="absolute top bottom left right scroll-x scroll-show scroll-show--horizontal scroll-show--hover" style={{ overflowY: "hidden" }}> - <table className={cx(styles.Table, styles.TableSimple)}> + <table className={cx(styles.Table, styles.TableSimple, 'fullscreen-normal-text', 'fullscreen-night-text')}> <thead ref="header"> <tr> {cols.map((col, colIndex) => @@ -103,7 +103,7 @@ export default class TableSimple extends Component { </div> </div> { pageSize < rows.length ? - <div ref="footer" className="p1 flex flex-no-shrink flex-align-right"> + <div ref="footer" className="p1 flex flex-no-shrink flex-align-right fullscreen-normal-text fullscreen-night-text"> <span className="text-bold">Rows {start + 1}-{end + 1} of {rows.length}</span> <span className={cx("text-brand-hover px1 cursor-pointer", { disabled: start === 0 })} onClick={() => this.setState({ page: page - 1 })}> <Icon name="left" height={10} /> diff --git a/frontend/src/visualizations/components/CardRenderer.jsx b/frontend/src/visualizations/components/CardRenderer.jsx index eec202f5357748567497218e70688d7750b30999..c7a007cdc71fa45b252fffef21f0470689293a0c 100644 --- a/frontend/src/visualizations/components/CardRenderer.jsx +++ b/frontend/src/visualizations/components/CardRenderer.jsx @@ -2,7 +2,6 @@ import React, { Component, PropTypes } from "react"; import ReactDOM from "react-dom"; import ExplicitSize from "metabase/components/ExplicitSize.jsx"; -import AbsoluteContainer from "metabase/components/AbsoluteContainer.jsx"; import * as charting from "metabase/visualizations/lib/CardRenderer"; @@ -10,9 +9,9 @@ import { isSameSeries } from "metabase/visualizations/lib/utils"; import { getSettingsForVisualization } from "metabase/lib/visualization_settings"; import dc from "dc"; +import cx from "classnames"; @ExplicitSize -@AbsoluteContainer export default class CardRenderer extends Component { static propTypes = { chartType: PropTypes.string.isRequired, @@ -27,8 +26,7 @@ export default class CardRenderer extends Component { } componentDidMount() { - // avoid race condition with initial layout - setTimeout(() => this.renderChart()); + this.renderChart(); } componentDidUpdate() { @@ -55,7 +53,11 @@ export default class CardRenderer extends Component { // reset the DOM: let element = parent.firstChild; - parent.removeChild(element); + if (element) { + parent.removeChild(element); + } + + // create a new container element element = document.createElement("div"); parent.appendChild(element); @@ -80,9 +82,7 @@ export default class CardRenderer extends Component { render() { return ( - <div className="Card-outer"> - <div ref="chart"></div> - </div> + <div className={cx(this.props.className, "Card-outer")}></div> ); } } diff --git a/frontend/src/visualizations/components/ChartWithLegend.jsx b/frontend/src/visualizations/components/ChartWithLegend.jsx index ca4430a3f1acc5f16cb9804274bdb28af3cfeaef..f79b991fd9df536b4eceb559ad0adcaac416d873 100644 --- a/frontend/src/visualizations/components/ChartWithLegend.jsx +++ b/frontend/src/visualizations/components/ChartWithLegend.jsx @@ -58,7 +58,7 @@ export default class ChartWithLegend extends Component { } return ( - <div className={cx(className, 'fullscreen-text-small', styles.ChartWithLegend, styles[type], flexChart && styles.flexChart)} style={{ paddingBottom: PADDING, paddingLeft: PADDING, paddingRight: PADDING }}> + <div className={cx(className, 'fullscreen-text-small fullscreen-normal-text fullscreen-night-text', styles.ChartWithLegend, styles[type], flexChart && styles.flexChart)} style={{ paddingBottom: PADDING, paddingLeft: PADDING, paddingRight: PADDING }}> { LegendComponent ? <LegendComponent className={styles.Legend} diff --git a/frontend/src/visualizations/components/Legend.css b/frontend/src/visualizations/components/Legend.css index e2c2f1be89e3f476368560cd53cdf5f4735170e9..fa82edb740ab76933401d6d1abdea075e3c74997 100644 --- a/frontend/src/visualizations/components/Legend.css +++ b/frontend/src/visualizations/components/Legend.css @@ -13,7 +13,6 @@ fullscreen dashboard mode :local .LegendHeader { margin-top: 0.5em; margin-bottom: 0.5em; - height: 24px; } :local(.LegendItem).muted { diff --git a/frontend/src/visualizations/components/LegendItem.jsx b/frontend/src/visualizations/components/LegendItem.jsx index 7c4c424324e7cc1862d2fba5fee5a3f1effa71e0..6fd9a26b17d341abc3cf1afefd8c990b5760f415 100644 --- a/frontend/src/visualizations/components/LegendItem.jsx +++ b/frontend/src/visualizations/components/LegendItem.jsx @@ -26,7 +26,7 @@ export default class LegendItem extends Component { return ( <a href={href} - className={cx(className, "LegendItem", "no-decoration flex align-center", { mr1: showTitle, muted: isMuted })} + className={cx(className, "LegendItem", "no-decoration flex align-center fullscreen-normal-text fullscreen-night-text", { mr1: showTitle, muted: isMuted })} style={{ overflowX: "hidden", flex: "0 1 auto" }} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} diff --git a/frontend/src/visualizations/components/LineAreaBarChart.jsx b/frontend/src/visualizations/components/LineAreaBarChart.jsx index b6460e1fec0356ec936d94f4515fcdc92fb68e4b..d07fc15635bf4a57eb19d78add9af4d68f18c58e 100644 --- a/frontend/src/visualizations/components/LineAreaBarChart.jsx +++ b/frontend/src/visualizations/components/LineAreaBarChart.jsx @@ -193,7 +193,7 @@ export default class LineAreaBarChart extends Component { return ( <div className={cx("flex flex-column p1", this.getHoverClasses(), this.props.className)}> { (isDashboard && isMultiseries) && - <a href={card.id && Urls.card(card.id)} className="Card-title pt1 px1 flex-no-shrink no-decoration h3 text-bold" style={{fontSize: '1em'}}>{card.name}</a> + <a href={card.id && Urls.card(card.id)} className="Card-title pt1 px1 flex-no-shrink no-decoration h3 text-bold fullscreen-night-text fullscreen-normal-text" style={{fontSize: '1em'}}>{card.name}</a> } { (isDashboard || isMultiseries) && <LegendHeader diff --git a/frontend/src/visualizations/components/Visualization.jsx b/frontend/src/visualizations/components/Visualization.jsx index cca5d898f809a53d826631ef5d6b7273c859f398..f7a9cd733225038919377ad1b665af4569b657ca 100644 --- a/frontend/src/visualizations/components/Visualization.jsx +++ b/frontend/src/visualizations/components/Visualization.jsx @@ -1,10 +1,20 @@ import React, { Component, PropTypes } from "react"; +import ExplicitSize from "metabase/components/ExplicitSize.jsx"; +import LegendHeader from "metabase/visualizations/components/LegendHeader.jsx"; +import LoadingSpinner from "metabase/components/LoadingSpinner.jsx"; +import Icon from "metabase/components/Icon.jsx"; +import Tooltip from "metabase/components/Tooltip.jsx"; + import visualizations from "metabase/visualizations"; import i from "icepick"; import _ from "underscore"; +import cx from "classnames"; + +const ERROR_MESSAGE_GENERIC = "There was a problem displaying this chart."; +@ExplicitSize export default class Visualization extends Component { constructor(props, context) { super(props, context) @@ -36,29 +46,6 @@ export default class Visualization extends Component { onUpdateVisualizationSetting: (...args) => console.warn("onUpdateVisualizationSetting", args) }; - componentWillMount() { - this.componentWillReceiveProps(this.props); - } - - componentWillReceiveProps(newProps) { - let { card, data } = newProps.series[0] - if (!data) { - this.setState({ error: "No data (TODO)" }); - } else if (!card.display) { - this.setState({ error: "Chart type not set" }); - } else { - let CardVisualization = visualizations.get(card.display); - try { - if (CardVisualization.checkRenderable) { - CardVisualization.checkRenderable(data.cols, data.rows); - } - this.setState({ error: null }); - } catch (e) { - this.setState({ error: e.message || "Missing error message (TODO)" }); - } - } - } - onHoverChange(hovered) { const { renderInfo } = this.state; if (hovered) { @@ -80,33 +67,72 @@ export default class Visualization extends Component { } render() { + const { series, actionButtons, className, isDashboard, width } = this.props; + const CardVisualization = visualizations.get(series[0].card.display); + const small = width < 330; + let error = this.props.error || this.state.error; - if (error) { - return ( - <div className="QueryError flex full align-center text-error"> - <div className="QueryError-iconWrapper"> - <svg className="QueryError-icon" viewBox="0 0 32 32" width="64" height="64" fill="currentcolor"> - <path d="M4 8 L8 4 L16 12 L24 4 L28 8 L20 16 L28 24 L24 28 L16 20 L8 28 L4 24 L12 16 z "></path> - </svg> - </div> - <span className="QueryError-message">{error}</span> - </div> - ); - } else { - let { series } = this.props; - let CardVisualization = visualizations.get(series[0].card.display); - return ( - <CardVisualization - {...this.props} - series={series} - card={series[0].card} // convienence for single-series visualizations - data={series[0].data} // convienence for single-series visualizations - hovered={this.state.hovered} - onHoverChange={this.onHoverChange} - onRenderError={this.onRenderError} - onRender={this.onRender} - /> - ); + let loading = !(series.length > 0 && _.every(series, (s) => s.data)); + + if (!loading && !error) { + if (!CardVisualization) { + error = "Could not find visualization"; + } else { + try { + if (CardVisualization.checkRenderable) { + CardVisualization.checkRenderable(series[0].data.cols, series[0].data.rows); + } + } catch (e) { + error = e.message || "Could not display this chart with this data."; + } + } } + + return ( + <div className={cx(className, "flex flex-column")}> + { isDashboard && (loading || error || !CardVisualization.noHeader) ? + <div className="p1 flex-no-shrink"> + <LegendHeader + series={series} + actionButtons={actionButtons} + /> + </div> + : null + } + { error ? + <div className="flex-full px1 pb1 text-centered text-slate-light flex flex-column layout-centered"> + <Tooltip tooltip={isDashboard ? ERROR_MESSAGE_GENERIC : error} isEnabled={small}> + <div className="mb2"> + <Icon name="warning" width={50} height={50} /> + </div> + </Tooltip> + { !small && + <span className="h4 text-bold"> + { isDashboard ? ERROR_MESSAGE_GENERIC : error } + </span> + } + </div> + : loading ? + <div className="flex-full p1 text-centered text-brand flex flex-column layout-centered"> + <LoadingSpinner /> + <span className="h4 text-bold ml1 text-slate-light"> + Loading... + </span> + </div> + : + <CardVisualization + {...this.props} + className="flex-full" + series={series} + card={series[0].card} // convienence for single-series visualizations + data={series[0].data} // convienence for single-series visualizations + hovered={this.state.hovered} + onHoverChange={this.onHoverChange} + onRenderError={this.onRenderError} + onRender={this.onRender} + /> + } + </div> + ); } } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 0dc7e8e77cce60576fe5e559187fd24ef46fb894..b4397ebbc06683ca0a0477a307fdea19ebd69ffd 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -27,10 +27,10 @@ "version": "1.2.28" }, "babel-core": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -73,14 +73,6 @@ "js-tokens": { "version": "1.0.2" }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } - }, "repeating": { "version": "1.1.3", "dependencies": { @@ -97,7 +89,7 @@ } }, "babel-generator": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "detect-indent": { "version": "3.0.1", @@ -145,13 +137,13 @@ "version": "6.6.0" }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babel-register": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "core-js": { - "version": "2.1.3" + "version": "2.2.1" }, "home-or-tmp": { "version": "1.0.0", @@ -188,7 +180,7 @@ } }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -196,16 +188,16 @@ } }, "babel-template": { - "version": "6.6.0" + "version": "6.7.0" }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "globals": { "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -233,18 +225,18 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "esutils": { "version": "2.0.2" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "convert-source-map": { "version": "1.2.0" @@ -300,16 +292,13 @@ } }, "babel-eslint": { - "version": "5.0.0", + "version": "6.0.0-beta.6", "dependencies": { - "acorn-to-esprima": { - "version": "2.0.8" - }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -351,22 +340,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -385,7 +366,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -416,10 +397,10 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -433,15 +414,15 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, "babylon": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -482,7 +463,7 @@ "version": "3.9.1" }, "lodash.isarguments": { - "version": "3.0.7" + "version": "3.0.8" }, "lodash.isarray": { "version": "3.0.4" @@ -498,7 +479,7 @@ "version": "3.1.4", "dependencies": { "lodash.isarguments": { - "version": "3.0.7" + "version": "3.0.8" }, "lodash.isarray": { "version": "3.0.4" @@ -521,7 +502,7 @@ "version": "3.0.8", "dependencies": { "lodash.isarguments": { - "version": "3.0.7" + "version": "3.0.8" }, "lodash.isarray": { "version": "3.0.4" @@ -553,22 +534,6 @@ } } }, - "babel-plugin-transform-class-properties": { - "version": "6.6.0", - "dependencies": { - "babel-plugin-syntax-class-properties": { - "version": "6.5.0" - }, - "babel-runtime": { - "version": "5.8.35", - "dependencies": { - "core-js": { - "version": "1.2.6" - } - } - } - } - }, "babel-plugin-transform-decorators-legacy": { "version": "1.3.4", "dependencies": { @@ -576,7 +541,7 @@ "version": "6.5.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -589,15 +554,15 @@ "version": "6.6.1", "dependencies": { "core-js": { - "version": "2.1.3" + "version": "2.2.1" } } }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -605,10 +570,10 @@ } }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -650,19 +615,11 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "debug": { "version": "2.2.0", @@ -676,7 +633,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -704,18 +661,18 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "esutils": { "version": "2.0.2" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "lodash": { "version": "3.10.1" @@ -725,13 +682,13 @@ } }, "babel-polyfill": { - "version": "6.6.1", + "version": "6.7.4", "dependencies": { "babel-regenerator-runtime": { "version": "6.5.0" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -739,7 +696,7 @@ } }, "core-js": { - "version": "2.1.3" + "version": "2.2.1" } } }, @@ -747,10 +704,10 @@ "version": "6.6.0", "dependencies": { "babel-plugin-check-es2015-constants": { - "version": "6.5.0", + "version": "6.7.2", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -763,7 +720,7 @@ "version": "6.5.2", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -773,10 +730,10 @@ } }, "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.5.0", + "version": "6.6.5", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -786,10 +743,10 @@ } }, "babel-plugin-transform-es2015-block-scoping": { - "version": "6.6.0", + "version": "6.7.1", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -797,18 +754,18 @@ } }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babylon": { - "version": "6.6.0" + "version": "6.7.0" } } }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -850,22 +807,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -879,7 +828,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -907,13 +856,13 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "esutils": { "version": "2.0.2" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, @@ -923,10 +872,10 @@ } }, "babel-plugin-transform-es2015-classes": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "babel-helper-define-map": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "lodash": { "version": "3.10.1" @@ -937,7 +886,7 @@ "version": "6.6.0", "dependencies": { "babel-helper-get-function-arity": { - "version": "6.5.0" + "version": "6.6.5" } } }, @@ -945,13 +894,13 @@ "version": "6.6.0" }, "babel-helper-replace-supers": { - "version": "6.6.0" + "version": "6.7.0" }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -959,10 +908,10 @@ } }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "lodash": { "version": "3.10.1" @@ -970,10 +919,10 @@ } }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -1015,19 +964,11 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -1041,7 +982,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -1072,7 +1013,7 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "esutils": { "version": "2.0.2" @@ -1081,29 +1022,29 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } } } }, "babel-plugin-transform-es2015-computed-properties": { - "version": "6.5.2", + "version": "6.6.5", "dependencies": { "babel-helper-define-map": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "babel-helper-function-name": { "version": "6.6.0", "dependencies": { "babel-helper-get-function-arity": { - "version": "6.5.0" + "version": "6.6.5" }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -1145,22 +1086,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -1174,7 +1107,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -1204,13 +1137,13 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -1249,22 +1182,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -1278,7 +1203,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -1309,7 +1234,7 @@ "version": "2.0.2" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, @@ -1319,7 +1244,7 @@ } }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -1327,13 +1252,13 @@ } }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -1375,19 +1300,11 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "debug": { "version": "2.2.0", @@ -1401,7 +1318,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -1429,18 +1346,18 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "esutils": { "version": "2.0.2" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "lodash": { "version": "3.10.1" @@ -1450,10 +1367,10 @@ } }, "babel-plugin-transform-es2015-destructuring": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -1463,10 +1380,10 @@ } }, "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.6.0", + "version": "6.6.4", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -1474,13 +1391,13 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -1519,22 +1436,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -1548,7 +1457,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -1582,7 +1491,7 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } } @@ -1592,7 +1501,7 @@ "version": "6.6.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -1608,13 +1517,13 @@ "version": "6.6.0", "dependencies": { "babel-helper-get-function-arity": { - "version": "6.5.0" + "version": "6.6.5" }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "lodash": { "version": "3.10.1" @@ -1622,10 +1531,10 @@ } }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -1667,22 +1576,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -1696,7 +1597,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -1729,7 +1630,7 @@ } }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -1737,13 +1638,13 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -1782,22 +1683,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -1811,7 +1704,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -1845,7 +1738,7 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } } @@ -1855,7 +1748,7 @@ "version": "6.5.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -1865,13 +1758,13 @@ } }, "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-plugin-transform-strict-mode": { - "version": "6.5.2" + "version": "6.6.5" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -1879,13 +1772,13 @@ } }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -1927,19 +1820,11 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "debug": { "version": "2.2.0", @@ -1953,7 +1838,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -1981,7 +1866,7 @@ } }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "lodash": { "version": "3.10.1" @@ -1989,13 +1874,13 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -2034,22 +1919,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -2063,7 +1940,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -2097,29 +1974,29 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } } } }, "babel-plugin-transform-es2015-object-super": { - "version": "6.5.0", + "version": "6.6.5", "dependencies": { "babel-helper-replace-supers": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babel-helper-optimise-call-expression": { "version": "6.6.0" }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "lodash": { "version": "3.10.1" @@ -2127,10 +2004,10 @@ } }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -2172,19 +2049,11 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -2198,7 +2067,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -2229,7 +2098,7 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "esutils": { "version": "2.0.2" @@ -2238,14 +2107,14 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } } } }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -2255,21 +2124,21 @@ } }, "babel-plugin-transform-es2015-parameters": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babel-helper-call-delegate": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "babel-helper-hoist-variables": { - "version": "6.5.0" + "version": "6.6.5" } } }, "babel-helper-get-function-arity": { - "version": "6.5.0" + "version": "6.6.5" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -2277,10 +2146,10 @@ } }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "lodash": { "version": "3.10.1" @@ -2288,10 +2157,10 @@ } }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -2333,22 +2202,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -2362,7 +2223,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -2393,7 +2254,7 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "esutils": { "version": "2.0.2" @@ -2402,7 +2263,7 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } } @@ -2412,7 +2273,7 @@ "version": "6.5.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -2420,13 +2281,13 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -2465,22 +2326,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -2494,7 +2347,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -2528,17 +2381,17 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } } } }, "babel-plugin-transform-es2015-spread": { - "version": "6.5.2", + "version": "6.6.5", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -2551,7 +2404,7 @@ "version": "6.5.0", "dependencies": { "babel-helper-regex": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "lodash": { "version": "3.10.1" @@ -2559,7 +2412,7 @@ } }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -2567,13 +2420,13 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -2612,22 +2465,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -2641,7 +2486,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -2675,17 +2520,17 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } } } }, "babel-plugin-transform-es2015-template-literals": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -2698,7 +2543,7 @@ "version": "6.6.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -2711,16 +2556,16 @@ "version": "6.5.0", "dependencies": { "babel-helper-regex": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -2759,22 +2604,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -2788,7 +2625,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -2819,7 +2656,7 @@ "version": "2.0.2" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, @@ -2829,7 +2666,7 @@ } }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -2858,13 +2695,13 @@ } }, "babel-plugin-transform-regenerator": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "babel-plugin-syntax-async-functions": { "version": "6.5.0" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -2872,10 +2709,10 @@ } }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -2917,19 +2754,11 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "debug": { "version": "2.2.0", @@ -2943,7 +2772,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -2974,7 +2803,7 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "esutils": { "version": "2.0.2" @@ -2983,12 +2812,12 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "private": { "version": "0.1.6" @@ -3004,7 +2833,7 @@ "version": "6.5.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3017,7 +2846,7 @@ "version": "6.5.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3027,10 +2856,10 @@ } }, "babel-plugin-transform-flow-strip-types": { - "version": "6.5.0", + "version": "6.7.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3043,7 +2872,7 @@ "version": "6.5.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3053,19 +2882,19 @@ } }, "babel-plugin-transform-react-jsx": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-helper-builder-react-jsx": { - "version": "6.5.0", + "version": "6.6.5", "dependencies": { "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -3104,22 +2933,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -3133,7 +2954,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -3161,7 +2982,7 @@ } }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, @@ -3174,7 +2995,7 @@ } }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3187,7 +3008,7 @@ "version": "6.5.0", "dependencies": { "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3208,7 +3029,7 @@ "version": "6.5.0" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3224,7 +3045,7 @@ "version": "6.5.0" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3237,13 +3058,13 @@ "version": "6.5.0", "dependencies": { "babel-plugin-transform-class-constructor-call": { - "version": "6.5.0", + "version": "6.6.5", "dependencies": { "babel-plugin-syntax-class-constructor-call": { "version": "6.5.0" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3251,13 +3072,13 @@ } }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -3299,19 +3120,11 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "debug": { "version": "2.2.0", @@ -3325,7 +3138,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -3353,18 +3166,18 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "esutils": { "version": "2.0.2" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "lodash": { "version": "3.10.1" @@ -3373,23 +3186,39 @@ } } }, - "babel-plugin-transform-decorators": { + "babel-plugin-transform-class-properties": { "version": "6.6.0", + "dependencies": { + "babel-plugin-syntax-class-properties": { + "version": "6.5.0" + }, + "babel-runtime": { + "version": "5.8.38", + "dependencies": { + "core-js": { + "version": "1.2.6" + } + } + } + } + }, + "babel-plugin-transform-decorators": { + "version": "6.6.5", "dependencies": { "babel-helper-define-map": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "babel-helper-function-name": { "version": "6.6.0", "dependencies": { "babel-helper-get-function-arity": { - "version": "6.5.0" + "version": "6.6.5" }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -3431,22 +3260,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -3460,7 +3281,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -3495,16 +3316,16 @@ } }, "babel-helper-explode-class": { - "version": "6.6.0", + "version": "6.6.5", "dependencies": { "babel-helper-bindify-decorators": { - "version": "6.6.0" + "version": "6.6.5" }, "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -3546,22 +3367,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -3575,7 +3388,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -3611,7 +3424,7 @@ "version": "6.5.0" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3619,13 +3432,13 @@ } }, "babel-template": { - "version": "6.6.0", + "version": "6.7.0", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -3667,19 +3480,11 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "debug": { "version": "2.2.0", @@ -3693,7 +3498,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -3721,7 +3526,7 @@ } }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "lodash": { "version": "3.10.1" @@ -3729,13 +3534,13 @@ } }, "babel-types": { - "version": "6.6.0", + "version": "6.7.2", "dependencies": { "babel-traverse": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "babel-code-frame": { - "version": "6.6.0", + "version": "6.7.4", "dependencies": { "chalk": { "version": "1.1.1", @@ -3774,22 +3579,14 @@ }, "js-tokens": { "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } } } }, "babel-messages": { - "version": "6.6.0" + "version": "6.7.2" }, "babylon": { - "version": "6.6.0" + "version": "6.7.0" }, "debug": { "version": "2.2.0", @@ -3803,7 +3600,7 @@ "version": "8.18.0" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -3837,7 +3634,7 @@ "version": "3.10.1" }, "to-fast-properties": { - "version": "1.0.1" + "version": "1.0.2" } } } @@ -3850,7 +3647,7 @@ "version": "6.5.0" }, "babel-runtime": { - "version": "5.8.35", + "version": "5.8.38", "dependencies": { "core-js": { "version": "1.2.6" @@ -3858,446 +3655,422 @@ } } } - } - } - } - } - }, - "babel-preset-stage-2": { - "version": "6.5.0", - "dependencies": { - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.5.0", - "dependencies": { - "babel-runtime": { - "version": "5.8.35", - "dependencies": { - "core-js": { - "version": "1.2.6" - } - } - } - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.5.0", - "dependencies": { - "babel-plugin-syntax-object-rest-spread": { - "version": "6.5.0" }, - "babel-runtime": { - "version": "5.8.35", - "dependencies": { - "core-js": { - "version": "1.2.6" - } - } - } - } - }, - "babel-preset-stage-3": { - "version": "6.5.0", - "dependencies": { - "babel-plugin-transform-async-to-generator": { + "babel-preset-stage-2": { "version": "6.5.0", "dependencies": { - "babel-helper-remap-async-to-generator": { - "version": "6.6.0", + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.5.0", "dependencies": { - "babel-helper-function-name": { - "version": "6.6.0", + "babel-runtime": { + "version": "5.8.38", "dependencies": { - "babel-helper-get-function-arity": { - "version": "6.5.0" + "core-js": { + "version": "1.2.6" } } + } + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.6.5", + "dependencies": { + "babel-plugin-syntax-object-rest-spread": { + "version": "6.5.0" }, - "babel-template": { - "version": "6.6.0", + "babel-runtime": { + "version": "5.8.38", "dependencies": { - "babylon": { - "version": "6.6.0" - }, - "lodash": { - "version": "3.10.1" + "core-js": { + "version": "1.2.6" } } - }, - "babel-traverse": { - "version": "6.6.0", + } + } + }, + "babel-preset-stage-3": { + "version": "6.5.0", + "dependencies": { + "babel-plugin-transform-async-to-generator": { + "version": "6.7.4", "dependencies": { - "babel-code-frame": { - "version": "6.6.0", + "babel-helper-remap-async-to-generator": { + "version": "6.7.0", "dependencies": { - "chalk": { - "version": "1.1.1", + "babel-helper-function-name": { + "version": "6.6.0", "dependencies": { - "ansi-styles": { - "version": "2.2.0", + "babel-helper-get-function-arity": { + "version": "6.6.5" + } + } + }, + "babel-template": { + "version": "6.7.0", + "dependencies": { + "babylon": { + "version": "6.7.0" + }, + "lodash": { + "version": "3.10.1" + } + } + }, + "babel-traverse": { + "version": "6.7.4", + "dependencies": { + "babel-code-frame": { + "version": "6.7.4", "dependencies": { - "color-convert": { - "version": "1.0.0" + "chalk": { + "version": "1.1.1", + "dependencies": { + "ansi-styles": { + "version": "2.2.0", + "dependencies": { + "color-convert": { + "version": "1.0.0" + } + } + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "has-ansi": { + "version": "2.0.0", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } + }, + "supports-color": { + "version": "2.0.0" + } + } + }, + "esutils": { + "version": "2.0.2" + }, + "js-tokens": { + "version": "1.0.2" } } }, - "escape-string-regexp": { - "version": "1.0.5" + "babel-messages": { + "version": "6.7.2" }, - "has-ansi": { - "version": "2.0.0", + "babylon": { + "version": "6.7.0" + }, + "debug": { + "version": "2.2.0", "dependencies": { - "ansi-regex": { - "version": "2.0.0" + "ms": { + "version": "0.7.1" } } }, - "strip-ansi": { - "version": "3.0.1", + "globals": { + "version": "8.18.0" + }, + "invariant": { + "version": "2.2.1", "dependencies": { - "ansi-regex": { - "version": "2.0.0" + "loose-envify": { + "version": "1.1.0", + "dependencies": { + "js-tokens": { + "version": "1.0.2" + } + } } } }, - "supports-color": { - "version": "2.0.0" + "lodash": { + "version": "3.10.1" + }, + "repeating": { + "version": "1.1.3", + "dependencies": { + "is-finite": { + "version": "1.0.1", + "dependencies": { + "number-is-nan": { + "version": "1.0.0" + } + } + } + } } } }, - "esutils": { - "version": "2.0.2" - }, - "js-tokens": { - "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } - } - } - }, - "babel-messages": { - "version": "6.6.0" - }, - "babylon": { - "version": "6.6.0" - }, - "debug": { - "version": "2.2.0", - "dependencies": { - "ms": { - "version": "0.7.1" - } - } - }, - "globals": { - "version": "8.18.0" - }, - "invariant": { - "version": "2.2.0", - "dependencies": { - "loose-envify": { - "version": "1.1.0", + "babel-types": { + "version": "6.7.2", "dependencies": { - "js-tokens": { + "esutils": { + "version": "2.0.2" + }, + "lodash": { + "version": "3.10.1" + }, + "to-fast-properties": { "version": "1.0.2" } } } } }, - "lodash": { - "version": "3.10.1" + "babel-plugin-syntax-async-functions": { + "version": "6.5.0" }, - "repeating": { - "version": "1.1.3", + "babel-runtime": { + "version": "5.8.38", "dependencies": { - "is-finite": { - "version": "1.0.1", - "dependencies": { - "number-is-nan": { - "version": "1.0.0" - } - } + "core-js": { + "version": "1.2.6" } } } } }, - "babel-types": { - "version": "6.6.0", + "babel-plugin-transform-exponentiation-operator": { + "version": "6.5.0", "dependencies": { - "esutils": { - "version": "2.0.2" - }, - "lodash": { - "version": "3.10.1" - }, - "to-fast-properties": { - "version": "1.0.1" - } - } - } - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.5.0" - }, - "babel-runtime": { - "version": "5.8.35", - "dependencies": { - "core-js": { - "version": "1.2.6" - } - } - } - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.5.0", - "dependencies": { - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.6.0", - "dependencies": { - "babel-helper-explode-assignable-expression": { - "version": "6.5.0", - "dependencies": { - "babel-traverse": { - "version": "6.6.0", + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.6.5", "dependencies": { - "babel-code-frame": { - "version": "6.6.0", + "babel-helper-explode-assignable-expression": { + "version": "6.6.5", "dependencies": { - "chalk": { - "version": "1.1.1", + "babel-traverse": { + "version": "6.7.4", "dependencies": { - "ansi-styles": { - "version": "2.2.0", + "babel-code-frame": { + "version": "6.7.4", "dependencies": { - "color-convert": { - "version": "1.0.0" + "chalk": { + "version": "1.1.1", + "dependencies": { + "ansi-styles": { + "version": "2.2.0", + "dependencies": { + "color-convert": { + "version": "1.0.0" + } + } + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "has-ansi": { + "version": "2.0.0", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } + }, + "supports-color": { + "version": "2.0.0" + } + } + }, + "esutils": { + "version": "2.0.2" + }, + "js-tokens": { + "version": "1.0.2" } } }, - "escape-string-regexp": { - "version": "1.0.5" + "babel-messages": { + "version": "6.7.2" }, - "has-ansi": { - "version": "2.0.0", + "babylon": { + "version": "6.7.0" + }, + "debug": { + "version": "2.2.0", "dependencies": { - "ansi-regex": { - "version": "2.0.0" + "ms": { + "version": "0.7.1" } } }, - "strip-ansi": { - "version": "3.0.1", + "globals": { + "version": "8.18.0" + }, + "invariant": { + "version": "2.2.1", "dependencies": { - "ansi-regex": { - "version": "2.0.0" + "loose-envify": { + "version": "1.1.0", + "dependencies": { + "js-tokens": { + "version": "1.0.2" + } + } } } }, - "supports-color": { - "version": "2.0.0" - } - } - }, - "esutils": { - "version": "2.0.2" - }, - "js-tokens": { - "version": "1.0.2" - }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } - } - } - }, - "babel-messages": { - "version": "6.6.0" - }, - "babylon": { - "version": "6.6.0" - }, - "debug": { - "version": "2.2.0", - "dependencies": { - "ms": { - "version": "0.7.1" - } - } - }, - "globals": { - "version": "8.18.0" - }, - "invariant": { - "version": "2.2.0", - "dependencies": { - "loose-envify": { - "version": "1.1.0", - "dependencies": { - "js-tokens": { - "version": "1.0.2" + "lodash": { + "version": "3.10.1" + }, + "repeating": { + "version": "1.1.3", + "dependencies": { + "is-finite": { + "version": "1.0.1", + "dependencies": { + "number-is-nan": { + "version": "1.0.0" + } + } + } + } } } } } }, - "lodash": { - "version": "3.10.1" - }, - "repeating": { - "version": "1.1.3", - "dependencies": { - "is-finite": { - "version": "1.0.1", - "dependencies": { - "number-is-nan": { - "version": "1.0.0" - } - } - } - } - } - } - } - } - }, - "babel-types": { - "version": "6.6.0", - "dependencies": { - "babel-traverse": { - "version": "6.6.0", - "dependencies": { - "babel-code-frame": { - "version": "6.6.0", + "babel-types": { + "version": "6.7.2", "dependencies": { - "chalk": { - "version": "1.1.1", + "babel-traverse": { + "version": "6.7.4", "dependencies": { - "ansi-styles": { - "version": "2.2.0", + "babel-code-frame": { + "version": "6.7.4", "dependencies": { - "color-convert": { - "version": "1.0.0" + "chalk": { + "version": "1.1.1", + "dependencies": { + "ansi-styles": { + "version": "2.2.0", + "dependencies": { + "color-convert": { + "version": "1.0.0" + } + } + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "has-ansi": { + "version": "2.0.0", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } + }, + "supports-color": { + "version": "2.0.0" + } + } + }, + "js-tokens": { + "version": "1.0.2" } } }, - "escape-string-regexp": { - "version": "1.0.5" + "babel-messages": { + "version": "6.7.2" }, - "has-ansi": { - "version": "2.0.0", + "babylon": { + "version": "6.7.0" + }, + "debug": { + "version": "2.2.0", "dependencies": { - "ansi-regex": { - "version": "2.0.0" + "ms": { + "version": "0.7.1" } } }, - "strip-ansi": { - "version": "3.0.1", + "globals": { + "version": "8.18.0" + }, + "invariant": { + "version": "2.2.1", "dependencies": { - "ansi-regex": { - "version": "2.0.0" + "loose-envify": { + "version": "1.1.0", + "dependencies": { + "js-tokens": { + "version": "1.0.2" + } + } } } }, - "supports-color": { - "version": "2.0.0" + "repeating": { + "version": "1.1.3", + "dependencies": { + "is-finite": { + "version": "1.0.1", + "dependencies": { + "number-is-nan": { + "version": "1.0.0" + } + } + } + } } } }, - "js-tokens": { - "version": "1.0.2" + "esutils": { + "version": "2.0.2" }, - "line-numbers": { - "version": "0.2.0", - "dependencies": { - "left-pad": { - "version": "0.0.3" - } - } - } - } - }, - "babel-messages": { - "version": "6.6.0" - }, - "babylon": { - "version": "6.6.0" - }, - "debug": { - "version": "2.2.0", - "dependencies": { - "ms": { - "version": "0.7.1" - } - } - }, - "globals": { - "version": "8.18.0" - }, - "invariant": { - "version": "2.2.0", - "dependencies": { - "loose-envify": { - "version": "1.1.0", - "dependencies": { - "js-tokens": { - "version": "1.0.2" - } - } - } - } - }, - "repeating": { - "version": "1.1.3", - "dependencies": { - "is-finite": { - "version": "1.0.1", - "dependencies": { - "number-is-nan": { - "version": "1.0.0" - } - } + "lodash": { + "version": "3.10.1" + }, + "to-fast-properties": { + "version": "1.0.2" } } } } }, - "esutils": { - "version": "2.0.2" - }, - "lodash": { - "version": "3.10.1" + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.5.0" }, - "to-fast-properties": { - "version": "1.0.1" + "babel-runtime": { + "version": "5.8.38", + "dependencies": { + "core-js": { + "version": "1.2.6" + } + } } } } } - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.5.0" - }, - "babel-runtime": { - "version": "5.8.35", - "dependencies": { - "core-js": { - "version": "1.2.6" - } - } } } } @@ -4329,13 +4102,13 @@ "version": "3.5.2", "dependencies": { "autoprefixer": { - "version": "6.3.3", + "version": "6.3.4", "dependencies": { "browserslist": { - "version": "1.1.3" + "version": "1.3.0" }, "caniuse-db": { - "version": "1.0.30000414" + "version": "1.0.30000436" }, "normalize-range": { "version": "0.1.2" @@ -4346,12 +4119,7 @@ } }, "decamelize": { - "version": "1.1.2", - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5" - } - } + "version": "1.2.0" }, "defined": { "version": "1.0.0" @@ -4379,10 +4147,10 @@ } }, "postcss-colormin": { - "version": "2.1.8", + "version": "2.2.0", "dependencies": { "colormin": { - "version": "1.0.7", + "version": "1.1.0", "dependencies": { "color": { "version": "0.11.1", @@ -4481,7 +4249,7 @@ "version": "1.0.2" }, "postcss-selector-parser": { - "version": "1.3.2", + "version": "1.3.3", "dependencies": { "flatten": { "version": "1.0.2" @@ -4509,7 +4277,7 @@ "version": "1.0.3" }, "query-string": { - "version": "3.0.1", + "version": "3.0.3", "dependencies": { "strict-uri-encode": { "version": "1.1.0" @@ -4544,7 +4312,7 @@ "version": "1.1.1" }, "svgo": { - "version": "0.6.1", + "version": "0.6.3", "dependencies": { "coa": { "version": "1.0.1", @@ -4558,10 +4326,10 @@ "version": "1.1.2" }, "csso": { - "version": "1.4.4", + "version": "1.6.4", "dependencies": { "clap": { - "version": "1.0.10", + "version": "1.1.0", "dependencies": { "chalk": { "version": "1.1.1", @@ -4599,14 +4367,17 @@ } } } + }, + "source-map": { + "version": "0.5.3" } } }, "js-yaml": { - "version": "3.4.6", + "version": "3.5.5", "dependencies": { "argparse": { - "version": "1.0.6", + "version": "1.0.7", "dependencies": { "sprintf-js": { "version": "1.0.3" @@ -4615,9 +4386,6 @@ }, "esprima": { "version": "2.7.2" - }, - "inherit": { - "version": "2.2.3" } } }, @@ -4630,7 +4398,7 @@ } }, "sax": { - "version": "1.1.5" + "version": "1.1.6" }, "whet.extend": { "version": "0.9.9" @@ -4693,7 +4461,7 @@ "version": "4.0.1" }, "postcss": { - "version": "5.0.18", + "version": "5.0.19", "dependencies": { "js-base64": { "version": "2.1.9" @@ -4721,7 +4489,7 @@ "version": "1.0.0" }, "postcss-modules-values": { - "version": "1.1.1", + "version": "1.1.2", "dependencies": { "icss-replace-symbols": { "version": "1.0.2" @@ -4737,13 +4505,13 @@ "version": "3.5.16" }, "dc": { - "version": "2.0.0-beta.26" + "version": "2.0.0-beta.27" }, "diff": { - "version": "2.2.1" + "version": "2.2.2" }, "eslint": { - "version": "2.2.0", + "version": "2.4.0", "dependencies": { "chalk": { "version": "1.1.1", @@ -4887,7 +4655,7 @@ } }, "espree": { - "version": "3.1.1", + "version": "3.1.3", "dependencies": { "acorn": { "version": "3.0.4" @@ -4905,9 +4673,6 @@ "estraverse": { "version": "4.2.0" }, - "estraverse-fb": { - "version": "1.3.1" - }, "esutils": { "version": "2.0.2" }, @@ -5198,10 +4963,10 @@ } }, "js-yaml": { - "version": "3.5.4", + "version": "3.5.5", "dependencies": { "argparse": { - "version": "1.0.6", + "version": "1.0.7", "dependencies": { "sprintf-js": { "version": "1.0.3" @@ -5360,7 +5125,7 @@ } }, "eslint-plugin-react": { - "version": "4.1.0" + "version": "4.2.3" }, "extract-text-webpack-plugin": { "version": "1.0.1", @@ -5437,7 +5202,7 @@ "version": "1.0.1" }, "invariant": { - "version": "2.2.0", + "version": "2.2.1", "dependencies": { "loose-envify": { "version": "1.1.0", @@ -5468,13 +5233,13 @@ } }, "html-webpack-plugin": { - "version": "2.9.0", + "version": "2.14.0", "dependencies": { "bluebird": { - "version": "3.3.3" + "version": "3.3.4" }, "html-minifier": { - "version": "1.2.0", + "version": "1.3.1", "dependencies": { "change-case": { "version": "2.3.1", @@ -5551,7 +5316,7 @@ } }, "cli": { - "version": "0.11.1", + "version": "0.11.2", "dependencies": { "exit": { "version": "0.1.2" @@ -5565,13 +5330,13 @@ "version": "2.0.1" }, "readable-stream": { - "version": "2.0.5", + "version": "2.0.6", "dependencies": { "core-util-is": { "version": "1.0.2" }, "isarray": { - "version": "0.0.1" + "version": "1.0.0" }, "process-nextick-args": { "version": "1.0.6" @@ -5589,6 +5354,14 @@ } } }, + "ncname": { + "version": "1.0.0", + "dependencies": { + "xml-char-classes": { + "version": "1.0.0" + } + } + }, "relateurl": { "version": "0.2.6" }, @@ -5623,7 +5396,7 @@ "version": "3.0.2", "dependencies": { "is-buffer": { - "version": "1.1.2" + "version": "1.1.3" } } }, @@ -5650,7 +5423,7 @@ "version": "3.0.2", "dependencies": { "is-buffer": { - "version": "1.1.2" + "version": "1.1.3" } } }, @@ -5670,12 +5443,7 @@ } }, "decamelize": { - "version": "1.1.2", - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5" - } - } + "version": "1.2.0" }, "window-size": { "version": "0.1.0" @@ -5687,7 +5455,7 @@ } }, "lodash": { - "version": "3.10.1" + "version": "4.6.1" }, "pretty-error": { "version": "2.0.0", @@ -5786,10 +5554,10 @@ } }, "humanize-plus": { - "version": "1.5.0" + "version": "1.8.1" }, "icepick": { - "version": "1.1.0" + "version": "1.2.0" }, "inflection": { "version": "1.8.0" @@ -5928,7 +5696,7 @@ "version": "3.0.2", "dependencies": { "is-buffer": { - "version": "1.1.2" + "version": "1.1.3" } } }, @@ -5955,7 +5723,7 @@ "version": "3.0.2", "dependencies": { "is-buffer": { - "version": "1.1.2" + "version": "1.1.3" } } }, @@ -5975,12 +5743,7 @@ } }, "decamelize": { - "version": "1.1.2", - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5" - } - } + "version": "1.2.0" }, "window-size": { "version": "0.1.0" @@ -5992,10 +5755,10 @@ } }, "js-yaml": { - "version": "3.5.3", + "version": "3.5.5", "dependencies": { "argparse": { - "version": "1.0.6", + "version": "1.0.7", "dependencies": { "sprintf-js": { "version": "1.0.3" @@ -6064,7 +5827,7 @@ "version": "2.4.1" }, "karma": { - "version": "0.13.21", + "version": "0.13.22", "dependencies": { "batch": { "version": "0.5.3" @@ -6118,24 +5881,27 @@ "version": "6.1.0" }, "raw-body": { - "version": "2.1.5", + "version": "2.1.6", "dependencies": { + "bytes": { + "version": "2.3.0" + }, "unpipe": { "version": "1.0.0" } } }, "type-is": { - "version": "1.6.11", + "version": "1.6.12", "dependencies": { "media-typer": { "version": "0.3.0" }, "mime-types": { - "version": "2.1.9", + "version": "2.1.10", "dependencies": { "mime-db": { - "version": "1.21.0" + "version": "1.22.0" } } } @@ -6144,7 +5910,7 @@ } }, "chokidar": { - "version": "1.4.2", + "version": "1.4.3", "dependencies": { "anymatch": { "version": "1.3.0", @@ -6190,7 +5956,7 @@ "version": "1.1.5" }, "repeat-string": { - "version": "1.5.2" + "version": "1.5.4" } } } @@ -6220,7 +5986,7 @@ "version": "3.0.2", "dependencies": { "is-buffer": { - "version": "1.1.2" + "version": "1.1.3" } } }, @@ -6270,13 +6036,13 @@ } }, "async-each": { - "version": "0.1.6" + "version": "1.0.0" }, "fsevents": { - "version": "1.0.7", + "version": "1.0.8", "dependencies": { "ansi": { - "version": "0.3.0" + "version": "0.3.1" }, "ansi-regex": { "version": "2.0.0" @@ -6285,22 +6051,30 @@ "version": "2.1.0" }, "are-we-there-yet": { - "version": "1.0.5" + "version": "1.0.6" }, "asn1": { "version": "0.2.3" }, "assert-plus": { - "version": "0.1.5" + "version": "0.2.0" }, "async": { - "version": "1.5.1" + "version": "1.5.2" }, "aws-sign2": { "version": "0.6.0" }, + "aws4": { + "version": "1.2.1", + "dependencies": { + "lru-cache": { + "version": "2.7.3" + } + } + }, "bl": { - "version": "1.0.0" + "version": "1.0.2" }, "block-stream": { "version": "0.0.8" @@ -6327,19 +6101,19 @@ "version": "2.0.5" }, "dashdash": { - "version": "1.11.0" + "version": "1.12.2" }, "debug": { - "version": "0.7.4" + "version": "2.2.0" }, "deep-extend": { - "version": "0.4.0" + "version": "0.4.1" }, "delayed-stream": { "version": "1.0.0" }, "delegates": { - "version": "0.1.0" + "version": "1.0.0" }, "ecc-jsbn": { "version": "0.1.1" @@ -6384,7 +6158,7 @@ } }, "gauge": { - "version": "1.2.2" + "version": "1.2.5" }, "generate-function": { "version": "2.0.0" @@ -6393,28 +6167,28 @@ "version": "1.2.0" }, "graceful-fs": { - "version": "4.1.2" + "version": "4.1.3" }, "graceful-readlink": { "version": "1.0.1" }, "har-validator": { - "version": "2.0.3" + "version": "2.0.6" }, "has-ansi": { "version": "2.0.0" }, "has-unicode": { - "version": "1.0.1" + "version": "2.0.0" }, "hawk": { - "version": "3.1.2" + "version": "3.1.3" }, "hoek": { "version": "2.16.3" }, "http-signature": { - "version": "1.1.0" + "version": "1.1.1" }, "inherits": { "version": "2.0.1" @@ -6423,7 +6197,7 @@ "version": "1.3.4" }, "is-my-json-valid": { - "version": "2.12.3" + "version": "2.12.4" }, "is-property": { "version": "1.0.2" @@ -6461,8 +6235,11 @@ "lodash._createpadding": { "version": "3.6.1" }, + "lodash._root": { + "version": "3.0.0" + }, "lodash.pad": { - "version": "3.1.1" + "version": "3.3.0" }, "lodash.padleft": { "version": "3.1.1" @@ -6471,7 +6248,7 @@ "version": "3.1.1" }, "lodash.repeat": { - "version": "3.0.1" + "version": "3.2.0" }, "mime-db": { "version": "1.21.0" @@ -6485,11 +6262,14 @@ "mkdirp": { "version": "0.5.1" }, + "ms": { + "version": "0.7.1" + }, "nan": { "version": "2.2.0" }, "node-pre-gyp": { - "version": "0.6.19", + "version": "0.6.21", "dependencies": { "nopt": { "version": "3.0.6", @@ -6505,16 +6285,16 @@ "version": "1.4.7" }, "npmlog": { - "version": "2.0.0" + "version": "2.0.2" }, "oauth-sign": { - "version": "0.8.0" + "version": "0.8.1" }, "once": { - "version": "1.1.1" + "version": "1.3.3" }, "pinkie": { - "version": "2.0.1" + "version": "2.0.4" }, "pinkie-promise": { "version": "2.0.0" @@ -6523,7 +6303,7 @@ "version": "1.0.6" }, "qs": { - "version": "5.2.0" + "version": "6.0.2" }, "rc": { "version": "1.1.6", @@ -6537,13 +6317,13 @@ "version": "2.0.5" }, "request": { - "version": "2.67.0" + "version": "2.69.0" }, "rimraf": { - "version": "2.5.0", + "version": "2.5.1", "dependencies": { "glob": { - "version": "6.0.3", + "version": "6.0.4", "dependencies": { "inflight": { "version": "1.0.4", @@ -6594,12 +6374,7 @@ "version": "1.0.9" }, "sshpk": { - "version": "1.7.2", - "dependencies": { - "assert-plus": { - "version": "0.2.0" - } - } + "version": "1.7.3" }, "string_decoder": { "version": "0.10.31" @@ -6620,57 +6395,7 @@ "version": "2.2.1" }, "tar-pack": { - "version": "3.1.2", - "dependencies": { - "rimraf": { - "version": "2.4.5", - "dependencies": { - "glob": { - "version": "6.0.3", - "dependencies": { - "inflight": { - "version": "1.0.4", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "inherits": { - "version": "2.0.1" - }, - "minimatch": { - "version": "3.0.0", - "dependencies": { - "brace-expansion": { - "version": "1.1.2", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - }, - "once": { - "version": "1.3.3", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "path-is-absolute": { - "version": "1.0.0" - } - } - } - } - } - } + "version": "3.1.3" }, "tough-cookie": { "version": "2.2.1" @@ -6679,10 +6404,10 @@ "version": "0.4.2" }, "tweetnacl": { - "version": "0.13.2" + "version": "0.13.3" }, "uid-number": { - "version": "0.0.3" + "version": "0.0.6" }, "util-deprecate": { "version": "1.0.2" @@ -6690,6 +6415,9 @@ "verror": { "version": "1.3.6" }, + "wrappy": { + "version": "1.0.1" + }, "xtend": { "version": "4.0.1" } @@ -6740,13 +6468,13 @@ } }, "readable-stream": { - "version": "2.0.5", + "version": "2.0.6", "dependencies": { "core-util-is": { "version": "1.0.2" }, "isarray": { - "version": "0.0.1" + "version": "1.0.0" }, "process-nextick-args": { "version": "1.0.6" @@ -6805,7 +6533,7 @@ } }, "core-js": { - "version": "2.1.0" + "version": "2.2.1" }, "di": { "version": "0.0.1" @@ -6855,7 +6583,7 @@ } }, "glob": { - "version": "7.0.0", + "version": "7.0.3", "dependencies": { "inflight": { "version": "1.0.4", @@ -6885,10 +6613,10 @@ "version": "4.1.3" }, "http-proxy": { - "version": "1.13.1", + "version": "1.13.2", "dependencies": { "eventemitter3": { - "version": "1.1.1" + "version": "1.2.0" }, "requires-port": { "version": "1.0.0" @@ -6902,7 +6630,7 @@ "version": "3.10.1" }, "log4js": { - "version": "0.6.31", + "version": "0.6.33", "dependencies": { "readable-stream": { "version": "1.0.33", @@ -7220,7 +6948,7 @@ } }, "karma-chrome-launcher": { - "version": "0.2.2", + "version": "0.2.3", "dependencies": { "fs-access": { "version": "1.0.0", @@ -7249,7 +6977,7 @@ } }, "karma-coverage": { - "version": "0.5.3", + "version": "0.5.5", "dependencies": { "dateformat": { "version": "1.0.12", @@ -7261,20 +6989,15 @@ "version": "3.7.0", "dependencies": { "camelcase-keys": { - "version": "2.0.0", + "version": "2.1.0", "dependencies": { "camelcase": { - "version": "2.1.0" + "version": "2.1.1" } } }, "decamelize": { - "version": "1.1.2", - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5" - } - } + "version": "1.2.0" }, "loud-rejection": { "version": "1.3.0", @@ -7343,7 +7066,7 @@ "version": "1.0.1", "dependencies": { "find-up": { - "version": "1.1.0", + "version": "1.1.2", "dependencies": { "path-exists": { "version": "2.1.0" @@ -7588,7 +7311,7 @@ "version": "3.0.2", "dependencies": { "is-buffer": { - "version": "1.1.2" + "version": "1.1.3" } } }, @@ -7615,7 +7338,7 @@ "version": "3.0.2", "dependencies": { "is-buffer": { - "version": "1.1.2" + "version": "1.1.3" } } }, @@ -7635,12 +7358,7 @@ } }, "decamelize": { - "version": "1.1.2", - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5" - } - } + "version": "1.2.0" }, "window-size": { "version": "0.1.0" @@ -7652,10 +7370,10 @@ } }, "js-yaml": { - "version": "3.5.3", + "version": "3.5.5", "dependencies": { "argparse": { - "version": "1.0.6", + "version": "1.0.7", "dependencies": { "sprintf-js": { "version": "1.0.3" @@ -7737,10 +7455,10 @@ } }, "karma-jasmine": { - "version": "0.3.7" + "version": "0.3.8" }, "karma-nyan-reporter": { - "version": "0.2.3", + "version": "0.2.4", "dependencies": { "cli-color": { "version": "0.3.3", @@ -7813,32 +7531,9 @@ } } }, - "webpack": { - "version": "1.12.14", + "webpack-dev-middleware": { + "version": "1.5.1", "dependencies": { - "async": { - "version": "1.5.2" - }, - "clone": { - "version": "1.0.2" - }, - "enhanced-resolve": { - "version": "0.9.1", - "dependencies": { - "graceful-fs": { - "version": "4.1.3" - }, - "memory-fs": { - "version": "0.2.0" - } - } - }, - "esprima": { - "version": "2.7.2" - }, - "interpret": { - "version": "0.6.6" - }, "memory-fs": { "version": "0.3.0", "dependencies": { @@ -7851,7 +7546,7 @@ } }, "readable-stream": { - "version": "2.0.5", + "version": "2.0.6", "dependencies": { "core-util-is": { "version": "1.0.2" @@ -7860,7 +7555,7 @@ "version": "2.0.1" }, "isarray": { - "version": "0.0.1" + "version": "1.0.0" }, "process-nextick-args": { "version": "1.0.6" @@ -7875,2272 +7570,560 @@ } } }, - "mkdirp": { - "version": "0.5.1", - "dependencies": { - "minimist": { - "version": "0.0.8" - } - } + "mime": { + "version": "1.3.4" + } + } + } + } + }, + "loader-utils": { + "version": "0.2.12", + "dependencies": { + "big.js": { + "version": "3.1.3" + }, + "json5": { + "version": "0.4.0" + } + } + }, + "moment": { + "version": "2.12.0" + }, + "node-libs-browser": { + "version": "0.5.3", + "dependencies": { + "assert": { + "version": "1.3.0" + }, + "browserify-zlib": { + "version": "0.1.4", + "dependencies": { + "pako": { + "version": "0.2.8" + } + } + }, + "buffer": { + "version": "3.6.0", + "dependencies": { + "base64-js": { + "version": "0.0.8" }, - "optimist": { - "version": "0.6.1", - "dependencies": { - "minimist": { - "version": "0.0.10" - }, - "wordwrap": { - "version": "0.0.3" - } - } + "ieee754": { + "version": "1.1.6" }, - "supports-color": { - "version": "3.1.2", - "dependencies": { - "has-flag": { - "version": "1.0.0" - } - } + "isarray": { + "version": "1.0.0" + } + } + }, + "console-browserify": { + "version": "1.1.0", + "dependencies": { + "date-now": { + "version": "0.1.4" + } + } + }, + "constants-browserify": { + "version": "0.0.1" + }, + "crypto-browserify": { + "version": "3.2.8", + "dependencies": { + "pbkdf2-compat": { + "version": "2.0.1" }, - "tapable": { - "version": "0.1.10" + "ripemd160": { + "version": "0.2.0" }, - "uglify-js": { - "version": "2.6.2", - "dependencies": { - "async": { - "version": "0.2.10" - }, - "source-map": { - "version": "0.5.3" - }, - "uglify-to-browserify": { - "version": "1.0.2" + "sha.js": { + "version": "2.2.6" + } + } + }, + "domain-browser": { + "version": "1.1.7" + }, + "events": { + "version": "1.1.0" + }, + "http-browserify": { + "version": "1.7.0", + "dependencies": { + "Base64": { + "version": "0.2.1" + }, + "inherits": { + "version": "2.0.1" + } + } + }, + "https-browserify": { + "version": "0.0.0" + }, + "os-browserify": { + "version": "0.1.2" + }, + "path-browserify": { + "version": "0.0.0" + }, + "process": { + "version": "0.11.2" + }, + "punycode": { + "version": "1.4.1" + }, + "querystring-es3": { + "version": "0.2.1" + }, + "readable-stream": { + "version": "1.1.13", + "dependencies": { + "core-util-is": { + "version": "1.0.2" + }, + "inherits": { + "version": "2.0.1" + }, + "isarray": { + "version": "0.0.1" + } + } + }, + "stream-browserify": { + "version": "1.0.0", + "dependencies": { + "inherits": { + "version": "2.0.1" + } + } + }, + "string_decoder": { + "version": "0.10.31" + }, + "timers-browserify": { + "version": "1.4.2" + }, + "tty-browserify": { + "version": "0.0.0" + }, + "url": { + "version": "0.10.3", + "dependencies": { + "punycode": { + "version": "1.3.2" + }, + "querystring": { + "version": "0.2.0" + } + } + }, + "util": { + "version": "0.10.3", + "dependencies": { + "inherits": { + "version": "2.0.1" + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "dependencies": { + "indexof": { + "version": "0.0.1" + } + } + } + } + }, + "normalizr": { + "version": "2.0.0", + "dependencies": { + "lodash": { + "version": "4.6.1" + } + } + }, + "password-generator": { + "version": "2.0.2", + "dependencies": { + "optimist": { + "version": "0.6.1", + "dependencies": { + "minimist": { + "version": "0.0.10" + }, + "wordwrap": { + "version": "0.0.3" + } + } + } + } + }, + "postcss-cssnext": { + "version": "2.5.1", + "dependencies": { + "autoprefixer": { + "version": "6.3.4", + "dependencies": { + "browserslist": { + "version": "1.3.0" + }, + "caniuse-db": { + "version": "1.0.30000436" + }, + "normalize-range": { + "version": "0.1.2" + }, + "num2fraction": { + "version": "1.2.2" + }, + "postcss-value-parser": { + "version": "3.3.0" + } + } + }, + "caniuse-api": { + "version": "1.4.1", + "dependencies": { + "browserslist": { + "version": "1.3.0" + }, + "caniuse-db": { + "version": "1.0.30000436" + }, + "lodash.memoize": { + "version": "2.4.1", + "dependencies": { + "lodash._keyprefix": { + "version": "2.4.2" }, - "yargs": { - "version": "3.10.0", + "lodash.isfunction": { + "version": "2.4.1" + } + } + }, + "lodash.uniq": { + "version": "3.2.2", + "dependencies": { + "lodash._basecallback": { + "version": "3.3.1", "dependencies": { - "camelcase": { - "version": "1.2.1" - }, - "cliui": { - "version": "2.1.0", + "lodash._baseisequal": { + "version": "3.0.7", "dependencies": { - "center-align": { - "version": "0.1.3", - "dependencies": { - "align-text": { - "version": "0.1.4", - "dependencies": { - "kind-of": { - "version": "3.0.2", - "dependencies": { - "is-buffer": { - "version": "1.1.2" - } - } - }, - "longest": { - "version": "1.0.1" - }, - "repeat-string": { - "version": "1.5.4" - } - } - }, - "lazy-cache": { - "version": "1.0.3" - } - } + "lodash.istypedarray": { + "version": "3.0.5" }, - "right-align": { - "version": "0.1.3", + "lodash.keys": { + "version": "3.1.2", "dependencies": { - "align-text": { - "version": "0.1.4", - "dependencies": { - "kind-of": { - "version": "3.0.2", - "dependencies": { - "is-buffer": { - "version": "1.1.2" - } - } - }, - "longest": { - "version": "1.0.1" - }, - "repeat-string": { - "version": "1.5.4" - } - } + "lodash.isarguments": { + "version": "3.0.8" } } - }, - "wordwrap": { - "version": "0.0.2" } } }, - "decamelize": { - "version": "1.1.2", + "lodash._bindcallback": { + "version": "3.0.1" + }, + "lodash.pairs": { + "version": "3.0.1", "dependencies": { - "escape-string-regexp": { - "version": "1.0.5" + "lodash.keys": { + "version": "3.1.2", + "dependencies": { + "lodash.isarguments": { + "version": "3.0.8" + } + } } } - }, - "window-size": { - "version": "0.1.0" } } - } - } - }, - "watchpack": { - "version": "0.2.9", - "dependencies": { - "async": { - "version": "0.9.2" }, - "chokidar": { - "version": "1.4.3", - "dependencies": { - "anymatch": { - "version": "1.3.0", - "dependencies": { - "arrify": { - "version": "1.0.1" - }, - "micromatch": { - "version": "2.3.7", - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "dependencies": { - "arr-flatten": { - "version": "1.0.1" - } - } - }, - "array-unique": { - "version": "0.2.1" - }, - "braces": { - "version": "1.8.3", - "dependencies": { - "expand-range": { - "version": "1.8.1", - "dependencies": { - "fill-range": { - "version": "2.2.3", - "dependencies": { - "is-number": { - "version": "2.1.0" - }, - "isobject": { - "version": "2.0.0", - "dependencies": { - "isarray": { - "version": "0.0.1" - } - } - }, - "randomatic": { - "version": "1.1.5" - }, - "repeat-string": { - "version": "1.5.4" - } - } - } - } - }, - "preserve": { - "version": "0.2.0" - }, - "repeat-element": { - "version": "1.1.2" - } - } - }, - "expand-brackets": { - "version": "0.1.4" - }, - "extglob": { - "version": "0.3.2" - }, - "filename-regex": { - "version": "2.0.0" - }, - "is-extglob": { - "version": "1.0.0" - }, - "kind-of": { - "version": "3.0.2", - "dependencies": { - "is-buffer": { - "version": "1.1.2" - } - } - }, - "normalize-path": { - "version": "2.0.1" - }, - "object.omit": { - "version": "2.0.0", - "dependencies": { - "for-own": { - "version": "0.1.3", - "dependencies": { - "for-in": { - "version": "0.1.4" - } - } - }, - "is-extendable": { - "version": "0.1.1" - } - } - }, - "parse-glob": { - "version": "3.0.4", - "dependencies": { - "glob-base": { - "version": "0.3.0" - }, - "is-dotfile": { - "version": "1.0.2" - } - } - }, - "regex-cache": { - "version": "0.4.2", - "dependencies": { - "is-equal-shallow": { - "version": "0.1.3" - }, - "is-primitive": { - "version": "2.0.0" - } - } - } - } - } - } - }, - "async-each": { - "version": "1.0.0" - }, - "fsevents": { - "version": "1.0.8", - "dependencies": { - "ansi": { - "version": "0.3.1" - }, - "ansi-regex": { - "version": "2.0.0" - }, - "ansi-styles": { - "version": "2.1.0" - }, - "are-we-there-yet": { - "version": "1.0.6" - }, - "asn1": { - "version": "0.2.3" - }, - "assert-plus": { - "version": "0.2.0" - }, - "async": { - "version": "1.5.2" - }, - "aws-sign2": { - "version": "0.6.0" - }, - "aws4": { - "version": "1.2.1", - "dependencies": { - "lru-cache": { - "version": "2.7.3" - } - } - }, - "bl": { - "version": "1.0.2" - }, - "block-stream": { - "version": "0.0.8" - }, - "boom": { - "version": "2.10.1" - }, - "caseless": { - "version": "0.11.0" - }, - "chalk": { - "version": "1.1.1" - }, - "combined-stream": { - "version": "1.0.5" - }, - "commander": { - "version": "2.9.0" - }, - "core-util-is": { - "version": "1.0.2" - }, - "cryptiles": { - "version": "2.0.5" - }, - "dashdash": { - "version": "1.12.2" - }, - "debug": { - "version": "2.2.0" - }, - "deep-extend": { - "version": "0.4.1" - }, - "delayed-stream": { - "version": "1.0.0" - }, - "delegates": { - "version": "1.0.0" - }, - "ecc-jsbn": { - "version": "0.1.1" - }, - "escape-string-regexp": { - "version": "1.0.4" - }, - "extend": { - "version": "3.0.0" - }, - "extsprintf": { - "version": "1.0.2" - }, - "forever-agent": { - "version": "0.6.1" - }, - "form-data": { - "version": "1.0.0-rc3" - }, - "fstream": { - "version": "1.0.8" - }, - "fstream-ignore": { - "version": "1.0.3", - "dependencies": { - "minimatch": { - "version": "3.0.0", - "dependencies": { - "brace-expansion": { - "version": "1.1.2", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - } - } - }, - "gauge": { - "version": "1.2.5" - }, - "generate-function": { - "version": "2.0.0" - }, - "generate-object-property": { - "version": "1.2.0" - }, - "graceful-fs": { - "version": "4.1.3" - }, - "graceful-readlink": { - "version": "1.0.1" - }, - "har-validator": { - "version": "2.0.6" - }, - "has-ansi": { - "version": "2.0.0" - }, - "has-unicode": { - "version": "2.0.0" - }, - "hawk": { - "version": "3.1.3" - }, - "hoek": { - "version": "2.16.3" - }, - "http-signature": { - "version": "1.1.1" - }, - "inherits": { - "version": "2.0.1" - }, - "ini": { - "version": "1.3.4" - }, - "is-my-json-valid": { - "version": "2.12.4" - }, - "is-property": { - "version": "1.0.2" - }, - "is-typedarray": { - "version": "1.0.0" - }, - "isarray": { - "version": "0.0.1" - }, - "isstream": { - "version": "0.1.2" - }, - "jodid25519": { - "version": "1.0.2" - }, - "jsbn": { - "version": "0.1.0" - }, - "json-schema": { - "version": "0.2.2" - }, - "json-stringify-safe": { - "version": "5.0.1" - }, - "jsonpointer": { - "version": "2.0.0" - }, - "jsprim": { - "version": "1.2.2" - }, - "lodash._basetostring": { - "version": "3.0.1" - }, - "lodash._createpadding": { - "version": "3.6.1" - }, - "lodash._root": { - "version": "3.0.0" - }, - "lodash.pad": { - "version": "3.3.0" - }, - "lodash.padleft": { - "version": "3.1.1" - }, - "lodash.padright": { - "version": "3.1.1" - }, - "lodash.repeat": { - "version": "3.2.0" - }, - "mime-db": { - "version": "1.21.0" - }, - "mime-types": { - "version": "2.1.9" - }, - "minimist": { - "version": "0.0.8" - }, - "mkdirp": { - "version": "0.5.1" - }, - "ms": { - "version": "0.7.1" - }, - "nan": { - "version": "2.2.0" - }, - "node-pre-gyp": { - "version": "0.6.21", - "dependencies": { - "nopt": { - "version": "3.0.6", - "dependencies": { - "abbrev": { - "version": "1.0.7" - } - } - } - } - }, - "node-uuid": { - "version": "1.4.7" - }, - "npmlog": { - "version": "2.0.2" - }, - "oauth-sign": { - "version": "0.8.1" - }, - "once": { - "version": "1.3.3" - }, - "pinkie": { - "version": "2.0.4" - }, - "pinkie-promise": { - "version": "2.0.0" - }, - "process-nextick-args": { - "version": "1.0.6" - }, - "qs": { - "version": "6.0.2" - }, - "rc": { - "version": "1.1.6", - "dependencies": { - "minimist": { - "version": "1.2.0" - } - } - }, - "readable-stream": { - "version": "2.0.5" - }, - "request": { - "version": "2.69.0" - }, - "rimraf": { - "version": "2.5.1", - "dependencies": { - "glob": { - "version": "6.0.4", - "dependencies": { - "inflight": { - "version": "1.0.4", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "inherits": { - "version": "2.0.1" - }, - "minimatch": { - "version": "3.0.0", - "dependencies": { - "brace-expansion": { - "version": "1.1.2", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - }, - "once": { - "version": "1.3.3", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "path-is-absolute": { - "version": "1.0.0" - } - } - } - } - }, - "semver": { - "version": "5.1.0" - }, - "sntp": { - "version": "1.0.9" - }, - "sshpk": { - "version": "1.7.3" - }, - "string_decoder": { - "version": "0.10.31" - }, - "stringstream": { - "version": "0.0.5" - }, - "strip-ansi": { - "version": "3.0.0" - }, - "strip-json-comments": { - "version": "1.0.4" - }, - "supports-color": { - "version": "2.0.0" - }, - "tar": { - "version": "2.2.1" - }, - "tar-pack": { - "version": "3.1.3" - }, - "tough-cookie": { - "version": "2.2.1" - }, - "tunnel-agent": { - "version": "0.4.2" - }, - "tweetnacl": { - "version": "0.13.3" - }, - "uid-number": { - "version": "0.0.6" - }, - "util-deprecate": { - "version": "1.0.2" - }, - "verror": { - "version": "1.3.6" - }, - "wrappy": { - "version": "1.0.1" - }, - "xtend": { - "version": "4.0.1" - } - } - }, - "glob-parent": { - "version": "2.0.0" - }, - "inherits": { - "version": "2.0.1" - }, - "is-binary-path": { - "version": "1.0.1", - "dependencies": { - "binary-extensions": { - "version": "1.4.0" - } - } - }, - "is-glob": { - "version": "2.0.1", - "dependencies": { - "is-extglob": { - "version": "1.0.0" - } - } - }, - "path-is-absolute": { - "version": "1.0.0" - }, - "readdirp": { - "version": "2.0.0", - "dependencies": { - "minimatch": { - "version": "2.0.10", - "dependencies": { - "brace-expansion": { - "version": "1.1.3", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - }, - "readable-stream": { - "version": "2.0.5", - "dependencies": { - "core-util-is": { - "version": "1.0.2" - }, - "isarray": { - "version": "0.0.1" - }, - "process-nextick-args": { - "version": "1.0.6" - }, - "string_decoder": { - "version": "0.10.31" - }, - "util-deprecate": { - "version": "1.0.2" - } - } - } - } - } - } - }, - "graceful-fs": { - "version": "4.1.3" - } - } - }, - "webpack-core": { - "version": "0.6.8", - "dependencies": { - "source-list-map": { - "version": "0.1.5" - }, - "source-map": { - "version": "0.4.4", - "dependencies": { - "amdefine": { - "version": "1.0.0" - } - } - } - } - } - } - }, - "webpack-dev-middleware": { - "version": "1.5.1", - "dependencies": { - "memory-fs": { - "version": "0.3.0", - "dependencies": { - "errno": { - "version": "0.1.4", - "dependencies": { - "prr": { - "version": "0.0.0" - } - } - }, - "readable-stream": { - "version": "2.0.5", - "dependencies": { - "core-util-is": { - "version": "1.0.2" - }, - "inherits": { - "version": "2.0.1" - }, - "isarray": { - "version": "0.0.1" - }, - "process-nextick-args": { - "version": "1.0.6" - }, - "string_decoder": { - "version": "0.10.31" - }, - "util-deprecate": { - "version": "1.0.2" - } - } - } - } - }, - "mime": { - "version": "1.3.4" - } - } - } - } - }, - "loader-utils": { - "version": "0.2.12", - "dependencies": { - "big.js": { - "version": "3.1.3" - }, - "json5": { - "version": "0.4.0" - } - } - }, - "moment": { - "version": "2.12.0" - }, - "node-libs-browser": { - "version": "0.5.3", - "dependencies": { - "assert": { - "version": "1.3.0" - }, - "browserify-zlib": { - "version": "0.1.4", - "dependencies": { - "pako": { - "version": "0.2.8" - } - } - }, - "buffer": { - "version": "3.6.0", - "dependencies": { - "base64-js": { - "version": "0.0.8" - }, - "ieee754": { - "version": "1.1.6" - }, - "isarray": { - "version": "1.0.0" - } - } - }, - "console-browserify": { - "version": "1.1.0", - "dependencies": { - "date-now": { - "version": "0.1.4" - } - } - }, - "constants-browserify": { - "version": "0.0.1" - }, - "crypto-browserify": { - "version": "3.2.8", - "dependencies": { - "pbkdf2-compat": { - "version": "2.0.1" - }, - "ripemd160": { - "version": "0.2.0" - }, - "sha.js": { - "version": "2.2.6" - } - } - }, - "domain-browser": { - "version": "1.1.7" - }, - "events": { - "version": "1.1.0" - }, - "http-browserify": { - "version": "1.7.0", - "dependencies": { - "Base64": { - "version": "0.2.1" - }, - "inherits": { - "version": "2.0.1" - } - } - }, - "https-browserify": { - "version": "0.0.0" - }, - "os-browserify": { - "version": "0.1.2" - }, - "path-browserify": { - "version": "0.0.0" - }, - "process": { - "version": "0.11.2" - }, - "punycode": { - "version": "1.4.0" - }, - "querystring-es3": { - "version": "0.2.1" - }, - "readable-stream": { - "version": "1.1.13", - "dependencies": { - "core-util-is": { - "version": "1.0.2" - }, - "inherits": { - "version": "2.0.1" - }, - "isarray": { - "version": "0.0.1" - } - } - }, - "stream-browserify": { - "version": "1.0.0", - "dependencies": { - "inherits": { - "version": "2.0.1" - } - } - }, - "string_decoder": { - "version": "0.10.31" - }, - "timers-browserify": { - "version": "1.4.2" - }, - "tty-browserify": { - "version": "0.0.0" - }, - "url": { - "version": "0.10.3", - "dependencies": { - "punycode": { - "version": "1.3.2" - }, - "querystring": { - "version": "0.2.0" - } - } - }, - "util": { - "version": "0.10.3", - "dependencies": { - "inherits": { - "version": "2.0.1" - } - } - }, - "vm-browserify": { - "version": "0.0.4", - "dependencies": { - "indexof": { - "version": "0.0.1" - } - } - } - } - }, - "normalizr": { - "version": "2.0.0", - "dependencies": { - "lodash": { - "version": "4.5.1" - } - } - }, - "password-generator": { - "version": "2.0.2", - "dependencies": { - "optimist": { - "version": "0.6.1", - "dependencies": { - "minimist": { - "version": "0.0.10" - }, - "wordwrap": { - "version": "0.0.3" - } - } - } - } - }, - "postcss-cssnext": { - "version": "2.4.0", - "dependencies": { - "autoprefixer": { - "version": "6.3.3", - "dependencies": { - "browserslist": { - "version": "1.1.3" - }, - "caniuse-db": { - "version": "1.0.30000414" - }, - "normalize-range": { - "version": "0.1.2" - }, - "num2fraction": { - "version": "1.2.2" - }, - "postcss-value-parser": { - "version": "3.3.0" - } - } - }, - "caniuse-api": { - "version": "1.4.1", - "dependencies": { - "browserslist": { - "version": "1.1.3" - }, - "caniuse-db": { - "version": "1.0.30000414" - }, - "lodash.memoize": { - "version": "2.4.1", - "dependencies": { - "lodash._keyprefix": { - "version": "2.4.2" - }, - "lodash.isfunction": { - "version": "2.4.1" - } - } - }, - "lodash.uniq": { - "version": "3.2.2", - "dependencies": { - "lodash._basecallback": { - "version": "3.3.1", - "dependencies": { - "lodash._baseisequal": { - "version": "3.0.7", - "dependencies": { - "lodash.istypedarray": { - "version": "3.0.5" - }, - "lodash.keys": { - "version": "3.1.2", - "dependencies": { - "lodash.isarguments": { - "version": "3.0.7" - } - } - } - } - }, - "lodash._bindcallback": { - "version": "3.0.1" - }, - "lodash.pairs": { - "version": "3.0.1", - "dependencies": { - "lodash.keys": { - "version": "3.1.2", - "dependencies": { - "lodash.isarguments": { - "version": "3.0.7" - } - } - } - } - } - } - }, - "lodash._baseuniq": { - "version": "3.0.3", - "dependencies": { - "lodash._baseindexof": { - "version": "3.1.0" - }, - "lodash._cacheindexof": { - "version": "3.0.2" - }, - "lodash._createcache": { - "version": "3.1.2" - } - } - }, - "lodash._getnative": { - "version": "3.9.1" - }, - "lodash._isiterateecall": { - "version": "3.0.9" - }, - "lodash.isarray": { - "version": "3.0.4" - } - } - }, - "shelljs": { - "version": "0.5.3" - } - } - }, - "pixrem": { - "version": "3.0.0", - "dependencies": { - "browserslist": { - "version": "1.1.3", - "dependencies": { - "caniuse-db": { - "version": "1.0.30000414" - } - } - }, - "reduce-css-calc": { - "version": "1.2.1", - "dependencies": { - "balanced-match": { - "version": "0.1.0" - }, - "reduce-function-call": { - "version": "1.0.1" - } - } - } - } - }, - "pleeease-filters": { - "version": "2.0.0", - "dependencies": { - "onecolor": { - "version": "2.4.2" - } - } - }, - "postcss": { - "version": "5.0.18", - "dependencies": { - "js-base64": { - "version": "2.1.9" - }, - "source-map": { - "version": "0.5.3" - }, - "supports-color": { - "version": "3.1.2", - "dependencies": { - "has-flag": { - "version": "1.0.0" - } - } - } - } - }, - "postcss-calc": { - "version": "5.2.0", - "dependencies": { - "postcss-message-helpers": { - "version": "2.0.0" - }, - "reduce-css-calc": { - "version": "1.2.1", - "dependencies": { - "balanced-match": { - "version": "0.1.0" - }, - "reduce-function-call": { - "version": "1.0.1" - } - } - } - } - }, - "postcss-color-function": { - "version": "2.0.0", - "dependencies": { - "balanced-match": { - "version": "0.1.0" - }, - "css-color-function": { - "version": "1.3.0", - "dependencies": { - "color": { - "version": "0.11.1", - "dependencies": { - "color-convert": { - "version": "0.5.3" - }, - "color-string": { - "version": "0.3.0", - "dependencies": { - "color-name": { - "version": "1.1.1" - } - } - } - } - }, - "debug": { - "version": "0.7.4" - }, - "rgb": { - "version": "0.1.0" - } - } - }, - "postcss-message-helpers": { - "version": "2.0.0" - } - } - }, - "postcss-color-gray": { - "version": "3.0.0", - "dependencies": { - "color": { - "version": "0.7.3", - "dependencies": { - "color-convert": { - "version": "0.5.3" - }, - "color-string": { - "version": "0.2.4", - "dependencies": { - "color-name": { - "version": "1.0.1" - } - } - } - } - }, - "postcss-message-helpers": { - "version": "2.0.0" - }, - "reduce-function-call": { - "version": "1.0.1", - "dependencies": { - "balanced-match": { - "version": "0.1.0" - } - } - } - } - }, - "postcss-color-hex-alpha": { - "version": "2.0.0", - "dependencies": { - "color": { - "version": "0.10.1", - "dependencies": { - "color-convert": { - "version": "0.5.3" - }, - "color-string": { - "version": "0.3.0", - "dependencies": { - "color-name": { - "version": "1.1.1" - } - } - } - } - }, - "postcss-message-helpers": { - "version": "2.0.0" - } - } - }, - "postcss-color-hwb": { - "version": "2.0.0", - "dependencies": { - "color": { - "version": "0.10.1", - "dependencies": { - "color-convert": { - "version": "0.5.3" - }, - "color-string": { - "version": "0.3.0", - "dependencies": { - "color-name": { - "version": "1.1.1" - } - } - } - } - }, - "postcss-message-helpers": { - "version": "2.0.0" - }, - "reduce-function-call": { - "version": "1.0.1", - "dependencies": { - "balanced-match": { - "version": "0.1.0" - } - } - } - } - }, - "postcss-color-rebeccapurple": { - "version": "2.0.0", - "dependencies": { - "color": { - "version": "0.9.0", - "dependencies": { - "color-convert": { - "version": "0.5.3" - }, - "color-string": { - "version": "0.3.0", - "dependencies": { - "color-name": { - "version": "1.1.1" - } - } - } - } - } - } - }, - "postcss-color-rgba-fallback": { - "version": "2.2.0", - "dependencies": { - "postcss-value-parser": { - "version": "3.3.0" - }, - "rgb-hex": { - "version": "1.0.0" - } - } - }, - "postcss-custom-selectors": { - "version": "3.0.0", - "dependencies": { - "balanced-match": { - "version": "0.2.1" - } - } - }, - "postcss-font-variant": { - "version": "2.0.0" - }, - "postcss-initial": { - "version": "1.4.1", - "dependencies": { - "lodash.template": { - "version": "4.2.1", - "dependencies": { - "lodash._reinterpolate": { - "version": "3.0.0" - }, - "lodash.assigninwith": { - "version": "4.0.4", - "dependencies": { - "lodash.keysin": { - "version": "4.1.2" - } - } - }, - "lodash.keys": { - "version": "4.0.4" - }, - "lodash.rest": { - "version": "4.0.1" - }, - "lodash.templatesettings": { - "version": "4.0.0", - "dependencies": { - "lodash.escape": { - "version": "4.0.0" - } - } - }, - "lodash.tostring": { - "version": "4.1.1" - } - } - } - } - }, - "postcss-media-minmax": { - "version": "2.1.1" - }, - "postcss-nesting": { - "version": "2.3.0" - }, - "postcss-pseudo-class-any-link": { - "version": "1.0.0", - "dependencies": { - "postcss-selector-parser": { - "version": "1.3.2", - "dependencies": { - "flatten": { - "version": "1.0.2" - }, - "indexes-of": { - "version": "1.0.1" - }, - "uniq": { - "version": "1.0.1" - } - } - } - } - }, - "postcss-pseudoelements": { - "version": "3.0.0" - }, - "postcss-selector-matches": { - "version": "2.0.1", - "dependencies": { - "balanced-match": { - "version": "0.2.1" - } - } - }, - "postcss-selector-not": { - "version": "2.0.0", - "dependencies": { - "balanced-match": { - "version": "0.2.1" - } - } - } - } - }, - "postcss-custom-media": { - "version": "5.0.1", - "dependencies": { - "postcss": { - "version": "5.0.18", - "dependencies": { - "js-base64": { - "version": "2.1.9" - }, - "source-map": { - "version": "0.5.3" - }, - "supports-color": { - "version": "3.1.2", - "dependencies": { - "has-flag": { - "version": "1.0.0" - } - } - } - } - } - } - }, - "postcss-custom-properties": { - "version": "5.0.0", - "dependencies": { - "balanced-match": { - "version": "0.1.0" - }, - "postcss": { - "version": "5.0.18", - "dependencies": { - "js-base64": { - "version": "2.1.9" - }, - "source-map": { - "version": "0.5.3" - }, - "supports-color": { - "version": "3.1.2", - "dependencies": { - "has-flag": { - "version": "1.0.0" - } - } - } - } - } - } - }, - "postcss-import": { - "version": "8.0.2", - "dependencies": { - "object-assign": { - "version": "4.0.1" - }, - "postcss": { - "version": "5.0.18", - "dependencies": { - "js-base64": { - "version": "2.1.9" - }, - "source-map": { - "version": "0.5.3" - }, - "supports-color": { - "version": "3.1.2", - "dependencies": { - "has-flag": { - "version": "1.0.0" - } - } - } - } - }, - "postcss-value-parser": { - "version": "3.3.0" - }, - "read-cache": { - "version": "1.0.0", - "dependencies": { - "pify": { - "version": "2.3.0" - } - } - }, - "resolve": { - "version": "1.1.7" - } - } - }, - "postcss-loader": { - "version": "0.8.1", - "dependencies": { - "postcss": { - "version": "5.0.18", - "dependencies": { - "js-base64": { - "version": "2.1.9" - }, - "source-map": { - "version": "0.5.3" - }, - "supports-color": { - "version": "3.1.2", - "dependencies": { - "has-flag": { - "version": "1.0.0" - } - } - } - } - } - } - }, - "postcss-url": { - "version": "5.1.1", - "dependencies": { - "directory-encoder": { - "version": "0.7.2", - "dependencies": { - "fs-extra": { - "version": "0.23.1", - "dependencies": { - "graceful-fs": { - "version": "4.1.3" - }, - "jsonfile": { - "version": "2.2.3" - }, - "rimraf": { - "version": "2.5.2", - "dependencies": { - "glob": { - "version": "7.0.0", - "dependencies": { - "inflight": { - "version": "1.0.4", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "inherits": { - "version": "2.0.1" - }, - "once": { - "version": "1.3.3", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - } - } - } - } - } - } - }, - "handlebars": { - "version": "1.3.0", - "dependencies": { - "optimist": { - "version": "0.3.7", - "dependencies": { - "wordwrap": { - "version": "0.0.3" - } - } - }, - "uglify-js": { - "version": "2.3.6", - "dependencies": { - "async": { - "version": "0.2.10" - }, - "source-map": { - "version": "0.1.43", - "dependencies": { - "amdefine": { - "version": "1.0.0" - } - } - } - } - } - } - }, - "img-stats": { - "version": "0.5.2", - "dependencies": { - "xmldom": { - "version": "0.1.22" - } - } - } - } - }, - "js-base64": { - "version": "2.1.9" - }, - "mime": { - "version": "1.3.4" - }, - "minimatch": { - "version": "3.0.0", - "dependencies": { - "brace-expansion": { - "version": "1.1.3", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "dependencies": { - "minimist": { - "version": "0.0.8" - } - } - }, - "path-is-absolute": { - "version": "1.0.0" - }, - "postcss": { - "version": "5.0.18", - "dependencies": { - "source-map": { - "version": "0.5.3" - }, - "supports-color": { - "version": "3.1.2", - "dependencies": { - "has-flag": { - "version": "1.0.0" - } - } - } - } - } - } - }, - "protractor": { - "version": "2.5.1", - "dependencies": { - "accessibility-developer-tools": { - "version": "2.6.0" - }, - "adm-zip": { - "version": "0.4.4" - }, - "glob": { - "version": "3.2.11", - "dependencies": { - "inherits": { - "version": "2.0.1" - }, - "minimatch": { - "version": "0.3.0", - "dependencies": { - "lru-cache": { - "version": "2.7.3" - }, - "sigmund": { - "version": "1.0.1" - } - } - } - } - }, - "html-entities": { - "version": "1.1.3" - }, - "jasmine": { - "version": "2.3.2", - "dependencies": { - "exit": { - "version": "0.1.2" - }, - "jasmine-core": { - "version": "2.3.4" - } - } - }, - "jasminewd": { - "version": "1.1.0" - }, - "jasminewd2": { - "version": "0.0.6" - }, - "lodash": { - "version": "2.4.2" - }, - "minijasminenode": { - "version": "1.1.1" - }, - "optimist": { - "version": "0.6.1", - "dependencies": { - "minimist": { - "version": "0.0.10" - }, - "wordwrap": { - "version": "0.0.3" - } - } - }, - "q": { - "version": "1.0.0" - }, - "request": { - "version": "2.57.0", - "dependencies": { - "aws-sign2": { - "version": "0.5.0" - }, - "bl": { - "version": "0.9.5", - "dependencies": { - "readable-stream": { - "version": "1.0.33", - "dependencies": { - "core-util-is": { - "version": "1.0.2" - }, - "inherits": { - "version": "2.0.1" - }, - "isarray": { - "version": "0.0.1" - }, - "string_decoder": { - "version": "0.10.31" - } - } - } - } - }, - "caseless": { - "version": "0.10.0" - }, - "combined-stream": { - "version": "1.0.5", - "dependencies": { - "delayed-stream": { - "version": "1.0.0" - } - } - }, - "forever-agent": { - "version": "0.6.1" - }, - "form-data": { - "version": "0.2.0", - "dependencies": { - "async": { - "version": "0.9.2" - }, - "combined-stream": { - "version": "0.0.7", - "dependencies": { - "delayed-stream": { - "version": "0.0.5" - } - } - } - } - }, - "har-validator": { - "version": "1.8.0", - "dependencies": { - "bluebird": { - "version": "2.10.2" - }, - "chalk": { - "version": "1.1.1", - "dependencies": { - "ansi-styles": { - "version": "2.1.0" - }, - "escape-string-regexp": { - "version": "1.0.4" - }, - "has-ansi": { - "version": "2.0.0", - "dependencies": { - "ansi-regex": { - "version": "2.0.0" - } - } - }, - "strip-ansi": { - "version": "3.0.0", - "dependencies": { - "ansi-regex": { - "version": "2.0.0" - } - } - }, - "supports-color": { - "version": "2.0.0" - } - } - }, - "commander": { - "version": "2.9.0", - "dependencies": { - "graceful-readlink": { - "version": "1.0.1" - } - } - }, - "is-my-json-valid": { - "version": "2.12.4", + "lodash._baseuniq": { + "version": "3.0.3", "dependencies": { - "generate-function": { - "version": "2.0.0" - }, - "generate-object-property": { - "version": "1.2.0", - "dependencies": { - "is-property": { - "version": "1.0.2" - } - } + "lodash._baseindexof": { + "version": "3.1.0" }, - "jsonpointer": { - "version": "2.0.0" + "lodash._cacheindexof": { + "version": "3.0.2" }, - "xtend": { - "version": "4.0.1" + "lodash._createcache": { + "version": "3.1.2" } } - } - } - }, - "hawk": { - "version": "2.3.1", - "dependencies": { - "boom": { - "version": "2.10.1" }, - "cryptiles": { - "version": "2.0.5" + "lodash._getnative": { + "version": "3.9.1" }, - "hoek": { - "version": "2.16.3" + "lodash._isiterateecall": { + "version": "3.0.9" }, - "sntp": { - "version": "1.0.9" + "lodash.isarray": { + "version": "3.0.4" } } }, - "http-signature": { - "version": "0.11.0", + "shelljs": { + "version": "0.5.3" + } + } + }, + "chalk": { + "version": "1.1.1", + "dependencies": { + "ansi-styles": { + "version": "2.2.0", "dependencies": { - "asn1": { - "version": "0.1.11" - }, - "assert-plus": { - "version": "0.1.5" - }, - "ctype": { - "version": "0.5.3" + "color-convert": { + "version": "1.0.0" } } }, - "isstream": { - "version": "0.1.2" - }, - "json-stringify-safe": { - "version": "5.0.1" + "escape-string-regexp": { + "version": "1.0.5" }, - "mime-types": { - "version": "2.0.14", + "has-ansi": { + "version": "2.0.0", "dependencies": { - "mime-db": { - "version": "1.12.0" + "ansi-regex": { + "version": "2.0.0" } } }, - "node-uuid": { - "version": "1.4.7" - }, - "oauth-sign": { - "version": "0.8.1" - }, - "qs": { - "version": "3.1.0" - }, - "stringstream": { - "version": "0.0.5" - }, - "tough-cookie": { - "version": "2.2.1" - }, - "tunnel-agent": { - "version": "0.4.2" - } - } - }, - "saucelabs": { - "version": "1.0.1", - "dependencies": { - "https-proxy-agent": { - "version": "1.0.0", + "strip-ansi": { + "version": "3.0.1", "dependencies": { - "agent-base": { - "version": "2.0.1", - "dependencies": { - "semver": { - "version": "5.0.3" - } - } - }, - "debug": { - "version": "2.2.0", - "dependencies": { - "ms": { - "version": "0.7.1" - } - } - }, - "extend": { - "version": "3.0.0" + "ansi-regex": { + "version": "2.0.0" } } + }, + "supports-color": { + "version": "2.0.0" } } }, - "selenium-webdriver": { - "version": "2.47.0", + "pixrem": { + "version": "3.0.0", "dependencies": { - "rimraf": { - "version": "2.5.2", + "browserslist": { + "version": "1.3.0", "dependencies": { - "glob": { - "version": "7.0.0", - "dependencies": { - "inflight": { - "version": "1.0.4", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "inherits": { - "version": "2.0.1" - }, - "minimatch": { - "version": "3.0.0", - "dependencies": { - "brace-expansion": { - "version": "1.1.3", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - }, - "once": { - "version": "1.3.3", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "path-is-absolute": { - "version": "1.0.0" - } - } + "caniuse-db": { + "version": "1.0.30000436" } } }, - "tmp": { - "version": "0.0.24" - }, - "ws": { - "version": "0.8.1", + "reduce-css-calc": { + "version": "1.2.1", "dependencies": { - "bufferutil": { - "version": "1.2.1", - "dependencies": { - "bindings": { - "version": "1.2.1" - }, - "nan": { - "version": "2.2.0" - } - } - }, - "options": { - "version": "0.0.6" - }, - "ultron": { - "version": "1.0.2" + "balanced-match": { + "version": "0.1.0" }, - "utf-8-validate": { - "version": "1.2.1", - "dependencies": { - "bindings": { - "version": "1.2.1" - }, - "nan": { - "version": "2.2.0" - } - } + "reduce-function-call": { + "version": "1.0.1" } } + } + } + }, + "pleeease-filters": { + "version": "2.0.0", + "dependencies": { + "onecolor": { + "version": "2.4.2" + } + } + }, + "postcss": { + "version": "5.0.19", + "dependencies": { + "js-base64": { + "version": "2.1.9" }, - "xml2js": { - "version": "0.4.4", + "source-map": { + "version": "0.5.3" + }, + "supports-color": { + "version": "3.1.2", "dependencies": { - "sax": { - "version": "0.6.1" - }, - "xmlbuilder": { - "version": "4.2.1", - "dependencies": { - "lodash": { - "version": "4.3.0" - } - } + "has-flag": { + "version": "1.0.0" } } } } }, - "source-map-support": { - "version": "0.2.10", + "postcss-calc": { + "version": "5.2.0", "dependencies": { - "source-map": { - "version": "0.1.32", + "postcss-message-helpers": { + "version": "2.0.0" + }, + "reduce-css-calc": { + "version": "1.2.1", "dependencies": { - "amdefine": { - "version": "1.0.0" + "balanced-match": { + "version": "0.1.0" + }, + "reduce-function-call": { + "version": "1.0.1" } } } } - } - } - }, - "react": { - "version": "0.14.7", - "dependencies": { - "envify": { - "version": "3.4.0", + }, + "postcss-color-function": { + "version": "2.0.1", "dependencies": { - "jstransform": { - "version": "10.1.0", + "css-color-function": { + "version": "1.3.0", "dependencies": { - "base62": { - "version": "0.1.1" - }, - "esprima-fb": { - "version": "13001.1001.0-dev-harmony-fb" + "balanced-match": { + "version": "0.1.0" }, - "source-map": { - "version": "0.1.31", + "color": { + "version": "0.11.1", "dependencies": { - "amdefine": { - "version": "1.0.0" + "color-convert": { + "version": "0.5.3" + }, + "color-string": { + "version": "0.3.0", + "dependencies": { + "color-name": { + "version": "1.1.1" + } + } } } + }, + "debug": { + "version": "0.7.4" + }, + "rgb": { + "version": "0.1.0" } } }, - "through": { - "version": "2.3.8" + "postcss-message-helpers": { + "version": "2.0.0" + }, + "postcss-value-parser": { + "version": "3.3.0" } } }, - "fbjs": { - "version": "0.6.1", + "postcss-color-gray": { + "version": "3.0.0", "dependencies": { - "core-js": { - "version": "1.2.6" - }, - "loose-envify": { - "version": "1.1.0", + "color": { + "version": "0.7.3", "dependencies": { - "js-tokens": { - "version": "1.0.2" + "color-convert": { + "version": "0.5.3" + }, + "color-string": { + "version": "0.2.4", + "dependencies": { + "color-name": { + "version": "1.0.1" + } + } } } }, - "promise": { - "version": "7.1.1", + "postcss-message-helpers": { + "version": "2.0.0" + }, + "reduce-function-call": { + "version": "1.0.1", "dependencies": { - "asap": { - "version": "2.0.3" + "balanced-match": { + "version": "0.1.0" } } - }, - "ua-parser-js": { - "version": "0.7.10" - }, - "whatwg-fetch": { - "version": "0.9.0" - } - } - } - } - }, - "react-addons-css-transition-group": { - "version": "0.14.7" - }, - "react-dom": { - "version": "0.14.7" - }, - "react-draggable": { - "version": "1.3.3" - }, - "react-hot-loader": { - "version": "1.3.0", - "dependencies": { - "react-hot-api": { - "version": "0.4.7" - }, - "source-map": { - "version": "0.4.4", - "dependencies": { - "amdefine": { - "version": "1.0.0" - } - } - } - } - }, - "react-onclickout": { - "version": "2.0.4" - }, - "react-redux": { - "version": "4.4.0", - "dependencies": { - "hoist-non-react-statics": { - "version": "1.0.5" - }, - "invariant": { - "version": "2.2.0" - }, - "lodash": { - "version": "4.5.1" - }, - "loose-envify": { - "version": "1.1.0", - "dependencies": { - "js-tokens": { - "version": "1.0.2" } } - } - } - }, - "react-resizable": { - "version": "1.2.1" - }, - "react-retina-image": { - "version": "2.0.0", - "dependencies": { - "array-equal": { - "version": "1.0.0" - }, - "image-exists": { - "version": "1.1.0" - }, - "is-retina": { - "version": "1.0.3" - }, - "isarray": { - "version": "0.0.1" }, - "object-assign": { - "version": "4.0.1" - } - } - }, - "react-router": { - "version": "1.0.0", - "dependencies": { - "invariant": { - "version": "2.2.0", + "postcss-color-hex-alpha": { + "version": "2.0.0", "dependencies": { - "loose-envify": { - "version": "1.1.0", + "color": { + "version": "0.10.1", "dependencies": { - "js-tokens": { - "version": "1.0.2" + "color-convert": { + "version": "0.5.3" + }, + "color-string": { + "version": "0.3.0", + "dependencies": { + "color-name": { + "version": "1.1.1" + } + } } } + }, + "postcss-message-helpers": { + "version": "2.0.0" } } }, - "warning": { - "version": "2.1.0", + "postcss-color-hwb": { + "version": "2.0.0", "dependencies": { - "loose-envify": { - "version": "1.1.0", + "color": { + "version": "0.10.1", "dependencies": { - "js-tokens": { - "version": "1.0.2" + "color-convert": { + "version": "0.5.3" + }, + "color-string": { + "version": "0.3.0", + "dependencies": { + "color-name": { + "version": "1.1.1" + } + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0" + }, + "reduce-function-call": { + "version": "1.0.1", + "dependencies": { + "balanced-match": { + "version": "0.1.0" } } } } - } - } - }, - "redux": { - "version": "3.3.1", - "dependencies": { - "lodash": { - "version": "4.3.0" - }, - "lodash-es": { - "version": "4.3.0" }, - "loose-envify": { - "version": "1.1.0", - "dependencies": { - "js-tokens": { - "version": "1.0.2" - } - } - } - } - }, - "redux-actions": { - "version": "0.9.1", - "dependencies": { - "flux-standard-action": { - "version": "0.6.1", + "postcss-color-rebeccapurple": { + "version": "2.0.0", "dependencies": { - "lodash.isplainobject": { - "version": "3.2.0", + "color": { + "version": "0.9.0", "dependencies": { - "lodash._basefor": { - "version": "3.0.3" - }, - "lodash.isarguments": { - "version": "3.0.7" + "color-convert": { + "version": "0.5.3" }, - "lodash.keysin": { - "version": "3.0.8", + "color-string": { + "version": "0.3.0", "dependencies": { - "lodash.isarray": { - "version": "3.0.4" + "color-name": { + "version": "1.1.1" } } } @@ -10148,574 +8131,607 @@ } } }, - "reduce-reducers": { - "version": "0.1.2" - } - } - }, - "redux-form": { - "version": "4.2.0", - "dependencies": { - "deep-equal": { - "version": "1.0.1" + "postcss-color-rgba-fallback": { + "version": "2.2.0", + "dependencies": { + "postcss-value-parser": { + "version": "3.3.0" + }, + "rgb-hex": { + "version": "1.0.0" + } + } }, - "hoist-non-react-statics": { - "version": "1.0.5" + "postcss-custom-media": { + "version": "5.0.1" }, - "is-promise": { - "version": "2.1.0" + "postcss-custom-properties": { + "version": "5.0.0", + "dependencies": { + "balanced-match": { + "version": "0.1.0" + } + } }, - "react-lazy-cache": { - "version": "3.0.1" - } - } - }, - "redux-promise": { - "version": "0.5.1", - "dependencies": { - "flux-standard-action": { - "version": "0.6.0", + "postcss-custom-selectors": { + "version": "3.0.0", "dependencies": { - "lodash.isplainobject": { - "version": "3.2.0", + "balanced-match": { + "version": "0.2.1" + } + } + }, + "postcss-font-variant": { + "version": "2.0.0" + }, + "postcss-initial": { + "version": "1.5.0", + "dependencies": { + "lodash.template": { + "version": "4.2.2", "dependencies": { - "lodash._basefor": { - "version": "3.0.3" + "lodash._reinterpolate": { + "version": "3.0.0" }, - "lodash.isarguments": { - "version": "3.0.6" + "lodash.assigninwith": { + "version": "4.0.5", + "dependencies": { + "lodash.keysin": { + "version": "4.1.3" + } + } }, - "lodash.keysin": { - "version": "3.0.8", + "lodash.keys": { + "version": "4.0.5" + }, + "lodash.rest": { + "version": "4.0.1" + }, + "lodash.templatesettings": { + "version": "4.0.0", "dependencies": { - "lodash.isarray": { - "version": "3.0.4" + "lodash.escape": { + "version": "4.0.0" } } + }, + "lodash.tostring": { + "version": "4.1.2" } } } } - } - } - }, - "redux-router": { - "version": "1.0.0-beta7", - "dependencies": { - "deep-equal": { - "version": "1.0.1" - } - } - }, - "redux-thunk": { - "version": "1.0.3" - }, - "reselect": { - "version": "2.0.3" - }, - "screenfull": { - "version": "3.0.0" - }, - "style-loader": { - "version": "0.13.0" - }, - "tether": { - "version": "1.2.0" - }, - "underscore": { - "version": "1.8.3" - }, - "webpack": { - "version": "1.12.14", - "dependencies": { - "async": { - "version": "1.5.2" - }, - "clone": { - "version": "1.0.2" - }, - "enhanced-resolve": { - "version": "0.9.1", - "dependencies": { - "graceful-fs": { - "version": "4.1.3" - }, - "memory-fs": { - "version": "0.2.0" - } - } }, - "esprima": { - "version": "2.7.2" + "postcss-media-minmax": { + "version": "2.1.1" }, - "interpret": { - "version": "0.6.6" + "postcss-nesting": { + "version": "2.3.1" }, - "memory-fs": { - "version": "0.3.0", + "postcss-pseudo-class-any-link": { + "version": "1.0.0", "dependencies": { - "errno": { - "version": "0.1.4", - "dependencies": { - "prr": { - "version": "0.0.0" - } - } - }, - "readable-stream": { - "version": "2.0.5", + "postcss-selector-parser": { + "version": "1.3.3", "dependencies": { - "core-util-is": { + "flatten": { "version": "1.0.2" }, - "inherits": { - "version": "2.0.1" - }, - "isarray": { - "version": "0.0.1" - }, - "process-nextick-args": { - "version": "1.0.6" - }, - "string_decoder": { - "version": "0.10.31" + "indexes-of": { + "version": "1.0.1" }, - "util-deprecate": { - "version": "1.0.2" + "uniq": { + "version": "1.0.1" } } } } }, - "mkdirp": { - "version": "0.5.1", + "postcss-pseudoelements": { + "version": "3.0.0" + }, + "postcss-selector-matches": { + "version": "2.0.1", "dependencies": { - "minimist": { - "version": "0.0.8" + "balanced-match": { + "version": "0.2.1" } } }, - "optimist": { - "version": "0.6.1", + "postcss-selector-not": { + "version": "2.0.0", "dependencies": { - "minimist": { - "version": "0.0.10" - }, - "wordwrap": { - "version": "0.0.3" + "balanced-match": { + "version": "0.2.1" } } + } + } + }, + "postcss-import": { + "version": "8.0.2", + "dependencies": { + "object-assign": { + "version": "4.0.1" }, - "supports-color": { - "version": "3.1.2", + "postcss": { + "version": "5.0.19", "dependencies": { - "has-flag": { - "version": "1.0.0" + "js-base64": { + "version": "2.1.9" + }, + "source-map": { + "version": "0.5.3" + }, + "supports-color": { + "version": "3.1.2", + "dependencies": { + "has-flag": { + "version": "1.0.0" + } + } } } }, - "tapable": { - "version": "0.1.10" + "postcss-value-parser": { + "version": "3.3.0" }, - "uglify-js": { - "version": "2.6.2", + "read-cache": { + "version": "1.0.0", "dependencies": { - "async": { - "version": "0.2.10" + "pify": { + "version": "2.3.0" + } + } + }, + "resolve": { + "version": "1.1.7" + } + } + }, + "postcss-loader": { + "version": "0.8.2", + "dependencies": { + "postcss": { + "version": "5.0.19", + "dependencies": { + "js-base64": { + "version": "2.1.9" }, "source-map": { "version": "0.5.3" }, - "uglify-to-browserify": { - "version": "1.0.2" - }, - "yargs": { - "version": "3.10.0", + "supports-color": { + "version": "3.1.2", "dependencies": { - "camelcase": { - "version": "1.2.1" + "has-flag": { + "version": "1.0.0" + } + } + } + } + } + } + }, + "postcss-url": { + "version": "5.1.1", + "dependencies": { + "directory-encoder": { + "version": "0.7.2", + "dependencies": { + "fs-extra": { + "version": "0.23.1", + "dependencies": { + "graceful-fs": { + "version": "4.1.3" }, - "cliui": { - "version": "2.1.0", + "jsonfile": { + "version": "2.2.3" + }, + "rimraf": { + "version": "2.5.2", "dependencies": { - "center-align": { - "version": "0.1.3", + "glob": { + "version": "7.0.3", "dependencies": { - "align-text": { - "version": "0.1.4", + "inflight": { + "version": "1.0.4", "dependencies": { - "kind-of": { - "version": "3.0.2", - "dependencies": { - "is-buffer": { - "version": "1.1.2" - } - } - }, - "longest": { + "wrappy": { "version": "1.0.1" - }, - "repeat-string": { - "version": "1.5.4" } } }, - "lazy-cache": { - "version": "1.0.3" - } - } - }, - "right-align": { - "version": "0.1.3", - "dependencies": { - "align-text": { - "version": "0.1.4", + "inherits": { + "version": "2.0.1" + }, + "once": { + "version": "1.3.3", "dependencies": { - "kind-of": { - "version": "3.0.2", - "dependencies": { - "is-buffer": { - "version": "1.1.2" - } - } - }, - "longest": { + "wrappy": { "version": "1.0.1" - }, - "repeat-string": { - "version": "1.5.4" } } } } - }, - "wordwrap": { - "version": "0.0.2" - } - } - }, - "decamelize": { - "version": "1.1.2", - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5" } } - }, - "window-size": { - "version": "0.1.0" } } - } - } - }, - "watchpack": { - "version": "0.2.9", - "dependencies": { - "async": { - "version": "0.9.2" }, - "chokidar": { - "version": "1.4.3", + "handlebars": { + "version": "1.3.0", "dependencies": { - "anymatch": { - "version": "1.3.0", + "optimist": { + "version": "0.3.7", "dependencies": { - "arrify": { - "version": "1.0.1" - }, - "micromatch": { - "version": "2.3.7", - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "dependencies": { - "arr-flatten": { - "version": "1.0.1" - } - } - }, - "array-unique": { - "version": "0.2.1" - }, - "braces": { - "version": "1.8.3", - "dependencies": { - "expand-range": { - "version": "1.8.1", - "dependencies": { - "fill-range": { - "version": "2.2.3", - "dependencies": { - "is-number": { - "version": "2.1.0" - }, - "isobject": { - "version": "2.0.0", - "dependencies": { - "isarray": { - "version": "0.0.1" - } - } - }, - "randomatic": { - "version": "1.1.5" - }, - "repeat-string": { - "version": "1.5.4" - } - } - } - } - }, - "preserve": { - "version": "0.2.0" - }, - "repeat-element": { - "version": "1.1.2" - } - } - }, - "expand-brackets": { - "version": "0.1.4" - }, - "extglob": { - "version": "0.3.2" - }, - "filename-regex": { - "version": "2.0.0" - }, - "is-extglob": { - "version": "1.0.0" - }, - "kind-of": { - "version": "3.0.2", - "dependencies": { - "is-buffer": { - "version": "1.1.2" - } - } - }, - "normalize-path": { - "version": "2.0.1" - }, - "object.omit": { - "version": "2.0.0", - "dependencies": { - "for-own": { - "version": "0.1.3", - "dependencies": { - "for-in": { - "version": "0.1.4" - } - } - }, - "is-extendable": { - "version": "0.1.1" - } - } - }, - "parse-glob": { - "version": "3.0.4", - "dependencies": { - "glob-base": { - "version": "0.3.0" - }, - "is-dotfile": { - "version": "1.0.2" - } - } - }, - "regex-cache": { - "version": "0.4.2", - "dependencies": { - "is-equal-shallow": { - "version": "0.1.3" - }, - "is-primitive": { - "version": "2.0.0" - } - } - } - } + "wordwrap": { + "version": "0.0.3" } } }, - "async-each": { - "version": "1.0.0" - }, - "fsevents": { - "version": "1.0.8", + "uglify-js": { + "version": "2.3.6", "dependencies": { - "ansi": { - "version": "0.3.1" - }, - "ansi-regex": { - "version": "2.0.0" - }, - "ansi-styles": { - "version": "2.1.0" - }, - "are-we-there-yet": { - "version": "1.0.6" - }, - "asn1": { - "version": "0.2.3" - }, - "assert-plus": { - "version": "0.2.0" - }, "async": { - "version": "1.5.2" - }, - "aws-sign2": { - "version": "0.6.0" + "version": "0.2.10" }, - "aws4": { - "version": "1.2.1", + "source-map": { + "version": "0.1.43", "dependencies": { - "lru-cache": { - "version": "2.7.3" + "amdefine": { + "version": "1.0.0" } } + } + } + } + } + }, + "img-stats": { + "version": "0.5.2", + "dependencies": { + "xmldom": { + "version": "0.1.22" + } + } + } + } + }, + "js-base64": { + "version": "2.1.9" + }, + "mime": { + "version": "1.3.4" + }, + "minimatch": { + "version": "3.0.0", + "dependencies": { + "brace-expansion": { + "version": "1.1.3", + "dependencies": { + "balanced-match": { + "version": "0.3.0" + }, + "concat-map": { + "version": "0.0.1" + } + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "dependencies": { + "minimist": { + "version": "0.0.8" + } + } + }, + "path-is-absolute": { + "version": "1.0.0" + }, + "postcss": { + "version": "5.0.19", + "dependencies": { + "source-map": { + "version": "0.5.3" + }, + "supports-color": { + "version": "3.1.2", + "dependencies": { + "has-flag": { + "version": "1.0.0" + } + } + } + } + } + } + }, + "protractor": { + "version": "3.2.1", + "dependencies": { + "adm-zip": { + "version": "0.4.7" + }, + "glob": { + "version": "6.0.4", + "dependencies": { + "inflight": { + "version": "1.0.4", + "dependencies": { + "wrappy": { + "version": "1.0.1" + } + } + }, + "inherits": { + "version": "2.0.1" + }, + "minimatch": { + "version": "3.0.0", + "dependencies": { + "brace-expansion": { + "version": "1.1.3", + "dependencies": { + "balanced-match": { + "version": "0.3.0" }, - "bl": { - "version": "1.0.2" - }, - "block-stream": { - "version": "0.0.8" - }, - "boom": { - "version": "2.10.1" - }, - "caseless": { - "version": "0.11.0" - }, - "chalk": { - "version": "1.1.1" - }, - "combined-stream": { - "version": "1.0.5" - }, - "commander": { - "version": "2.9.0" + "concat-map": { + "version": "0.0.1" + } + } + } + } + }, + "once": { + "version": "1.3.3", + "dependencies": { + "wrappy": { + "version": "1.0.1" + } + } + }, + "path-is-absolute": { + "version": "1.0.0" + } + } + }, + "jasmine": { + "version": "2.4.1", + "dependencies": { + "exit": { + "version": "0.1.2" + }, + "glob": { + "version": "3.2.11", + "dependencies": { + "inherits": { + "version": "2.0.1" + }, + "minimatch": { + "version": "0.3.0", + "dependencies": { + "lru-cache": { + "version": "2.7.3" }, + "sigmund": { + "version": "1.0.1" + } + } + } + } + } + } + }, + "jasminewd2": { + "version": "0.0.8" + }, + "optimist": { + "version": "0.6.1", + "dependencies": { + "minimist": { + "version": "0.0.10" + }, + "wordwrap": { + "version": "0.0.3" + } + } + }, + "q": { + "version": "1.4.1" + }, + "request": { + "version": "2.67.0", + "dependencies": { + "aws-sign2": { + "version": "0.6.0" + }, + "bl": { + "version": "1.0.3", + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "dependencies": { "core-util-is": { "version": "1.0.2" }, - "cryptiles": { - "version": "2.0.5" - }, - "dashdash": { - "version": "1.12.2" - }, - "debug": { - "version": "2.2.0" - }, - "deep-extend": { - "version": "0.4.1" - }, - "delayed-stream": { - "version": "1.0.0" + "inherits": { + "version": "2.0.1" }, - "delegates": { + "isarray": { "version": "1.0.0" }, - "ecc-jsbn": { - "version": "0.1.1" - }, - "escape-string-regexp": { - "version": "1.0.4" + "process-nextick-args": { + "version": "1.0.6" }, - "extend": { - "version": "3.0.0" + "string_decoder": { + "version": "0.10.31" }, - "extsprintf": { + "util-deprecate": { "version": "1.0.2" + } + } + } + } + }, + "caseless": { + "version": "0.11.0" + }, + "combined-stream": { + "version": "1.0.5", + "dependencies": { + "delayed-stream": { + "version": "1.0.0" + } + } + }, + "extend": { + "version": "3.0.0" + }, + "forever-agent": { + "version": "0.6.1" + }, + "form-data": { + "version": "1.0.0-rc4", + "dependencies": { + "async": { + "version": "1.5.2" + } + } + }, + "har-validator": { + "version": "2.0.6", + "dependencies": { + "chalk": { + "version": "1.1.1", + "dependencies": { + "ansi-styles": { + "version": "2.2.0", + "dependencies": { + "color-convert": { + "version": "1.0.0" + } + } }, - "forever-agent": { - "version": "0.6.1" - }, - "form-data": { - "version": "1.0.0-rc3" - }, - "fstream": { - "version": "1.0.8" + "escape-string-regexp": { + "version": "1.0.5" }, - "fstream-ignore": { - "version": "1.0.3", + "has-ansi": { + "version": "2.0.0", "dependencies": { - "minimatch": { - "version": "3.0.0", - "dependencies": { - "brace-expansion": { - "version": "1.1.2", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } + "ansi-regex": { + "version": "2.0.0" } } }, - "gauge": { - "version": "1.2.5" + "strip-ansi": { + "version": "3.0.1", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } }, - "generate-function": { + "supports-color": { "version": "2.0.0" - }, - "generate-object-property": { - "version": "1.2.0" - }, - "graceful-fs": { - "version": "4.1.3" - }, + } + } + }, + "commander": { + "version": "2.9.0", + "dependencies": { "graceful-readlink": { "version": "1.0.1" - }, - "har-validator": { - "version": "2.0.6" - }, - "has-ansi": { - "version": "2.0.0" - }, - "has-unicode": { + } + } + }, + "is-my-json-valid": { + "version": "2.13.1", + "dependencies": { + "generate-function": { "version": "2.0.0" }, - "hawk": { - "version": "3.1.3" - }, - "hoek": { - "version": "2.16.3" - }, - "http-signature": { - "version": "1.1.1" - }, - "inherits": { - "version": "2.0.1" - }, - "ini": { - "version": "1.3.4" + "generate-object-property": { + "version": "1.2.0", + "dependencies": { + "is-property": { + "version": "1.0.2" + } + } }, - "is-my-json-valid": { - "version": "2.12.4" + "jsonpointer": { + "version": "2.0.0" }, - "is-property": { + "xtend": { + "version": "4.0.1" + } + } + }, + "pinkie-promise": { + "version": "2.0.0", + "dependencies": { + "pinkie": { + "version": "2.0.4" + } + } + } + } + }, + "hawk": { + "version": "3.1.3", + "dependencies": { + "boom": { + "version": "2.10.1" + }, + "cryptiles": { + "version": "2.0.5" + }, + "hoek": { + "version": "2.16.3" + }, + "sntp": { + "version": "1.0.9" + } + } + }, + "http-signature": { + "version": "1.1.1", + "dependencies": { + "assert-plus": { + "version": "0.2.0" + }, + "jsprim": { + "version": "1.2.2", + "dependencies": { + "extsprintf": { "version": "1.0.2" }, - "is-typedarray": { - "version": "1.0.0" + "json-schema": { + "version": "0.2.2" }, - "isarray": { - "version": "0.0.1" + "verror": { + "version": "1.3.6" + } + } + }, + "sshpk": { + "version": "1.7.4", + "dependencies": { + "asn1": { + "version": "0.2.3" }, - "isstream": { - "version": "0.1.2" + "dashdash": { + "version": "1.13.0", + "dependencies": { + "assert-plus": { + "version": "1.0.0" + } + } + }, + "ecc-jsbn": { + "version": "0.1.1" }, "jodid25519": { "version": "1.0.2" @@ -10723,296 +8739,436 @@ "jsbn": { "version": "0.1.0" }, - "json-schema": { - "version": "0.2.2" - }, - "json-stringify-safe": { - "version": "5.0.1" - }, - "jsonpointer": { - "version": "2.0.0" - }, - "jsprim": { - "version": "1.2.2" - }, - "lodash._basetostring": { - "version": "3.0.1" - }, - "lodash._createpadding": { - "version": "3.6.1" - }, - "lodash._root": { - "version": "3.0.0" - }, - "lodash.pad": { - "version": "3.3.0" - }, - "lodash.padleft": { - "version": "3.1.1" - }, - "lodash.padright": { - "version": "3.1.1" - }, - "lodash.repeat": { - "version": "3.2.0" - }, - "mime-db": { - "version": "1.21.0" - }, - "mime-types": { - "version": "2.1.9" - }, - "minimist": { - "version": "0.0.8" - }, - "mkdirp": { - "version": "0.5.1" - }, + "tweetnacl": { + "version": "0.14.1" + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0" + }, + "isstream": { + "version": "0.1.2" + }, + "json-stringify-safe": { + "version": "5.0.1" + }, + "mime-types": { + "version": "2.1.10", + "dependencies": { + "mime-db": { + "version": "1.22.0" + } + } + }, + "node-uuid": { + "version": "1.4.7" + }, + "oauth-sign": { + "version": "0.8.1" + }, + "qs": { + "version": "5.2.0" + }, + "stringstream": { + "version": "0.0.5" + }, + "tough-cookie": { + "version": "2.2.2" + }, + "tunnel-agent": { + "version": "0.4.2" + } + } + }, + "saucelabs": { + "version": "1.0.1", + "dependencies": { + "https-proxy-agent": { + "version": "1.0.0", + "dependencies": { + "agent-base": { + "version": "2.0.1", + "dependencies": { + "semver": { + "version": "5.0.3" + } + } + }, + "debug": { + "version": "2.2.0", + "dependencies": { "ms": { "version": "0.7.1" - }, - "nan": { - "version": "2.2.0" - }, - "node-pre-gyp": { - "version": "0.6.21", - "dependencies": { - "nopt": { - "version": "3.0.6", - "dependencies": { - "abbrev": { - "version": "1.0.7" - } - } - } - } - }, - "node-uuid": { - "version": "1.4.7" - }, - "npmlog": { - "version": "2.0.2" - }, - "oauth-sign": { - "version": "0.8.1" - }, - "once": { - "version": "1.3.3" - }, - "pinkie": { - "version": "2.0.4" - }, - "pinkie-promise": { - "version": "2.0.0" - }, - "process-nextick-args": { - "version": "1.0.6" - }, - "qs": { - "version": "6.0.2" - }, - "rc": { - "version": "1.1.6", + } + } + }, + "extend": { + "version": "3.0.0" + } + } + } + } + }, + "selenium-webdriver": { + "version": "2.52.0", + "dependencies": { + "adm-zip": { + "version": "0.4.4" + }, + "rimraf": { + "version": "2.5.2", + "dependencies": { + "glob": { + "version": "7.0.3", + "dependencies": { + "inflight": { + "version": "1.0.4", "dependencies": { - "minimist": { - "version": "1.2.0" + "wrappy": { + "version": "1.0.1" } } }, - "readable-stream": { - "version": "2.0.5" - }, - "request": { - "version": "2.69.0" + "inherits": { + "version": "2.0.1" }, - "rimraf": { - "version": "2.5.1", + "minimatch": { + "version": "3.0.0", "dependencies": { - "glob": { - "version": "6.0.4", + "brace-expansion": { + "version": "1.1.3", "dependencies": { - "inflight": { - "version": "1.0.4", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "inherits": { - "version": "2.0.1" - }, - "minimatch": { - "version": "3.0.0", - "dependencies": { - "brace-expansion": { - "version": "1.1.2", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - }, - "once": { - "version": "1.3.3", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } + "balanced-match": { + "version": "0.3.0" }, - "path-is-absolute": { - "version": "1.0.0" + "concat-map": { + "version": "0.0.1" } } } } }, - "semver": { - "version": "5.1.0" - }, - "sntp": { - "version": "1.0.9" - }, - "sshpk": { - "version": "1.7.3" - }, - "string_decoder": { - "version": "0.10.31" - }, - "stringstream": { - "version": "0.0.5" - }, - "strip-ansi": { - "version": "3.0.0" - }, - "strip-json-comments": { - "version": "1.0.4" - }, - "supports-color": { - "version": "2.0.0" - }, - "tar": { - "version": "2.2.1" - }, - "tar-pack": { - "version": "3.1.3" - }, - "tough-cookie": { - "version": "2.2.1" - }, - "tunnel-agent": { - "version": "0.4.2" - }, - "tweetnacl": { - "version": "0.13.3" - }, - "uid-number": { - "version": "0.0.6" - }, - "util-deprecate": { - "version": "1.0.2" - }, - "verror": { - "version": "1.3.6" - }, - "wrappy": { - "version": "1.0.1" + "once": { + "version": "1.3.3", + "dependencies": { + "wrappy": { + "version": "1.0.1" + } + } }, - "xtend": { - "version": "4.0.1" + "path-is-absolute": { + "version": "1.0.0" } } + } + } + }, + "tmp": { + "version": "0.0.24" + }, + "ws": { + "version": "1.0.1", + "dependencies": { + "options": { + "version": "0.0.6" }, - "glob-parent": { - "version": "2.0.0" - }, - "inherits": { - "version": "2.0.1" + "ultron": { + "version": "1.0.2" + } + } + }, + "xml2js": { + "version": "0.4.4", + "dependencies": { + "sax": { + "version": "0.6.1" }, - "is-binary-path": { - "version": "1.0.1", + "xmlbuilder": { + "version": "7.0.0", "dependencies": { - "binary-extensions": { - "version": "1.4.0" + "lodash": { + "version": "4.6.1" } } + } + } + } + } + }, + "source-map-support": { + "version": "0.4.0", + "dependencies": { + "source-map": { + "version": "0.1.32", + "dependencies": { + "amdefine": { + "version": "1.0.0" + } + } + } + } + } + } + }, + "react": { + "version": "0.14.7", + "dependencies": { + "envify": { + "version": "3.4.0", + "dependencies": { + "jstransform": { + "version": "10.1.0", + "dependencies": { + "base62": { + "version": "0.1.1" }, - "is-glob": { - "version": "2.0.1", + "esprima-fb": { + "version": "13001.1001.0-dev-harmony-fb" + }, + "source-map": { + "version": "0.1.31", "dependencies": { - "is-extglob": { + "amdefine": { "version": "1.0.0" } } + } + } + }, + "through": { + "version": "2.3.8" + } + } + }, + "fbjs": { + "version": "0.6.1", + "dependencies": { + "core-js": { + "version": "1.2.6" + }, + "loose-envify": { + "version": "1.1.0", + "dependencies": { + "js-tokens": { + "version": "1.0.2" + } + } + }, + "promise": { + "version": "7.1.1", + "dependencies": { + "asap": { + "version": "2.0.3" + } + } + }, + "ua-parser-js": { + "version": "0.7.10" + }, + "whatwg-fetch": { + "version": "0.9.0" + } + } + } + } + }, + "react-addons-css-transition-group": { + "version": "0.14.7" + }, + "react-dom": { + "version": "0.14.7" + }, + "react-draggable": { + "version": "1.3.4" + }, + "react-hot-loader": { + "version": "1.3.0", + "dependencies": { + "react-hot-api": { + "version": "0.4.7" + }, + "source-map": { + "version": "0.4.4", + "dependencies": { + "amdefine": { + "version": "1.0.0" + } + } + } + } + }, + "react-onclickout": { + "version": "2.0.4" + }, + "react-redux": { + "version": "4.4.1", + "dependencies": { + "hoist-non-react-statics": { + "version": "1.0.5" + }, + "invariant": { + "version": "2.2.1" + }, + "lodash": { + "version": "4.6.1" + }, + "loose-envify": { + "version": "1.1.0", + "dependencies": { + "js-tokens": { + "version": "1.0.2" + } + } + } + } + }, + "react-resizable": { + "version": "1.3.0" + }, + "react-retina-image": { + "version": "2.0.0", + "dependencies": { + "array-equal": { + "version": "1.0.0" + }, + "image-exists": { + "version": "1.1.0" + }, + "is-retina": { + "version": "1.0.3" + }, + "isarray": { + "version": "0.0.1" + }, + "object-assign": { + "version": "4.0.1" + } + } + }, + "react-router": { + "version": "1.0.0", + "dependencies": { + "invariant": { + "version": "2.2.1", + "dependencies": { + "loose-envify": { + "version": "1.1.0", + "dependencies": { + "js-tokens": { + "version": "1.0.2" + } + } + } + } + }, + "warning": { + "version": "2.1.0", + "dependencies": { + "loose-envify": { + "version": "1.1.0", + "dependencies": { + "js-tokens": { + "version": "1.0.2" + } + } + } + } + } + } + }, + "redux": { + "version": "3.3.1", + "dependencies": { + "lodash": { + "version": "4.6.1" + }, + "lodash-es": { + "version": "4.6.1" + }, + "loose-envify": { + "version": "1.1.0", + "dependencies": { + "js-tokens": { + "version": "1.0.2" + } + } + } + } + }, + "redux-actions": { + "version": "0.9.1", + "dependencies": { + "flux-standard-action": { + "version": "0.6.1", + "dependencies": { + "lodash.isplainobject": { + "version": "3.2.0", + "dependencies": { + "lodash._basefor": { + "version": "3.0.3" }, - "path-is-absolute": { - "version": "1.0.0" + "lodash.isarguments": { + "version": "3.0.8" }, - "readdirp": { - "version": "2.0.0", + "lodash.keysin": { + "version": "3.0.8", "dependencies": { - "minimatch": { - "version": "2.0.10", - "dependencies": { - "brace-expansion": { - "version": "1.1.3", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - }, - "readable-stream": { - "version": "2.0.5", - "dependencies": { - "core-util-is": { - "version": "1.0.2" - }, - "isarray": { - "version": "0.0.1" - }, - "process-nextick-args": { - "version": "1.0.6" - }, - "string_decoder": { - "version": "0.10.31" - }, - "util-deprecate": { - "version": "1.0.2" - } - } + "lodash.isarray": { + "version": "3.0.4" } } } } - }, - "graceful-fs": { - "version": "4.1.3" } } }, - "webpack-core": { - "version": "0.6.8", + "reduce-reducers": { + "version": "0.1.2" + } + } + }, + "redux-form": { + "version": "4.2.2", + "dependencies": { + "deep-equal": { + "version": "1.0.1" + }, + "hoist-non-react-statics": { + "version": "1.0.5" + }, + "is-promise": { + "version": "2.1.0" + }, + "react-lazy-cache": { + "version": "3.0.1" + } + } + }, + "redux-promise": { + "version": "0.5.3", + "dependencies": { + "flux-standard-action": { + "version": "0.6.1", "dependencies": { - "source-list-map": { - "version": "0.1.5" - }, - "source-map": { - "version": "0.4.4", + "lodash.isplainobject": { + "version": "3.2.0", "dependencies": { - "amdefine": { - "version": "1.0.0" + "lodash._basefor": { + "version": "3.0.3" + }, + "lodash.isarguments": { + "version": "3.0.8" + }, + "lodash.keysin": { + "version": "3.0.8", + "dependencies": { + "lodash.isarray": { + "version": "3.0.4" + } + } } } } @@ -11020,217 +9176,99 @@ } } }, - "webpack-dev-server": { - "version": "1.14.1", + "redux-router": { + "version": "1.0.0-beta7", "dependencies": { - "compression": { - "version": "1.6.1", + "deep-equal": { + "version": "1.0.1" + } + } + }, + "redux-thunk": { + "version": "2.0.1" + }, + "reselect": { + "version": "2.2.1" + }, + "screenfull": { + "version": "3.0.0" + }, + "style-loader": { + "version": "0.13.0" + }, + "tether": { + "version": "1.2.0" + }, + "underscore": { + "version": "1.8.3" + }, + "webpack": { + "version": "1.12.14", + "dependencies": { + "async": { + "version": "1.5.2" + }, + "clone": { + "version": "1.0.2" + }, + "enhanced-resolve": { + "version": "0.9.1", "dependencies": { - "accepts": { - "version": "1.3.1", - "dependencies": { - "mime-types": { - "version": "2.1.9", - "dependencies": { - "mime-db": { - "version": "1.21.0" - } - } - }, - "negotiator": { - "version": "0.6.0" - } - } - }, - "bytes": { - "version": "2.2.0" - }, - "compressible": { - "version": "2.0.7", - "dependencies": { - "mime-db": { - "version": "1.22.0" - } - } - }, - "debug": { - "version": "2.2.0", - "dependencies": { - "ms": { - "version": "0.7.1" - } - } - }, - "on-headers": { - "version": "1.0.1" + "graceful-fs": { + "version": "4.1.3" }, - "vary": { - "version": "1.1.0" + "memory-fs": { + "version": "0.2.0" } } }, - "connect-history-api-fallback": { - "version": "1.1.0" + "esprima": { + "version": "2.7.2" }, - "express": { - "version": "4.13.4", + "interpret": { + "version": "0.6.6" + }, + "memory-fs": { + "version": "0.3.0", "dependencies": { - "accepts": { - "version": "1.2.13", - "dependencies": { - "mime-types": { - "version": "2.1.9", - "dependencies": { - "mime-db": { - "version": "1.21.0" - } - } - }, - "negotiator": { - "version": "0.5.3" - } - } - }, - "array-flatten": { - "version": "1.1.1" - }, - "content-disposition": { - "version": "0.5.1" - }, - "content-type": { - "version": "1.0.1" - }, - "cookie": { - "version": "0.1.5" - }, - "cookie-signature": { - "version": "1.0.6" - }, - "debug": { - "version": "2.2.0", - "dependencies": { - "ms": { - "version": "0.7.1" - } - } - }, - "depd": { - "version": "1.1.0" - }, - "escape-html": { - "version": "1.0.3" - }, - "etag": { - "version": "1.7.0" - }, - "finalhandler": { - "version": "0.4.1", - "dependencies": { - "unpipe": { - "version": "1.0.0" - } - } - }, - "fresh": { - "version": "0.3.0" - }, - "merge-descriptors": { - "version": "1.0.1" - }, - "methods": { - "version": "1.1.2" - }, - "on-finished": { - "version": "2.3.0", - "dependencies": { - "ee-first": { - "version": "1.1.1" - } - } - }, - "parseurl": { - "version": "1.3.1" - }, - "path-to-regexp": { - "version": "0.1.7" - }, - "proxy-addr": { - "version": "1.0.10", + "errno": { + "version": "0.1.4", "dependencies": { - "forwarded": { - "version": "0.1.0" - }, - "ipaddr.js": { - "version": "1.0.5" + "prr": { + "version": "0.0.0" } } }, - "qs": { - "version": "4.0.0" - }, - "range-parser": { - "version": "1.0.3" - }, - "send": { - "version": "0.13.1", + "readable-stream": { + "version": "2.0.6", "dependencies": { - "destroy": { - "version": "1.0.4" + "core-util-is": { + "version": "1.0.2" }, - "http-errors": { - "version": "1.3.1", - "dependencies": { - "inherits": { - "version": "2.0.1" - } - } + "inherits": { + "version": "2.0.1" }, - "mime": { - "version": "1.3.4" + "isarray": { + "version": "1.0.0" }, - "ms": { - "version": "0.7.1" + "process-nextick-args": { + "version": "1.0.6" }, - "statuses": { - "version": "1.2.1" - } - } - }, - "serve-static": { - "version": "1.10.2" - }, - "type-is": { - "version": "1.6.11", - "dependencies": { - "media-typer": { - "version": "0.3.0" + "string_decoder": { + "version": "0.10.31" }, - "mime-types": { - "version": "2.1.9", - "dependencies": { - "mime-db": { - "version": "1.21.0" - } - } - } - } - }, - "utils-merge": { - "version": "1.0.0" - }, - "vary": { - "version": "1.0.1" + "util-deprecate": { + "version": "1.0.2" + } + } } } }, - "http-proxy": { - "version": "1.13.1", + "mkdirp": { + "version": "0.5.1", "dependencies": { - "eventemitter3": { - "version": "1.1.1" - }, - "requires-port": { - "version": "1.0.0" + "minimist": { + "version": "0.0.8" } } }, @@ -11245,547 +9283,537 @@ } } }, - "serve-index": { - "version": "1.7.3", + "supports-color": { + "version": "3.1.2", "dependencies": { - "accepts": { - "version": "1.2.13", - "dependencies": { - "negotiator": { - "version": "0.5.3" - } - } + "has-flag": { + "version": "1.0.0" + } + } + }, + "tapable": { + "version": "0.1.10" + }, + "uglify-js": { + "version": "2.6.2", + "dependencies": { + "async": { + "version": "0.2.10" }, - "batch": { + "source-map": { "version": "0.5.3" }, - "debug": { - "version": "2.2.0", - "dependencies": { - "ms": { - "version": "0.7.1" - } - } - }, - "escape-html": { - "version": "1.0.3" + "uglify-to-browserify": { + "version": "1.0.2" }, - "http-errors": { - "version": "1.3.1", + "yargs": { + "version": "3.10.0", "dependencies": { - "inherits": { - "version": "2.0.1" - }, - "statuses": { + "camelcase": { "version": "1.2.1" - } - } - }, - "mime-types": { - "version": "2.1.9", - "dependencies": { - "mime-db": { - "version": "1.21.0" - } - } - }, - "parseurl": { - "version": "1.3.1" - } - } - }, - "sockjs": { - "version": "0.3.15", - "dependencies": { - "faye-websocket": { - "version": "0.9.4", - "dependencies": { - "websocket-driver": { - "version": "0.6.4", + }, + "cliui": { + "version": "2.1.0", "dependencies": { - "websocket-extensions": { - "version": "0.1.1" + "center-align": { + "version": "0.1.3", + "dependencies": { + "align-text": { + "version": "0.1.4", + "dependencies": { + "kind-of": { + "version": "3.0.2", + "dependencies": { + "is-buffer": { + "version": "1.1.3" + } + } + }, + "longest": { + "version": "1.0.1" + }, + "repeat-string": { + "version": "1.5.4" + } + } + }, + "lazy-cache": { + "version": "1.0.3" + } + } + }, + "right-align": { + "version": "0.1.3", + "dependencies": { + "align-text": { + "version": "0.1.4", + "dependencies": { + "kind-of": { + "version": "3.0.2", + "dependencies": { + "is-buffer": { + "version": "1.1.3" + } + } + }, + "longest": { + "version": "1.0.1" + }, + "repeat-string": { + "version": "1.5.4" + } + } + } + } + }, + "wordwrap": { + "version": "0.0.2" } } + }, + "decamelize": { + "version": "1.2.0" + }, + "window-size": { + "version": "0.1.0" } } - }, - "node-uuid": { - "version": "1.4.7" } } }, - "sockjs-client": { - "version": "1.0.3", + "watchpack": { + "version": "0.2.9", "dependencies": { - "debug": { - "version": "2.2.0", - "dependencies": { - "ms": { - "version": "0.7.1" - } - } - }, - "eventsource": { - "version": "0.1.6", - "dependencies": { - "original": { - "version": "1.0.0" - } - } + "async": { + "version": "0.9.2" }, - "faye-websocket": { - "version": "0.7.3", + "chokidar": { + "version": "1.4.3", "dependencies": { - "websocket-driver": { - "version": "0.6.4", + "anymatch": { + "version": "1.3.0", "dependencies": { - "websocket-extensions": { - "version": "0.1.1" + "arrify": { + "version": "1.0.1" + }, + "micromatch": { + "version": "2.3.7", + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "dependencies": { + "arr-flatten": { + "version": "1.0.1" + } + } + }, + "array-unique": { + "version": "0.2.1" + }, + "braces": { + "version": "1.8.3", + "dependencies": { + "expand-range": { + "version": "1.8.1", + "dependencies": { + "fill-range": { + "version": "2.2.3", + "dependencies": { + "is-number": { + "version": "2.1.0" + }, + "isobject": { + "version": "2.0.0", + "dependencies": { + "isarray": { + "version": "0.0.1" + } + } + }, + "randomatic": { + "version": "1.1.5" + }, + "repeat-string": { + "version": "1.5.4" + } + } + } + } + }, + "preserve": { + "version": "0.2.0" + }, + "repeat-element": { + "version": "1.1.2" + } + } + }, + "expand-brackets": { + "version": "0.1.4" + }, + "extglob": { + "version": "0.3.2" + }, + "filename-regex": { + "version": "2.0.0" + }, + "is-extglob": { + "version": "1.0.0" + }, + "kind-of": { + "version": "3.0.2", + "dependencies": { + "is-buffer": { + "version": "1.1.3" + } + } + }, + "normalize-path": { + "version": "2.0.1" + }, + "object.omit": { + "version": "2.0.0", + "dependencies": { + "for-own": { + "version": "0.1.3", + "dependencies": { + "for-in": { + "version": "0.1.4" + } + } + }, + "is-extendable": { + "version": "0.1.1" + } + } + }, + "parse-glob": { + "version": "3.0.4", + "dependencies": { + "glob-base": { + "version": "0.3.0" + }, + "is-dotfile": { + "version": "1.0.2" + } + } + }, + "regex-cache": { + "version": "0.4.2", + "dependencies": { + "is-equal-shallow": { + "version": "0.1.3" + }, + "is-primitive": { + "version": "2.0.0" + } + } + } + } } } - } - } - }, - "inherits": { - "version": "2.0.1" - }, - "json3": { - "version": "3.3.2" - }, - "url-parse": { - "version": "1.0.5", - "dependencies": { - "querystringify": { - "version": "0.0.3" }, - "requires-port": { + "async-each": { "version": "1.0.0" - } - } - } - } - }, - "stream-cache": { - "version": "0.0.2" - }, - "strip-ansi": { - "version": "3.0.0", - "dependencies": { - "ansi-regex": { - "version": "2.0.0" - } - } - }, - "supports-color": { - "version": "3.1.2", - "dependencies": { - "has-flag": { - "version": "1.0.0" - } - } - }, - "webpack": { - "version": "1.12.14", - "dependencies": { - "async": { - "version": "1.5.2" - }, - "clone": { - "version": "1.0.2" - }, - "enhanced-resolve": { - "version": "0.9.1", - "dependencies": { - "graceful-fs": { - "version": "4.1.3" - }, - "memory-fs": { - "version": "0.2.0" - } - } - }, - "esprima": { - "version": "2.7.2" - }, - "interpret": { - "version": "0.6.6" - }, - "memory-fs": { - "version": "0.3.0", - "dependencies": { - "errno": { - "version": "0.1.4", - "dependencies": { - "prr": { - "version": "0.0.0" - } - } }, - "readable-stream": { - "version": "2.0.5", + "fsevents": { + "version": "1.0.8", "dependencies": { + "ansi": { + "version": "0.3.1" + }, + "ansi-regex": { + "version": "2.0.0" + }, + "ansi-styles": { + "version": "2.1.0" + }, + "are-we-there-yet": { + "version": "1.0.6" + }, + "asn1": { + "version": "0.2.3" + }, + "assert-plus": { + "version": "0.2.0" + }, + "async": { + "version": "1.5.2" + }, + "aws-sign2": { + "version": "0.6.0" + }, + "aws4": { + "version": "1.2.1", + "dependencies": { + "lru-cache": { + "version": "2.7.3" + } + } + }, + "bl": { + "version": "1.0.2" + }, + "block-stream": { + "version": "0.0.8" + }, + "boom": { + "version": "2.10.1" + }, + "caseless": { + "version": "0.11.0" + }, + "chalk": { + "version": "1.1.1" + }, + "combined-stream": { + "version": "1.0.5" + }, + "commander": { + "version": "2.9.0" + }, "core-util-is": { "version": "1.0.2" }, + "cryptiles": { + "version": "2.0.5" + }, + "dashdash": { + "version": "1.12.2" + }, + "debug": { + "version": "2.2.0" + }, + "deep-extend": { + "version": "0.4.1" + }, + "delayed-stream": { + "version": "1.0.0" + }, + "delegates": { + "version": "1.0.0" + }, + "ecc-jsbn": { + "version": "0.1.1" + }, + "escape-string-regexp": { + "version": "1.0.4" + }, + "extend": { + "version": "3.0.0" + }, + "extsprintf": { + "version": "1.0.2" + }, + "forever-agent": { + "version": "0.6.1" + }, + "form-data": { + "version": "1.0.0-rc3" + }, + "fstream": { + "version": "1.0.8" + }, + "fstream-ignore": { + "version": "1.0.3", + "dependencies": { + "minimatch": { + "version": "3.0.0", + "dependencies": { + "brace-expansion": { + "version": "1.1.2", + "dependencies": { + "balanced-match": { + "version": "0.3.0" + }, + "concat-map": { + "version": "0.0.1" + } + } + } + } + } + } + }, + "gauge": { + "version": "1.2.5" + }, + "generate-function": { + "version": "2.0.0" + }, + "generate-object-property": { + "version": "1.2.0" + }, + "graceful-fs": { + "version": "4.1.3" + }, + "graceful-readlink": { + "version": "1.0.1" + }, + "har-validator": { + "version": "2.0.6" + }, + "has-ansi": { + "version": "2.0.0" + }, + "has-unicode": { + "version": "2.0.0" + }, + "hawk": { + "version": "3.1.3" + }, + "hoek": { + "version": "2.16.3" + }, + "http-signature": { + "version": "1.1.1" + }, "inherits": { "version": "2.0.1" }, + "ini": { + "version": "1.3.4" + }, + "is-my-json-valid": { + "version": "2.12.4" + }, + "is-property": { + "version": "1.0.2" + }, + "is-typedarray": { + "version": "1.0.0" + }, "isarray": { "version": "0.0.1" }, - "process-nextick-args": { - "version": "1.0.6" - }, - "string_decoder": { - "version": "0.10.31" + "isstream": { + "version": "0.1.2" }, - "util-deprecate": { + "jodid25519": { "version": "1.0.2" - } - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "dependencies": { - "minimist": { - "version": "0.0.8" - } - } - }, - "tapable": { - "version": "0.1.10" - }, - "uglify-js": { - "version": "2.6.2", - "dependencies": { - "async": { - "version": "0.2.10" - }, - "source-map": { - "version": "0.5.3" - }, - "uglify-to-browserify": { - "version": "1.0.2" - }, - "yargs": { - "version": "3.10.0", - "dependencies": { - "camelcase": { - "version": "1.2.1" }, - "cliui": { - "version": "2.1.0", + "jsbn": { + "version": "0.1.0" + }, + "json-schema": { + "version": "0.2.2" + }, + "json-stringify-safe": { + "version": "5.0.1" + }, + "jsonpointer": { + "version": "2.0.0" + }, + "jsprim": { + "version": "1.2.2" + }, + "lodash._basetostring": { + "version": "3.0.1" + }, + "lodash._createpadding": { + "version": "3.6.1" + }, + "lodash._root": { + "version": "3.0.0" + }, + "lodash.pad": { + "version": "3.3.0" + }, + "lodash.padleft": { + "version": "3.1.1" + }, + "lodash.padright": { + "version": "3.1.1" + }, + "lodash.repeat": { + "version": "3.2.0" + }, + "mime-db": { + "version": "1.21.0" + }, + "mime-types": { + "version": "2.1.9" + }, + "minimist": { + "version": "0.0.8" + }, + "mkdirp": { + "version": "0.5.1" + }, + "ms": { + "version": "0.7.1" + }, + "nan": { + "version": "2.2.0" + }, + "node-pre-gyp": { + "version": "0.6.21", "dependencies": { - "center-align": { - "version": "0.1.3", - "dependencies": { - "align-text": { - "version": "0.1.4", - "dependencies": { - "kind-of": { - "version": "3.0.2", - "dependencies": { - "is-buffer": { - "version": "1.1.2" - } - } - }, - "longest": { - "version": "1.0.1" - }, - "repeat-string": { - "version": "1.5.4" - } - } - }, - "lazy-cache": { - "version": "1.0.3" - } - } - }, - "right-align": { - "version": "0.1.3", + "nopt": { + "version": "3.0.6", "dependencies": { - "align-text": { - "version": "0.1.4", - "dependencies": { - "kind-of": { - "version": "3.0.2", - "dependencies": { - "is-buffer": { - "version": "1.1.2" - } - } - }, - "longest": { - "version": "1.0.1" - }, - "repeat-string": { - "version": "1.5.4" - } - } + "abbrev": { + "version": "1.0.7" } } - }, - "wordwrap": { - "version": "0.0.2" } } }, - "decamelize": { - "version": "1.1.2", - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5" - } - } + "node-uuid": { + "version": "1.4.7" }, - "window-size": { - "version": "0.1.0" - } - } - } - } - }, - "watchpack": { - "version": "0.2.9", - "dependencies": { - "async": { - "version": "0.9.2" - }, - "chokidar": { - "version": "1.4.3", - "dependencies": { - "anymatch": { - "version": "1.3.0", - "dependencies": { - "arrify": { - "version": "1.0.1" - }, - "micromatch": { - "version": "2.3.7", - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "dependencies": { - "arr-flatten": { - "version": "1.0.1" - } - } - }, - "array-unique": { - "version": "0.2.1" - }, - "braces": { - "version": "1.8.3", - "dependencies": { - "expand-range": { - "version": "1.8.1", - "dependencies": { - "fill-range": { - "version": "2.2.3", - "dependencies": { - "is-number": { - "version": "2.1.0" - }, - "isobject": { - "version": "2.0.0", - "dependencies": { - "isarray": { - "version": "0.0.1" - } - } - }, - "randomatic": { - "version": "1.1.5" - }, - "repeat-string": { - "version": "1.5.4" - } - } - } - } - }, - "preserve": { - "version": "0.2.0" - }, - "repeat-element": { - "version": "1.1.2" - } - } - }, - "expand-brackets": { - "version": "0.1.4" - }, - "extglob": { - "version": "0.3.2" - }, - "filename-regex": { - "version": "2.0.0" - }, - "is-extglob": { - "version": "1.0.0" - }, - "kind-of": { - "version": "3.0.2", - "dependencies": { - "is-buffer": { - "version": "1.1.2" - } - } - }, - "normalize-path": { - "version": "2.0.1" - }, - "object.omit": { - "version": "2.0.0", - "dependencies": { - "for-own": { - "version": "0.1.3", - "dependencies": { - "for-in": { - "version": "0.1.4" - } - } - }, - "is-extendable": { - "version": "0.1.1" - } - } - }, - "parse-glob": { - "version": "3.0.4", - "dependencies": { - "glob-base": { - "version": "0.3.0" - }, - "is-dotfile": { - "version": "1.0.2" - } - } - }, - "regex-cache": { - "version": "0.4.2", - "dependencies": { - "is-equal-shallow": { - "version": "0.1.3" - }, - "is-primitive": { - "version": "2.0.0" - } - } - } - } + "npmlog": { + "version": "2.0.2" + }, + "oauth-sign": { + "version": "0.8.1" + }, + "once": { + "version": "1.3.3" + }, + "pinkie": { + "version": "2.0.4" + }, + "pinkie-promise": { + "version": "2.0.0" + }, + "process-nextick-args": { + "version": "1.0.6" + }, + "qs": { + "version": "6.0.2" + }, + "rc": { + "version": "1.1.6", + "dependencies": { + "minimist": { + "version": "1.2.0" } } }, - "async-each": { - "version": "1.0.0" + "readable-stream": { + "version": "2.0.5" + }, + "request": { + "version": "2.69.0" }, - "fsevents": { - "version": "1.0.8", + "rimraf": { + "version": "2.5.1", "dependencies": { - "ansi": { - "version": "0.3.1" - }, - "ansi-regex": { - "version": "2.0.0" - }, - "ansi-styles": { - "version": "2.1.0" - }, - "are-we-there-yet": { - "version": "1.0.6" - }, - "asn1": { - "version": "0.2.3" - }, - "assert-plus": { - "version": "0.2.0" - }, - "async": { - "version": "1.5.2" - }, - "aws-sign2": { - "version": "0.6.0" - }, - "aws4": { - "version": "1.2.1", - "dependencies": { - "lru-cache": { - "version": "2.7.3" - } - } - }, - "bl": { - "version": "1.0.2" - }, - "block-stream": { - "version": "0.0.8" - }, - "boom": { - "version": "2.10.1" - }, - "caseless": { - "version": "0.11.0" - }, - "chalk": { - "version": "1.1.1" - }, - "combined-stream": { - "version": "1.0.5" - }, - "commander": { - "version": "2.9.0" - }, - "core-util-is": { - "version": "1.0.2" - }, - "cryptiles": { - "version": "2.0.5" - }, - "dashdash": { - "version": "1.12.2" - }, - "debug": { - "version": "2.2.0" - }, - "deep-extend": { - "version": "0.4.1" - }, - "delayed-stream": { - "version": "1.0.0" - }, - "delegates": { - "version": "1.0.0" - }, - "ecc-jsbn": { - "version": "0.1.1" - }, - "escape-string-regexp": { - "version": "1.0.4" - }, - "extend": { - "version": "3.0.0" - }, - "extsprintf": { - "version": "1.0.2" - }, - "forever-agent": { - "version": "0.6.1" - }, - "form-data": { - "version": "1.0.0-rc3" - }, - "fstream": { - "version": "1.0.8" - }, - "fstream-ignore": { - "version": "1.0.3", + "glob": { + "version": "6.0.4", "dependencies": { + "inflight": { + "version": "1.0.4", + "dependencies": { + "wrappy": { + "version": "1.0.1" + } + } + }, + "inherits": { + "version": "2.0.1" + }, "minimatch": { "version": "3.0.0", "dependencies": { @@ -11801,363 +9829,531 @@ } } } + }, + "once": { + "version": "1.3.3", + "dependencies": { + "wrappy": { + "version": "1.0.1" + } + } + }, + "path-is-absolute": { + "version": "1.0.0" } } - }, - "gauge": { - "version": "1.2.5" - }, - "generate-function": { - "version": "2.0.0" - }, - "generate-object-property": { - "version": "1.2.0" - }, - "graceful-fs": { - "version": "4.1.3" - }, - "graceful-readlink": { - "version": "1.0.1" - }, - "har-validator": { - "version": "2.0.6" - }, - "has-ansi": { - "version": "2.0.0" - }, - "has-unicode": { - "version": "2.0.0" - }, - "hawk": { - "version": "3.1.3" - }, - "hoek": { - "version": "2.16.3" - }, - "http-signature": { - "version": "1.1.1" - }, - "inherits": { - "version": "2.0.1" - }, - "ini": { - "version": "1.3.4" - }, - "is-my-json-valid": { - "version": "2.12.4" - }, - "is-property": { - "version": "1.0.2" - }, - "is-typedarray": { - "version": "1.0.0" - }, - "isarray": { - "version": "0.0.1" - }, - "isstream": { - "version": "0.1.2" - }, - "jodid25519": { - "version": "1.0.2" - }, - "jsbn": { - "version": "0.1.0" - }, - "json-schema": { - "version": "0.2.2" - }, - "json-stringify-safe": { - "version": "5.0.1" - }, - "jsonpointer": { - "version": "2.0.0" - }, - "jsprim": { - "version": "1.2.2" - }, - "lodash._basetostring": { - "version": "3.0.1" - }, - "lodash._createpadding": { - "version": "3.6.1" - }, - "lodash._root": { - "version": "3.0.0" - }, - "lodash.pad": { - "version": "3.3.0" - }, - "lodash.padleft": { - "version": "3.1.1" - }, - "lodash.padright": { - "version": "3.1.1" - }, - "lodash.repeat": { - "version": "3.2.0" - }, - "mime-db": { - "version": "1.21.0" - }, - "mime-types": { - "version": "2.1.9" - }, - "minimist": { - "version": "0.0.8" - }, - "mkdirp": { - "version": "0.5.1" - }, - "ms": { - "version": "0.7.1" - }, - "nan": { - "version": "2.2.0" - }, - "node-pre-gyp": { - "version": "0.6.21", + } + } + }, + "semver": { + "version": "5.1.0" + }, + "sntp": { + "version": "1.0.9" + }, + "sshpk": { + "version": "1.7.3" + }, + "string_decoder": { + "version": "0.10.31" + }, + "stringstream": { + "version": "0.0.5" + }, + "strip-ansi": { + "version": "3.0.0" + }, + "strip-json-comments": { + "version": "1.0.4" + }, + "supports-color": { + "version": "2.0.0" + }, + "tar": { + "version": "2.2.1" + }, + "tar-pack": { + "version": "3.1.3" + }, + "tough-cookie": { + "version": "2.2.1" + }, + "tunnel-agent": { + "version": "0.4.2" + }, + "tweetnacl": { + "version": "0.13.3" + }, + "uid-number": { + "version": "0.0.6" + }, + "util-deprecate": { + "version": "1.0.2" + }, + "verror": { + "version": "1.3.6" + }, + "wrappy": { + "version": "1.0.1" + }, + "xtend": { + "version": "4.0.1" + } + } + }, + "glob-parent": { + "version": "2.0.0" + }, + "inherits": { + "version": "2.0.1" + }, + "is-binary-path": { + "version": "1.0.1", + "dependencies": { + "binary-extensions": { + "version": "1.4.0" + } + } + }, + "is-glob": { + "version": "2.0.1", + "dependencies": { + "is-extglob": { + "version": "1.0.0" + } + } + }, + "path-is-absolute": { + "version": "1.0.0" + }, + "readdirp": { + "version": "2.0.0", + "dependencies": { + "minimatch": { + "version": "2.0.10", + "dependencies": { + "brace-expansion": { + "version": "1.1.3", "dependencies": { - "nopt": { - "version": "3.0.6", - "dependencies": { - "abbrev": { - "version": "1.0.7" - } - } + "balanced-match": { + "version": "0.3.0" + }, + "concat-map": { + "version": "0.0.1" } } + } + } + }, + "readable-stream": { + "version": "2.0.6", + "dependencies": { + "core-util-is": { + "version": "1.0.2" }, - "node-uuid": { - "version": "1.4.7" - }, - "npmlog": { - "version": "2.0.2" - }, - "oauth-sign": { - "version": "0.8.1" - }, - "once": { - "version": "1.3.3" - }, - "pinkie": { - "version": "2.0.4" - }, - "pinkie-promise": { - "version": "2.0.0" + "isarray": { + "version": "1.0.0" }, "process-nextick-args": { "version": "1.0.6" }, - "qs": { - "version": "6.0.2" - }, - "rc": { - "version": "1.1.6", - "dependencies": { - "minimist": { - "version": "1.2.0" - } - } - }, - "readable-stream": { - "version": "2.0.5" - }, - "request": { - "version": "2.69.0" - }, - "rimraf": { - "version": "2.5.1", - "dependencies": { - "glob": { - "version": "6.0.4", - "dependencies": { - "inflight": { - "version": "1.0.4", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "inherits": { - "version": "2.0.1" - }, - "minimatch": { - "version": "3.0.0", - "dependencies": { - "brace-expansion": { - "version": "1.1.2", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - }, - "once": { - "version": "1.3.3", - "dependencies": { - "wrappy": { - "version": "1.0.1" - } - } - }, - "path-is-absolute": { - "version": "1.0.0" - } - } - } - } - }, - "semver": { - "version": "5.1.0" - }, - "sntp": { - "version": "1.0.9" - }, - "sshpk": { - "version": "1.7.3" - }, "string_decoder": { "version": "0.10.31" }, - "stringstream": { - "version": "0.0.5" - }, - "strip-ansi": { - "version": "3.0.0" - }, - "strip-json-comments": { - "version": "1.0.4" - }, - "supports-color": { - "version": "2.0.0" - }, - "tar": { - "version": "2.2.1" - }, - "tar-pack": { - "version": "3.1.3" - }, - "tough-cookie": { - "version": "2.2.1" - }, - "tunnel-agent": { - "version": "0.4.2" - }, - "tweetnacl": { - "version": "0.13.3" - }, - "uid-number": { - "version": "0.0.6" - }, "util-deprecate": { "version": "1.0.2" - }, - "verror": { - "version": "1.3.6" - }, - "wrappy": { - "version": "1.0.1" - }, - "xtend": { - "version": "4.0.1" } } - }, - "glob-parent": { - "version": "2.0.0" - }, + } + } + } + } + }, + "graceful-fs": { + "version": "4.1.3" + } + } + }, + "webpack-core": { + "version": "0.6.8", + "dependencies": { + "source-list-map": { + "version": "0.1.5" + }, + "source-map": { + "version": "0.4.4", + "dependencies": { + "amdefine": { + "version": "1.0.0" + } + } + } + } + } + } + }, + "webpack-dev-server": { + "version": "1.14.1", + "dependencies": { + "compression": { + "version": "1.6.1", + "dependencies": { + "accepts": { + "version": "1.3.2", + "dependencies": { + "mime-types": { + "version": "2.1.10", + "dependencies": { + "mime-db": { + "version": "1.22.0" + } + } + }, + "negotiator": { + "version": "0.6.0" + } + } + }, + "bytes": { + "version": "2.2.0" + }, + "compressible": { + "version": "2.0.7", + "dependencies": { + "mime-db": { + "version": "1.22.0" + } + } + }, + "debug": { + "version": "2.2.0", + "dependencies": { + "ms": { + "version": "0.7.1" + } + } + }, + "on-headers": { + "version": "1.0.1" + }, + "vary": { + "version": "1.1.0" + } + } + }, + "connect-history-api-fallback": { + "version": "1.1.0" + }, + "express": { + "version": "4.13.4", + "dependencies": { + "accepts": { + "version": "1.2.13", + "dependencies": { + "mime-types": { + "version": "2.1.10", + "dependencies": { + "mime-db": { + "version": "1.22.0" + } + } + }, + "negotiator": { + "version": "0.5.3" + } + } + }, + "array-flatten": { + "version": "1.1.1" + }, + "content-disposition": { + "version": "0.5.1" + }, + "content-type": { + "version": "1.0.1" + }, + "cookie": { + "version": "0.1.5" + }, + "cookie-signature": { + "version": "1.0.6" + }, + "debug": { + "version": "2.2.0", + "dependencies": { + "ms": { + "version": "0.7.1" + } + } + }, + "depd": { + "version": "1.1.0" + }, + "escape-html": { + "version": "1.0.3" + }, + "etag": { + "version": "1.7.0" + }, + "finalhandler": { + "version": "0.4.1", + "dependencies": { + "unpipe": { + "version": "1.0.0" + } + } + }, + "fresh": { + "version": "0.3.0" + }, + "merge-descriptors": { + "version": "1.0.1" + }, + "methods": { + "version": "1.1.2" + }, + "on-finished": { + "version": "2.3.0", + "dependencies": { + "ee-first": { + "version": "1.1.1" + } + } + }, + "parseurl": { + "version": "1.3.1" + }, + "path-to-regexp": { + "version": "0.1.7" + }, + "proxy-addr": { + "version": "1.0.10", + "dependencies": { + "forwarded": { + "version": "0.1.0" + }, + "ipaddr.js": { + "version": "1.0.5" + } + } + }, + "qs": { + "version": "4.0.0" + }, + "range-parser": { + "version": "1.0.3" + }, + "send": { + "version": "0.13.1", + "dependencies": { + "destroy": { + "version": "1.0.4" + }, + "http-errors": { + "version": "1.3.1", + "dependencies": { "inherits": { "version": "2.0.1" - }, - "is-binary-path": { - "version": "1.0.1", - "dependencies": { - "binary-extensions": { - "version": "1.4.0" - } - } - }, - "is-glob": { - "version": "2.0.1", - "dependencies": { - "is-extglob": { - "version": "1.0.0" - } - } - }, - "path-is-absolute": { - "version": "1.0.0" - }, - "readdirp": { - "version": "2.0.0", - "dependencies": { - "minimatch": { - "version": "2.0.10", - "dependencies": { - "brace-expansion": { - "version": "1.1.3", - "dependencies": { - "balanced-match": { - "version": "0.3.0" - }, - "concat-map": { - "version": "0.0.1" - } - } - } - } - }, - "readable-stream": { - "version": "2.0.5", - "dependencies": { - "core-util-is": { - "version": "1.0.2" - }, - "isarray": { - "version": "0.0.1" - }, - "process-nextick-args": { - "version": "1.0.6" - }, - "string_decoder": { - "version": "0.10.31" - }, - "util-deprecate": { - "version": "1.0.2" - } - } - } - } } } }, - "graceful-fs": { - "version": "4.1.3" + "mime": { + "version": "1.3.4" + }, + "ms": { + "version": "0.7.1" + }, + "statuses": { + "version": "1.2.1" } } }, - "webpack-core": { - "version": "0.6.8", + "serve-static": { + "version": "1.10.2" + }, + "type-is": { + "version": "1.6.12", "dependencies": { - "source-list-map": { - "version": "0.1.5" + "media-typer": { + "version": "0.3.0" }, - "source-map": { - "version": "0.4.4", + "mime-types": { + "version": "2.1.10", "dependencies": { - "amdefine": { - "version": "1.0.0" + "mime-db": { + "version": "1.22.0" + } + } + } + } + }, + "utils-merge": { + "version": "1.0.0" + }, + "vary": { + "version": "1.0.1" + } + } + }, + "http-proxy": { + "version": "1.13.2", + "dependencies": { + "eventemitter3": { + "version": "1.2.0" + }, + "requires-port": { + "version": "1.0.0" + } + } + }, + "optimist": { + "version": "0.6.1", + "dependencies": { + "minimist": { + "version": "0.0.10" + }, + "wordwrap": { + "version": "0.0.3" + } + } + }, + "serve-index": { + "version": "1.7.3", + "dependencies": { + "accepts": { + "version": "1.2.13", + "dependencies": { + "negotiator": { + "version": "0.5.3" + } + } + }, + "batch": { + "version": "0.5.3" + }, + "debug": { + "version": "2.2.0", + "dependencies": { + "ms": { + "version": "0.7.1" + } + } + }, + "escape-html": { + "version": "1.0.3" + }, + "http-errors": { + "version": "1.3.1", + "dependencies": { + "inherits": { + "version": "2.0.1" + }, + "statuses": { + "version": "1.2.1" + } + } + }, + "mime-types": { + "version": "2.1.10", + "dependencies": { + "mime-db": { + "version": "1.22.0" + } + } + }, + "parseurl": { + "version": "1.3.1" + } + } + }, + "sockjs": { + "version": "0.3.15", + "dependencies": { + "faye-websocket": { + "version": "0.9.4", + "dependencies": { + "websocket-driver": { + "version": "0.6.4", + "dependencies": { + "websocket-extensions": { + "version": "0.1.1" + } + } + } + } + }, + "node-uuid": { + "version": "1.4.7" + } + } + }, + "sockjs-client": { + "version": "1.0.3", + "dependencies": { + "debug": { + "version": "2.2.0", + "dependencies": { + "ms": { + "version": "0.7.1" + } + } + }, + "eventsource": { + "version": "0.1.6", + "dependencies": { + "original": { + "version": "1.0.0" + } + } + }, + "faye-websocket": { + "version": "0.7.3", + "dependencies": { + "websocket-driver": { + "version": "0.6.4", + "dependencies": { + "websocket-extensions": { + "version": "0.1.1" } } } } + }, + "inherits": { + "version": "2.0.1" + }, + "json3": { + "version": "3.3.2" + }, + "url-parse": { + "version": "1.0.5", + "dependencies": { + "querystringify": { + "version": "0.0.3" + }, + "requires-port": { + "version": "1.0.0" + } + } + } + } + }, + "stream-cache": { + "version": "0.0.2" + }, + "strip-ansi": { + "version": "3.0.1", + "dependencies": { + "ansi-regex": { + "version": "2.0.0" + } + } + }, + "supports-color": { + "version": "3.1.2", + "dependencies": { + "has-flag": { + "version": "1.0.0" } } }, @@ -12176,7 +10372,7 @@ } }, "readable-stream": { - "version": "2.0.5", + "version": "2.0.6", "dependencies": { "core-util-is": { "version": "1.0.2" @@ -12185,7 +10381,7 @@ "version": "2.0.1" }, "isarray": { - "version": "0.0.1" + "version": "1.0.0" }, "process-nextick-args": { "version": "1.0.6" diff --git a/package.json b/package.json index 0ffe1b1891d32521a1b1bd9b2da2210c6e6cd237..70c8ee3a3edec7658d414288015ac23f29d5ab84 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "diff": "^2.2.1", "fixed-data-table": "^0.6.0", "history": "1.12.0", - "humanize-plus": "^1.5.0", + "humanize-plus": "^1.8.1", "icepick": "^1.1.0", "inflection": "^1.7.1", "moment": "^2.12.0", @@ -46,7 +46,7 @@ "redux-form": "^4.2.0", "redux-promise": "^0.5.0", "redux-router": "^1.0.0-beta4", - "redux-thunk": "^1.0.0", + "redux-thunk": "^2.0.1", "reselect": "^2.0.1", "screenfull": "^3.0.0", "tether": "^1.2.0", @@ -56,7 +56,7 @@ }, "devDependencies": { "angular-mocks": "1.2.28", - "babel-eslint": "^5.0.0", + "babel-eslint": "^6.0.0-beta.6", "babel-loader": "^6.2.4", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-preset-es2015": "^6.6.0", @@ -69,7 +69,7 @@ "extract-text-webpack-plugin": "^1.0.1", "file-loader": "^0.8.5", "glob": "^5.0.15", - "html-webpack-plugin": "^2.9.0", + "html-webpack-plugin": "^2.14.0", "istanbul-instrumenter-loader": "^0.2.0", "jasmine-core": "^2.3.4", "karma": "^0.13.9", @@ -83,7 +83,7 @@ "postcss-import": "^8.0.2", "postcss-loader": "^0.8.1", "postcss-url": "^5.1.1", - "protractor": "^2.1.0", + "protractor": "^3.2.1", "react-hot-loader": "^1.3.0", "style-loader": "^0.13.0", "webpack": "^1.12.14", diff --git a/project.clj b/project.clj index cadc78a073daece2ec6380de87ea70debc355df3..9530a863ac8abd73c5765f4fa121113d633d77df 100644 --- a/project.clj +++ b/project.clj @@ -8,7 +8,8 @@ :aliases {"bikeshed" ["bikeshed" "--max-line-length" "240"] "check-reflection-warnings" ["with-profile" "+reflection-warnings" "check"] "test" ["with-profile" "+expectations" "expectations"] - "generate-sample-dataset" ["with-profile" "+generate-sample-dataset" "run"]} + "generate-sample-dataset" ["with-profile" "+generate-sample-dataset" "run"] + "h2" ["with-profile" "+h2-shell" "run"]} :dependencies [[org.clojure/clojure "1.8.0"] [org.clojure/core.async "0.2.374"] [org.clojure/core.match "0.3.0-alpha4"] ; optimized pattern matching library for Clojure @@ -36,7 +37,7 @@ ring/ring-core]] [com.draines/postal "1.11.4"] ; SMTP library [com.google.apis/google-api-services-bigquery ; Google BigQuery Java Client Library - "v2-rev275-1.21.0"] + "v2-rev277-1.21.0"] [com.h2database/h2 "1.4.191"] ; embedded SQL database [com.mattbertolini/liquibase-slf4j "2.0.0"] ; Java Migrations lib [com.novemberain/monger "3.0.2"] ; MongoDB Driver @@ -136,4 +137,5 @@ :jar-name "reset-password.jar" ;; Exclude everything except for reset-password specific code in the created jar :jar-exclusions [#"^(?!metabase/reset_password).*$"] - :target-path "reset-password-artifacts/%s"}}) ; different than ./target because otherwise lein uberjar will delete our artifacts and vice versa + :target-path "reset-password-artifacts/%s"} ; different than ./target because otherwise lein uberjar will delete our artifacts and vice versa + :h2-shell {:main org.h2.tools.Shell}}) diff --git a/resources/frontend_client/app/card/partials/card_detail.html b/resources/frontend_client/app/card/partials/card_detail.html deleted file mode 100644 index a1339ea9c5152f44fadfdfdc529d97cf58b36dc5..0000000000000000000000000000000000000000 --- a/resources/frontend_client/app/card/partials/card_detail.html +++ /dev/null @@ -1,8 +0,0 @@ -<div class="QueryBuilder flex flex-column bg-white spread" ng-class="{ 'QueryBuilder--showDataReference': isShowingDataReference }"> - <div id="react_qb_header"></div> - <div id="react_qb_editor" class="z2"></div> - <div id="react_qb_viz" class="flex z1"></div> -</div> -<div class="DataReference" id="react_data_reference"></div> -<div id="react_qb_tutorial"></div> -<div id="react_qbnewb_modal"></div> diff --git a/src/metabase/api/field.clj b/src/metabase/api/field.clj index d94ed76dcfc641657e0cb2bb0e1907febd425a8f..22309d6a4ec5358d7137736854566f7dd65a88d5 100644 --- a/src/metabase/api/field.clj +++ b/src/metabase/api/field.clj @@ -38,7 +38,7 @@ display_name NonEmptyString} (let-404 [field (Field id)] (write-check field) - (let [special_type (or special_type (:special_type field)) + (let [special_type (if (contains? body :special_type) special_type (:special_type field)) visibility_type (or visibility_type (:visibility_type field)) fk_target_field_id (when (= :fk special_type) ;; only let target field be set for :fk type fields, diff --git a/src/metabase/db/migrations.clj b/src/metabase/db/migrations.clj index cd4c3610604380b85b0b8608f82505870b9c0329..164abba674b687130e6053e22a8e47e2a9eb0ca6 100644 --- a/src/metabase/db/migrations.clj +++ b/src/metabase/db/migrations.clj @@ -124,6 +124,7 @@ :sizeY (when sizeY (* sizeY 4))}) (k/where {:id id})))) + ;; migrate data to new visibility_type column on field (defmigration migrate-field-visibility-type (when (< 0 (:cnt (first (k/select Field (k/aggregate (count :*) :cnt) (k/where (= :visibility_type "unset")))))) @@ -151,6 +152,27 @@ :active true})))) +;; deal with dashboard cards which have NULL `:row` or `:col` values +(defmigration fix-dashboard-cards-without-positions + (when-let [bad-dashboards (not-empty (k/select DashboardCard (k/fields [:dashboard_id]) (k/modifier "DISTINCT") (k/where (or (= :row nil) (= :col nil)))))] + (log/info "Looks like we need to fix unpositioned cards in these dashboards:" (mapv :dashboard_id bad-dashboards)) + ;; we are going to take the easy way out, which is to put bad-cards at the bottom of the dashboard + (doseq [{dash-to-fix :dashboard_id} bad-dashboards] + (let [max-row (or (:row (first (k/select DashboardCard (k/aggregate (max :row) :row) (k/where {:dashboard_id dash-to-fix})))) 0) + max-size (or (:size (first (k/select DashboardCard (k/aggregate (max :sizeY) :size) (k/where {:dashboard_id dash-to-fix, :row max-row})))) 0) + max-y (+ max-row max-size) + bad-cards (k/select DashboardCard (k/fields :id :sizeY) (k/where {:dashboard_id dash-to-fix}) (k/where (or (= :row nil) (= :col nil))))] + (loop [[bad-card & more] bad-cards + row-target max-y] + (k/update DashboardCard + (k/set-fields {:row row-target + :col 0}) + (k/where {:id (:id bad-card)})) + (when more + (recur more (+ row-target (:sizeY bad-card))))))))) + + +;; migrate FK information from old ForeignKey model to Field.fk_target_field_id (defmigration migrate-fk-metadata (when (> 1 (:cnt (first (k/select Field (k/aggregate (count :*) :cnt) (k/where (not= :fk_target_field_id nil)))))) (when-let [fks (not-empty (db/sel :many ForeignKey))] diff --git a/src/metabase/driver/bigquery.clj b/src/metabase/driver/bigquery.clj index c8c8ade850480d1b461a2d514565776773123106..47b75913d44e7abb71beac9291d6d7a46eea3b54 100644 --- a/src/metabase/driver/bigquery.clj +++ b/src/metabase/driver/bigquery.clj @@ -172,25 +172,46 @@ "STRING" identity "TIMESTAMP" parse-timestamp-str}) -(defn- post-process-native [^QueryResponse response] - (when-not (.getJobComplete response) - (throw (Exception. (str (.getErrors response))))) - (let [^TableSchema schema (.getSchema response) - parsers (for [^TableFieldSchema field (.getFields schema)] - (type->parser (.getType field))) - cols (table-schema->metabase-field-info schema)] - {:columns (map :name cols) - :cols cols - :rows (for [^TableRow row (.getRows response)] - (for [[^TableCell cell, parser] (partition 2 (interleave (.getF row) parsers))] - (when-let [v (.getV cell)] - ;; There is a weird error where everything that *should* be NULL comes back as an Object. See https://jira.talendforge.org/browse/TBD-1592 - ;; Everything else comes back as a String luckily so we can proceed normally. - (when-not (= (class v) Object) - (parser v)))))})) +(def ^:private ^:const query-timeout-error-message "Query timed out.") + +(defn- post-process-native + ([^QueryResponse response] + (post-process-native response 20)) + ([^QueryResponse response, ^Integer timeout-seconds] + (if-not (.getJobComplete response) + ;; 99% of the time by the time this is called `.getJobComplete` will return `true`. On the off chance it doesn't, wait a few seconds for the job to finish. + (do + (when (zero? timeout-seconds) + (throw (ex-info query-timeout-error-message (into {} response)))) + (Thread/sleep 1000) + (post-process-native response (dec timeout-seconds))) + ;; Otherwise the job *is* complete + (let [^TableSchema schema (.getSchema response) + parsers (for [^TableFieldSchema field (.getFields schema)] + (type->parser (.getType field))) + cols (table-schema->metabase-field-info schema)] + {:columns (map :name cols) + :cols cols + :rows (for [^TableRow row (.getRows response)] + (for [[^TableCell cell, parser] (partition 2 (interleave (.getF row) parsers))] + (when-let [v (.getV cell)] + ;; There is a weird error where everything that *should* be NULL comes back as an Object. See https://jira.talendforge.org/browse/TBD-1592 + ;; Everything else comes back as a String luckily so we can proceed normally. + (when-not (= (class v) Object) + (parser v)))))})))) (defn- process-native* [database query-string] - (post-process-native (execute-query database query-string))) + ;; Automatically retry the query a single time if it timed out + (let [do-query (fn [] (post-process-native (execute-query database query-string)))] + (try + (do-query) + (catch clojure.lang.ExceptionInfo e + (if (= (.getMessage e) query-timeout-error-message) + ;; If this was a timeout error, retry + (do (log/info "Query timed out, retrying...") + (do-query)) + ;; Otherwise re-throw exception + (throw e)))))) (defn- process-native [{database-id :database, {native-query :query} :native}] (process-native* (Database database-id) native-query)) @@ -296,7 +317,7 @@ (k/as-sql korma-form)) #"\]\.\[" ".") (catch Throwable e - (println (u/format-color 'red "Couldn't convert korma form to SQL:\n%s" (sqlqp/pprint-korma-form korma-form))) + (log/error (u/format-color 'red "Couldn't convert korma form to SQL:\n%s" (sqlqp/pprint-korma-form korma-form))) (throw e)))) (defn- post-process-structured [dataset-id table-name {:keys [columns rows]}] @@ -334,7 +355,7 @@ {:pre [(map? this) (or field index (and (seq schema-name) (seq field-name) (seq table-name)) - (println "Don't know how to alias: " this))]} + (log/error "Don't know how to alias: " this))]} (cond field (recur field) ; DateTimeField index (name (let [{{{ag-type :aggregation-type} :aggregation} :query} sqlqp/*query*] diff --git a/src/metabase/driver/druid/query_processor.clj b/src/metabase/driver/druid/query_processor.clj index af08922fcdb126c444fd37c0c356f76592cb5342..04165a752c8c31daf919740be97677cdd1159ef4 100644 --- a/src/metabase/driver/druid/query_processor.clj +++ b/src/metabase/driver/druid/query_processor.clj @@ -44,9 +44,7 @@ DateTimeField (->rvalue [this] (->rvalue (:field this))) Value (->rvalue [this] (:value this)) DateTimeValue (->rvalue [{{unit :unit} :field, value :value}] (u/date->iso-8601 (u/date-trunc-or-extract unit value))) - RelativeDateTimeValue (->rvalue [{:keys [unit amount]}] (if (zero? amount) - (u/date->iso-8601) - (u/date->iso-8601 (u/date-trunc-or-extract unit (u/relative-date unit amount)))))) + RelativeDateTimeValue (->rvalue [{:keys [unit amount]}] (u/date->iso-8601 (u/date-trunc-or-extract unit (u/relative-date unit amount))))) (defprotocol ^:private IDimensionOrMetric (^:private dimension-or-metric? [this] diff --git a/src/metabase/driver/mongo.clj b/src/metabase/driver/mongo.clj index 6d57b4239114b3191c7a31f259f8b1e5eac2fafc..6308e916aac27c35cf716d27a33e4b763de5b7bb 100644 --- a/src/metabase/driver/mongo.clj +++ b/src/metabase/driver/mongo.clj @@ -1,6 +1,7 @@ (ns metabase.driver.mongo "MongoDB Driver." (:require [clojure.set :as set] + [clojure.tools.logging :as log] (monger [collection :as mc] [command :as cmd] [conversion :as conv] @@ -118,16 +119,19 @@ (defn- describe-table [table] (with-mongo-connection [^com.mongodb.DB conn (table/database table)] ;; TODO: ideally this would take the LAST set of rows added to the table so we could ensure this data changes on reruns - (let [parsed-rows (->> (mc/find-maps conn (:name table)) - (take driver/max-sync-lazy-seq-results) - (reduce - (fn [field-defs row] - (loop [[k & more-keys] (keys row) - fields field-defs] - (if-not k - fields - (recur more-keys (update fields k (partial update-field-attrs (k row))))))) - {}))] + (let [parsed-rows (try + (->> (mc/find-maps conn (:name table)) + (take driver/max-sync-lazy-seq-results) + (reduce + (fn [field-defs row] + (loop [[k & more-keys] (keys row) + fields field-defs] + (if-not k + fields + (recur more-keys (update fields k (partial update-field-attrs (k row))))))) + {})) + (catch Throwable t + (log/error (format "Error introspecting collection: %s" (:name table)) t)))] {:name (:name table) :fields (set (for [field (keys parsed-rows)] (describe-table-field field (field parsed-rows))))}))) diff --git a/src/metabase/driver/mongo/util.clj b/src/metabase/driver/mongo/util.clj index 0999dfeec202314adcbed8a0fac2146db7e10485..0c4efb106d9690db185fc3a60efc3b90cd52c0cf 100644 --- a/src/metabase/driver/mongo/util.clj +++ b/src/metabase/driver/mongo/util.clj @@ -14,7 +14,7 @@ Don't set the timeout too low -- I've have Circle fail when the timeout was 1000ms on *one* occasion." - 1500) + 3000) (def ^:dynamic ^com.mongodb.DB *mongo-connection* "Connection to a Mongo database. diff --git a/src/metabase/metabot.clj b/src/metabase/metabot.clj index 339e275cd2ca8944d9790583461ace5d3f60c9b1..dde17faf4a2a48fdd3ee89aeaace6f399e5470df 100644 --- a/src/metabase/metabot.clj +++ b/src/metabase/metabot.clj @@ -235,7 +235,7 @@ This will spin up a background thread that opens and maintains a Slack WebSocket connection." [] (when (and (setting/get :slack-token) - (= "true" (setting/get :metabot-enabled))) + (= "true" (metabot-enabled))) (log/info "Starting MetaBot WebSocket monitor thread...") (start-websocket-monitor!))) diff --git a/src/metabase/routes.clj b/src/metabase/routes.clj index 4e61559e92991ff7e68a23147e19b6545c538543..856660a268c9d5a36eba17ff7108b3210cb72c56 100644 --- a/src/metabase/routes.clj +++ b/src/metabase/routes.clj @@ -10,7 +10,8 @@ (defn- index [_] (-> (if (@(resolve 'metabase.core/initialized?)) - (stencil/render-string (slurp (io/resource "frontend_client/index.html")) + (stencil/render-string (slurp (or (io/resource "frontend_client/index.html") + (throw (Exception. "Cannot find './resources/frontend_client/index.html'. Did you remember to build the Metabase frontend?")))) {:bootstrap_json (json/generate-string (setting/public-settings))}) (slurp (io/resource "frontend_client/init.html"))) resp/response diff --git a/src/metabase/util.clj b/src/metabase/util.clj index 081b13000d645dba7e05e9a12a52333ab5de6601..97f9ecc50ac1aad0abba2a5498c402adc2ba26d2 100644 --- a/src/metabase/util.clj +++ b/src/metabase/util.clj @@ -365,8 +365,9 @@ (when-let [^java.net.URL url (try (java.net.URL. string) (catch java.net.MalformedURLException _ nil))] - (and (re-matches #"^https?$" (.getProtocol url)) ; these are both automatically downcased - (re-matches #"^.+\..{2,}$" (.getAuthority url))))))) ; this is the part like 'google.com'. Make sure it contains at least one period and 2+ letter TLD + (when (and (.getProtocol url) (.getAuthority url)) + (and (re-matches #"^https?$" (.getProtocol url)) ; these are both automatically downcased + (re-matches #"^.+\..{2,}$" (.getAuthority url)))))))) ; this is the part like 'google.com'. Make sure it contains at least one period and 2+ letter TLD (def ^:private ^:const host-up-timeout "Timeout (in ms) for checking if a host is available with `host-up?` and `host-port-up?`." diff --git a/test/metabase/api/field_test.clj b/test/metabase/api/field_test.clj index f2a7a5a7ed38e1b159faff34d319a376f678f5aa..866cfdfca06d022cada23ff60151de106c895eaa 100644 --- a/test/metabase/api/field_test.clj +++ b/test/metabase/api/field_test.clj @@ -69,32 +69,56 @@ ;; ## PUT /api/field/:id -;; Check that we can update a Field -;; TODO - this should NOT be modifying a field from our test data, we should create new data to mess with -(tu/expect-eval-actual-first - (tu/match-$ (let [field (Field (id :venues :latitude))] - ;; this is sketchy. But return the Field back to its unmodified state so it won't affect other unit tests - (db/upd Field (id :venues :latitude) :special_type "latitude") - ;; match against the modified Field - field) - {:description nil - :table_id (id :venues) - :special_type "fk" - :name "LATITUDE" - :display_name "Latitude" - :updated_at $ - :active true - :id $ - :field_type "info" - :visibility_type "normal" - :position 0 - :preview_display true - :created_at $ - :base_type "FloatField" - :parent_id nil - :fk_target_field_id nil}) - ((user->client :crowberto) :put 200 (format "field/%d" (id :venues :latitude)) {:special_type :fk})) +(defn simple-field-details [field] + (select-keys field [:name :display_name :description :visibility_type :special_type])) + +;; test that we can do basic field update work, including unsetting some fields such as special-type +(expect + [{:name "Field Test" + :display_name "Field test" + :description nil + :special_type nil + :visibility_type :normal} + {:name "Field Test" + :display_name "yay" + :description "foobar" + :special_type :name + :visibility_type :sensitive} + {:name "Field Test" + :display_name "yay" + :description nil + :special_type nil + :visibility_type :sensitive}] + (tu/with-temp Database [{database-id :id} {:name "Field Test" + :engine :yeehaw + :details {} + :is_sample false}] + (tu/with-temp Table [{table-id :id} {:name "Field Test" + :db_id database-id + :active true}] + (tu/with-temp Field [{field-id :id} {:table_id table-id + :name "Field Test" + :base_type :TextField + :field_type :info + :special_type nil + :active true + :preview_display true + :position 1}] + (let [original-val (simple-field-details (db/sel :one Field :id field-id))] + ;; set it + ((user->client :crowberto) :put 200 (format "field/%d" field-id) {:name "something else" + :display_name "yay" + :description "foobar" + :special_type :name + :visibility_type :sensitive}) + (let [updated-val (simple-field-details (db/sel :one Field :id field-id))] + ;; unset it + ((user->client :crowberto) :put 200 (format "field/%d" field-id) {:description nil + :special_type nil}) + [original-val + updated-val + (simple-field-details (db/sel :one Field :id field-id))])))))) ;; when we set the special-type from :fk to something else, make sure fk_target_field_id is set to nil (expect @@ -130,6 +154,7 @@ [original-val (db/sel :one :field [Field :fk_target_field_id] :id field-id)])))))) +;; check that you can't set a field to :timestamp_seconds if it's not of a proper base_type (expect ["Invalid Request." nil] diff --git a/test/metabase/test/data/bigquery.clj b/test/metabase/test/data/bigquery.clj index e1d2e6e2e1c03de7623c17df4cc198bc8f5ab371..8b45a1db180999f03f9adb0acdd9c39b5e0dc28a 100644 --- a/test/metabase/test/data/bigquery.clj +++ b/test/metabase/test/data/bigquery.clj @@ -115,9 +115,9 @@ (.set data (name k) v)) (doto (TableDataInsertAllRequest$Rows.) (.setJson data)))))))) - ;; Wait up to 15 seconds for all the rows to be loaded and become available by BigQuery + ;; Wait up to 30 seconds for all the rows to be loaded and become available by BigQuery (let [expected-row-count (count row-maps)] - (loop [seconds-to-wait-for-load 15] + (loop [seconds-to-wait-for-load 30] (let [actual-row-count (table-row-count dataset-id table-id)] (cond (= expected-row-count actual-row-count) :ok @@ -182,13 +182,10 @@ (try (destroy-dataset! database-name) (catch Throwable _)) (create-dataset! database-name) - (u/pdoseq [tabledef table-definitions] + (doseq [tabledef table-definitions] (load-tabledef! database-name tabledef))) (println (u/format-color 'green "[OK]"))) -(defn- destroy-db! [{:keys [database-name]}] - #_(destroy-dataset! (normalize-name database-name))) - ;;; # ------------------------------------------------------------ IDatasetLoader ------------------------------------------------------------ @@ -198,4 +195,4 @@ {:engine (constantly :bigquery) :database->connection-details (u/drop-first-arg database->connection-details) :create-db! (u/drop-first-arg create-db!) - :destroy-db! (u/drop-first-arg destroy-db!)})) + :destroy-db! (constantly nil)})) diff --git a/test/metabase/util_test.clj b/test/metabase/util_test.clj index 44821c9e11ac8b5968507f0e4bbe1357fde68376..f3b3b1d2d26fbe1d7863aa3815cf79c23433de52 100644 --- a/test/metabase/util_test.clj +++ b/test/metabase/util_test.clj @@ -113,7 +113,7 @@ (expect false (is-url? "http://metabasecom")) ; no period / TLD (expect false (is-url? "http://.com")) ; no domain (expect false (is-url? "http://google.")) ; no TLD - +(expect false (is-url? "http:/")) ; nil .getAuthority needs to be handled or NullPointerException ;;; ## tests for RPARTIAL diff --git a/webpack.config.js b/webpack.config.js index 50c21f2c815ff2797dcb29168e38d8ff81eb1007..bd99a9c88af6f12aebce0906b01e58ad80028de4 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -139,7 +139,7 @@ var config = module.exports = { 'd3': __dirname + '/node_modules/d3/d3.min.js', 'crossfilter': __dirname + '/node_modules/crossfilter/index.js', 'dc': __dirname + '/node_modules/dc/dc.min.js', - 'humanize': __dirname + '/node_modules/humanize-plus/public/src/humanize.js' + 'humanize': __dirname + '/node_modules/humanize-plus/dist/humanize.min.js' } },