diff --git a/.gitignore b/.gitignore
index 3cb3f30..0eea798 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,7 +27,6 @@
## File-based project format:
*.iws
-/bindings/ppmp-java-binding/ppmp-java-binding.iml
## Plugin-specific files:
# IntelliJ
@@ -46,26 +45,11 @@ crashlytics-build.properties
fabric.properties
# Created by .ignore support plugin (hsz.mobi)
-servers/rest/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
-servers/rest/.settings/org.eclipse.wst.common.component
-servers/rest/.settings/org.eclipse.wst.ws.service.policy.prefs
-servers/rest/.settings/org.eclipse.wst.validation.prefs
-servers/rest/.settings/.jsdtscope
-servers/rest/.settings/org.eclipse.ltk.core.refactoring.prefs
-servers/rest/.settings/org.eclipse.m2e.wtp.prefs
-servers/rest/.settings/org.eclipse.wst.common.project.facet.core.xml
-servers/rest/.settings/org.eclipse.wst.jsdt.ui.superType.container
-servers/rest/.settings/org.eclipse.jdt.core.prefs
-servers/rest/.settings/org.eclipse.m2e.core.prefs
-servers/rest/.settings/org.eclipse.wst.jsdt.ui.superType.name
-bindings/ppmp-java-binding/.settings/
+
*.classpath
*.project
-servers/rest/target/
.settings/
*.log
-WebContent/META-INF/MANIFEST.MF
-*.gliffy
-*.svg
-servers/rest/bin/
-servers/rest/pom_tina.xml
+
+.sts4-cache/
+.vscode/
diff --git a/README.md b/README.md
index bf5b2fc..b275eb8 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-![Unide logo](images/logo.png)
+![Unide logo](website/static/logo.svg)
[Eclipse Unide](https://www.eclipse.org/unide) publishes the current version of Production Performance Management Protocol (PPMP) and develops simple server/client implementations. The implementations store the payloads in a database and displays them through a simple user interface. Everyone can then use these samples for their custom condition monitoring applications.
@@ -8,4 +8,47 @@ For installing the Unide server and binding implementations use Maven.
## Installation
-Run `mvn clean install`
\ No newline at end of file
+Install the `ppmp-java-binding` dependency
+
+ git clone https://github.com/eclipse/unide.java.git
+ cd unide.java
+ mvn clean install
+
+Then install this repo
+
+ git clone https://github.com/eclipse/unide.git
+ cd unide
+ mvn clean install
+
+On success
+
+ ...
+ [INFO] Reactor Summary:
+ [INFO]
+ [INFO] ppmp-schema 3.0.0-SNAPSHOT ......................... SUCCESS [ 1.058 s]
+ [INFO] Unide 0.3.0-SNAPSHOT ............................... SUCCESS [ 0.003 s]
+ [INFO] unide-servers ...................................... SUCCESS [ 0.003 s]
+ [INFO] unide-server 0.3.0-SNAPSHOT ........................ SUCCESS [ 28.981 s]
+ ...
+
+Build the jars
+
+ mvn package -Dmaven.test.skip=true
+
+Create a test configuration `application_conf.json` for the REST server
+
+ {
+ "http.port": 8090,
+ "persistence.enable": false
+ }
+
+Start the REST server
+
+ java -jar ./servers/rest/target/ppmp-server-0.3.0-SNAPSHOT.jar -conf application_conf.json
+
+Visit http://localhost:8090/
+
+
+## References
+
+- https://www.eclipse.org/unide/blog/2018/3/26/Release-0.2.0/
diff --git a/bindings/ppmp-java-binding/about.html b/bindings/ppmp-java-binding/about.html
deleted file mode 100644
index f4e8796..0000000
--- a/bindings/ppmp-java-binding/about.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-About
-
-
-About This Content
-
-January 1, 2017
-License
-
-The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
-indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
-at http://www.eclipse.org/legal/epl-v10.html .
-For purposes of the EPL, "Program" will mean the Content.
-
-If you did not receive this Content directly from the Eclipse Foundation, the Content is
-being redistributed by another party ("Redistributor") and different terms and conditions may
-apply to your use of any object code in the Content. Check the Redistributor's license that was
-provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content
-and such source code may be obtained at http://www.eclipse.org .
-
-
-
\ No newline at end of file
diff --git a/bindings/ppmp-java-binding/epl-v10.html b/bindings/ppmp-java-binding/epl-v10.html
deleted file mode 100644
index 70f5ee0..0000000
--- a/bindings/ppmp-java-binding/epl-v10.html
+++ /dev/null
@@ -1,268 +0,0 @@
-
-
-
-
-
-
-Eclipse Public License - Version 1.0
-
-
-
-
-
-
-Eclipse Public License - v 1.0
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
-PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
-DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
-AGREEMENT.
-
-1. DEFINITIONS
-
-"Contribution" means:
-
-a) in the case of the initial Contributor, the initial
-code and documentation distributed under this Agreement, and
-b) in the case of each subsequent Contributor:
-i) changes to the Program, and
-ii) additions to the Program;
-where such changes and/or additions to the Program
-originate from and are distributed by that particular Contributor. A
-Contribution 'originates' from a Contributor if it was added to the
-Program by such Contributor itself or anyone acting on such
-Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in
-conjunction with the Program under their own license agreement, and (ii)
-are not derivative works of the Program.
-
-"Contributor" means any person or entity that distributes
-the Program.
-
-"Licensed Patents" mean patent claims licensable by a
-Contributor which are necessarily infringed by the use or sale of its
-Contribution alone or when combined with the Program.
-
-"Program" means the Contributions distributed in accordance
-with this Agreement.
-
-"Recipient" means anyone who receives the Program under
-this Agreement, including all Contributors.
-
-2. GRANT OF RIGHTS
-
-a) Subject to the terms of this Agreement, each
-Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free copyright license to reproduce, prepare derivative works
-of, publicly display, publicly perform, distribute and sublicense the
-Contribution of such Contributor, if any, and such derivative works, in
-source code and object code form.
-
-b) Subject to the terms of this Agreement, each
-Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free patent license under Licensed Patents to make, use, sell,
-offer to sell, import and otherwise transfer the Contribution of such
-Contributor, if any, in source code and object code form. This patent
-license shall apply to the combination of the Contribution and the
-Program if, at the time the Contribution is added by the Contributor,
-such addition of the Contribution causes such combination to be covered
-by the Licensed Patents. The patent license shall not apply to any other
-combinations which include the Contribution. No hardware per se is
-licensed hereunder.
-
-c) Recipient understands that although each Contributor
-grants the licenses to its Contributions set forth herein, no assurances
-are provided by any Contributor that the Program does not infringe the
-patent or other intellectual property rights of any other entity. Each
-Contributor disclaims any liability to Recipient for claims brought by
-any other entity based on infringement of intellectual property rights
-or otherwise. As a condition to exercising the rights and licenses
-granted hereunder, each Recipient hereby assumes sole responsibility to
-secure any other intellectual property rights needed, if any. For
-example, if a third party patent license is required to allow Recipient
-to distribute the Program, it is Recipient's responsibility to acquire
-that license before distributing the Program.
-
-d) Each Contributor represents that to its knowledge it
-has sufficient copyright rights in its Contribution, if any, to grant
-the copyright license set forth in this Agreement.
-
-3. REQUIREMENTS
-
-A Contributor may choose to distribute the Program in object code
-form under its own license agreement, provided that:
-
-a) it complies with the terms and conditions of this
-Agreement; and
-
-b) its license agreement:
-
-i) effectively disclaims on behalf of all Contributors
-all warranties and conditions, express and implied, including warranties
-or conditions of title and non-infringement, and implied warranties or
-conditions of merchantability and fitness for a particular purpose;
-
-ii) effectively excludes on behalf of all Contributors
-all liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;
-
-iii) states that any provisions which differ from this
-Agreement are offered by that Contributor alone and not by any other
-party; and
-
-iv) states that source code for the Program is available
-from such Contributor, and informs licensees how to obtain it in a
-reasonable manner on or through a medium customarily used for software
-exchange.
-
-When the Program is made available in source code form:
-
-a) it must be made available under this Agreement; and
-
-b) a copy of this Agreement must be included with each
-copy of the Program.
-
-Contributors may not remove or alter any copyright notices contained
-within the Program.
-
-Each Contributor must identify itself as the originator of its
-Contribution, if any, in a manner that reasonably allows subsequent
-Recipients to identify the originator of the Contribution.
-
-4. COMMERCIAL DISTRIBUTION
-
-Commercial distributors of software may accept certain
-responsibilities with respect to end users, business partners and the
-like. While this license is intended to facilitate the commercial use of
-the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create
-potential liability for other Contributors. Therefore, if a Contributor
-includes the Program in a commercial product offering, such Contributor
-("Commercial Contributor") hereby agrees to defend and
-indemnify every other Contributor ("Indemnified Contributor")
-against any losses, damages and costs (collectively "Losses")
-arising from claims, lawsuits and other legal actions brought by a third
-party against the Indemnified Contributor to the extent caused by the
-acts or omissions of such Commercial Contributor in connection with its
-distribution of the Program in a commercial product offering. The
-obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In
-order to qualify, an Indemnified Contributor must: a) promptly notify
-the Commercial Contributor in writing of such claim, and b) allow the
-Commercial Contributor to control, and cooperate with the Commercial
-Contributor in, the defense and any related settlement negotiations. The
-Indemnified Contributor may participate in any such claim at its own
-expense.
-
-For example, a Contributor might include the Program in a commercial
-product offering, Product X. That Contributor is then a Commercial
-Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance
-claims and warranties are such Commercial Contributor's responsibility
-alone. Under this section, the Commercial Contributor would have to
-defend claims against the other Contributors related to those
-performance claims and warranties, and if a court requires any other
-Contributor to pay any damages as a result, the Commercial Contributor
-must pay those damages.
-
-5. NO WARRANTY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
-PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
-ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
-OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and
-distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to
-the risks and costs of program errors, compliance with applicable laws,
-damage to or loss of data, programs or equipment, and unavailability or
-interruption of operations.
-
-6. DISCLAIMER OF LIABILITY
-
-EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
-NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
-WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
-DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
-HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. GENERAL
-
-If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of
-the remainder of the terms of this Agreement, and without further action
-by the parties hereto, such provision shall be reformed to the minimum
-extent necessary to make such provision valid and enforceable.
-
-If Recipient institutes patent litigation against any entity
-(including a cross-claim or counterclaim in a lawsuit) alleging that the
-Program itself (excluding combinations of the Program with other
-software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the
-date such litigation is filed.
-
-All Recipient's rights under this Agreement shall terminate if it
-fails to comply with any of the material terms or conditions of this
-Agreement and does not cure such failure in a reasonable period of time
-after becoming aware of such noncompliance. If all Recipient's rights
-under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive.
-
-Everyone is permitted to copy and distribute copies of this
-Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The
-Agreement Steward reserves the right to publish new versions (including
-revisions) of this Agreement from time to time. No one other than the
-Agreement Steward has the right to modify this Agreement. The Eclipse
-Foundation is the initial Agreement Steward. The Eclipse Foundation may
-assign the responsibility to serve as the Agreement Steward to a
-suitable separate entity. Each new version of the Agreement will be
-given a distinguishing version number. The Program (including
-Contributions) may always be distributed subject to the version of the
-Agreement under which it was received. In addition, after a new version
-of the Agreement is published, Contributor may elect to distribute the
-Program (including its Contributions) under the new version. Except as
-expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
-rights or licenses to the intellectual property of any Contributor under
-this Agreement, whether expressly, by implication, estoppel or
-otherwise. All rights in the Program not expressly granted under this
-Agreement are reserved.
-
-This Agreement is governed by the laws of the State of New York and
-the intellectual property laws of the United States of America. No party
-to this Agreement will bring a legal action under this Agreement more
-than one year after the cause of action arose. Each party waives its
-rights to a jury trial in any resulting litigation.
-
-
-
-
-
\ No newline at end of file
diff --git a/bindings/ppmp-java-binding/notice.html b/bindings/ppmp-java-binding/notice.html
deleted file mode 100644
index c417e6f..0000000
--- a/bindings/ppmp-java-binding/notice.html
+++ /dev/null
@@ -1,163 +0,0 @@
-
-
-
-
-Eclipse Foundation Software User Agreement
-
-
-
-Eclipse Foundation Software User Agreement
-April 9, 2014
-
-Usage Of Content
-
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
- (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
- CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
- OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
- NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
- CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.
-
-Applicable Licenses
-
-Unless otherwise indicated, all Content made available by the Eclipse
- Foundation is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0
- ("EPL"). A copy of the EPL is provided with this Content and is also
- available at http://www.eclipse.org/legal/epl-v10.html .
- For purposes of the EPL, "Program" will mean the Content.
-
-Content includes, but is not limited to, source code, object code,
-documentation and other files maintained in the Eclipse Foundation
-source code
- repository ("Repository") in software modules ("Modules") and made
-available as downloadable archives ("Downloads").
-
-
- Content may be structured and packaged into modules to
-facilitate delivering, extending, and upgrading the Content. Typical
-modules may include plug-ins ("Plug-ins"), plug-in fragments
-("Fragments"), and features ("Features").
- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".
- A Feature is a bundle of one or more Plug-ins and/or
-Fragments and associated material. Each Feature may be packaged as a
-sub-directory in a directory named "features". Within a Feature, files
-named "feature.xml" may contain a list of the names and version numbers
-of the Plug-ins
- and/or Fragments associated with that Feature.
- Features may also include other Features ("Included
-Features"). Within a Feature, files named "feature.xml" may contain a
-list of the names and version numbers of Included Features.
-
-
-The terms and conditions governing Plug-ins and Fragments should be
-contained in files named "about.html" ("Abouts"). The terms and
-conditions governing Features and
-Included Features should be contained in files named "license.html"
-("Feature Licenses"). Abouts and Feature Licenses may be located in any
- directory of a Download or Module
-including, but not limited to the following locations:
-
-
- The top-level (root) directory
- Plug-in and Fragment directories
- Inside Plug-ins and Fragments packaged as JARs
- Sub-directories of the directory named "src" of certain Plug-ins
- Feature directories
-
-
-Note: if a Feature made available by the Eclipse Foundation is
-installed using the Provisioning Technology (as defined below), you must
- agree to a license ("Feature Update License") during the
-installation process. If the Feature contains Included Features, the
-Feature Update License should either provide you with the terms and
-conditions governing the Included Features or
-inform you where you can locate them. Feature Update Licenses may be
-found in the "license" property of files named "feature.properties"
-found within a Feature.
-Such Abouts, Feature Licenses, and Feature Update Licenses contain the
-terms and conditions (or references to such terms and conditions) that
-govern your use of the associated Content in
-that directory.
-
-THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
- SOME OF THESE
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):
-
-
-
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
-CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
-or Feature Update License is provided, please
-contact the Eclipse Foundation to determine what terms and conditions
-govern that particular Content.
-
-
-Use of Provisioning Technology
-
-The Eclipse Foundation makes available provisioning software,
-examples of which include, but are not limited to, p2 and the Eclipse
- Update Manager ("Provisioning Technology") for the purpose of
-allowing users to install software, documentation, information and/or
- other materials (collectively "Installable Software"). This
-capability is provided with the intent of allowing such users to
- install, extend and update Eclipse-based products. Information about
-packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html
- ("Specification").
-
-You may use Provisioning Technology to allow other parties to install
- Installable Software. You shall be responsible for enabling the
- applicable license agreements relating to the Installable Software to
- be presented to, and accepted by, the users of the Provisioning
-Technology
- in accordance with the Specification. By using Provisioning
-Technology in such a manner and making it available in accordance with
-the
- Specification, you further acknowledge your agreement to, and the
-acquisition of all necessary rights to permit the following:
-
-
- A series of actions may occur ("Provisioning Process") in
-which a user may execute the Provisioning Technology
- on a machine ("Target Machine") with the intent of installing,
-extending or updating the functionality of an Eclipse-based
- product.
- During the Provisioning Process, the Provisioning Technology
-may cause third party Installable Software or a portion thereof to be
- accessed and copied to the Target Machine.
- Pursuant to the Specification, you will provide to the user
-the terms and conditions that govern the use of the Installable
- Software ("Installable Software Agreement") and such Installable
-Software Agreement shall be accessed from the Target
- Machine in accordance with the Specification. Such Installable
-Software Agreement must inform the user of the terms and conditions that
- govern
- the Installable Software and must solicit acceptance by the end
-user in the manner prescribed in such Installable Software Agreement.
-Upon such
- indication of agreement by the user, the provisioning Technology
-will complete installation of the Installable Software.
-
-
-Cryptography
-
-Content may contain encryption software. The country in which you are
- currently may have restrictions on the import, possession, and use,
-and/or re-export to
- another country, of encryption software. BEFORE using any encryption
-software, please check the country's laws, regulations and policies
-concerning the import,
- possession, or use, and re-export of encryption software, to see if
-this is permitted.
-
-Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
-
-
-
\ No newline at end of file
diff --git a/bindings/ppmp-java-binding/pom.xml b/bindings/ppmp-java-binding/pom.xml
deleted file mode 100644
index e308521..0000000
--- a/bindings/ppmp-java-binding/pom.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
- 4.0.0
-
- org.eclipse.iot.unide.ppmp
- ppmp-java-binding
- 1.0.0-SNAPSHOT
-
-
- 2.8.2
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
- UTF-8
- true
-
-
-
-
-
-
-
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson.version}
-
-
- com.fasterxml.jackson.core
- jackson-annotations
- ${jackson.version}
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
- ${jackson.version}
-
-
- junit
- junit
- 4.12
- test
-
-
- org.skyscreamer
- jsonassert
- 1.4.0
- test
-
-
- commons-io
- commons-io
- 2.5
- test
-
-
-
\ No newline at end of file
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/PPMPPackager.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/PPMPPackager.java
deleted file mode 100644
index 3132077..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/PPMPPackager.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp;
-
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-
-import org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper;
-import org.eclipse.iot.unide.ppmp.messages.MessagesWrapper;
-import org.eclipse.iot.unide.ppmp.process.ProcessWrapper;
-
-import java.io.IOException;
-
-public class PPMPPackager {
-
- private ObjectMapper mapper;
-
- public PPMPPackager() {
- mapper = new ObjectMapper();
-
- mapper.enable(DeserializationFeature. ACCEPT_SINGLE_VALUE_AS_ARRAY);
- mapper.registerModule(new JavaTimeModule());
-
- mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
- mapper.setSerializationInclusion(Include.NON_NULL);
- }
-
- public String getMessage(Object jsonBean) throws IOException {
- String json = mapper.writeValueAsString(jsonBean);
- return json;
- }
-
- public String getMessage(Object jsonBean, boolean indentOutput) throws JsonProcessingException {
- mapper = setJsonFormat(mapper, indentOutput);
- String json = mapper.writeValueAsString(jsonBean);
- return json;
- }
-
- private ObjectMapper setJsonFormat(ObjectMapper mapper, boolean indentOutput) {
- mapper.configure(SerializationFeature.INDENT_OUTPUT, indentOutput);
- return mapper;
- }
-
- public MessagesWrapper getMessagesBean(String jsonString) throws IOException {
- MessagesWrapper bean = null;
- bean = mapper.readValue(jsonString, MessagesWrapper.class);
- return bean;
- }
-
- public MeasurementsWrapper getMeasurementsBean(String jsonString) throws IOException {
- MeasurementsWrapper bean = null;
- bean = mapper.readValue(jsonString, MeasurementsWrapper.class);
- return bean;
- }
-
- public ProcessWrapper getProcessesBean(String jsonString) throws IOException {
- ProcessWrapper bean = null;
- bean = mapper.readValue(jsonString, ProcessWrapper.class);
- return bean;
- }
-}
-
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/commons/Device.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/commons/Device.java
deleted file mode 100644
index cc06f1e..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/commons/Device.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.commons;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Device {
- @JsonProperty("deviceID")
- private String deviceID;
-
- @JsonProperty("operationalStatus")
- private String operationalStatus; // optional
-
- @JsonProperty("metaData")
- private MetaData metaData; // optional
-
- public String getDeviceID() {
- return deviceID;
- }
-
- public void setDeviceID(String deviceID) {
- this.deviceID = deviceID;
- }
-
- public String getOperationalStatus() {
- return operationalStatus;
- }
-
- public void setOperationalStatus(String operationalStatus) {
- this.operationalStatus = operationalStatus;
- }
-
- public MetaData getMetaData() {
- return metaData;
- }
-
- public void setMetaData(MetaData metaData) {
- this.metaData = metaData;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/commons/MetaData.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/commons/MetaData.java
deleted file mode 100644
index ce6fbc8..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/commons/MetaData.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.commons;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-
-public class MetaData {
- private Map metaData = new HashMap<>();
-
- @JsonAnyGetter
- public Map getMetaData() {
- return metaData;
- }
-
- @JsonAnySetter
- public void setMetaDataValue(String name, String value) {
- metaData.put(name, value);
- }
-
- public void setMetaData(Map metaData) {
- this.metaData = metaData;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/mapper/SingleValueAsArrayUnwrapper.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/mapper/SingleValueAsArrayUnwrapper.java
deleted file mode 100644
index 1c4f2c4..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/mapper/SingleValueAsArrayUnwrapper.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.eclipse.iot.unide.ppmp.mapper;
-
-import java.io.IOException;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.SerializerProvider;
-
-public class SingleValueAsArrayUnwrapper extends JsonSerializer {
-
- @Override
- public void serialize(Object object, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
- if (!serializerProvider.getConfig().isEnabled(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)) {
- new ObjectMapper().enable(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED).writeValue(jsonGenerator, object);
- } else {
- jsonGenerator.writeObject(object);
- }
- }
-
- }
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/Limits.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/Limits.java
deleted file mode 100644
index 4ffb91b..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/Limits.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.measurements;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Limits {
- @JsonProperty("upperError")
- private Number upperError; // optional
-
- @JsonProperty("lowerError")
- private Number lowerError; // optional
-
- @JsonProperty("upperWarn")
- private Number upperWarn; // optional
-
- @JsonProperty("lowerWarn")
- private Number lowerWarn; // optional
-
- public Number getUpperError() {
- return upperError;
- }
-
- public void setUpperError(Number upperError) {
- this.upperError = upperError;
- }
-
- public Number getLowerError() {
- return lowerError;
- }
-
- public void setLowerError(Number lowerError) {
- this.lowerError = lowerError;
- }
-
- public Number getUpperWarn() {
- return upperWarn;
- }
-
- public void setUpperWarn(Number upperWarn) {
- this.upperWarn = upperWarn;
- }
-
- public Number getLowerWarn() {
- return lowerWarn;
- }
-
- public void setLowerWarn(Number lowerWarn) {
- this.lowerWarn = lowerWarn;
- }
-
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/LimitsMap.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/LimitsMap.java
deleted file mode 100644
index ffef6e2..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/LimitsMap.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.measurements;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-
-public class LimitsMap {
- private Map limits = new HashMap<>();
-
- @JsonAnyGetter
- public Map getLimits() {
- return limits;
- }
-
- @JsonAnySetter
- public void setLimitsValue(String name, Limits value) {
- limits.put(name, value);
- }
-
- public void setLimits(Map limits) {
- this.limits = limits;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/Measurements.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/Measurements.java
deleted file mode 100644
index d8d10a8..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/Measurements.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.measurements;
-
-import java.time.OffsetDateTime;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Measurements {
- public enum Result {
- OK, NOK, UNKNOWN
- };
-
- @JsonProperty("ts")
- private OffsetDateTime timestamp;
-
- @JsonProperty("result")
- private Result result; // optional
-
- @JsonProperty("code")
- private String code; // optional
-
- @JsonProperty("limits")
- private LimitsMap limitsMap;
-
- @JsonProperty("series")
- private SeriesMap seriesMap;
-
- public OffsetDateTime getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(OffsetDateTime timestamp) {
- this.timestamp = timestamp;
- }
-
- public Result getResult() {
- return result;
- }
-
- public void setResult(Result result) {
- this.result = result;
- }
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public LimitsMap getLimitsMap() {
- return limitsMap;
- }
-
- public void setLimitsMap(LimitsMap limits) {
- this.limitsMap = limits;
- }
-
- public SeriesMap getSeriesMap() {
- return seriesMap;
- }
-
- public void setSeriesMap(SeriesMap series) {
- this.seriesMap = series;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/MeasurementsWrapper.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/MeasurementsWrapper.java
deleted file mode 100644
index af86719..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/MeasurementsWrapper.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.measurements;
-
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.eclipse.iot.unide.ppmp.commons.Device;
-
-public class MeasurementsWrapper {
- @JsonProperty("content-spec")
- private final String contentSpec = "urn:spec://eclipse.org/unide/measurement-message#v2";
-
- @JsonProperty("device")
- private Device device;
-
- @JsonProperty("part")
- private Part part; // optional
-
- @JsonProperty("measurements")
- private List measurements;
-
- public String getContentSpec() {
- return contentSpec;
- }
-
- public Device getDevice() {
- return device;
- }
-
- public void setDevice(Device device) {
- this.device = device;
- }
-
- public Part getPart() {
- return part;
- }
-
- public void setPart(Part part) {
- this.part = part;
- }
-
- public List getMeasurements() {
- return measurements;
- }
-
- public void setMeasurements(List measurements) {
- this.measurements = measurements;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/Part.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/Part.java
deleted file mode 100644
index e98a282..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/Part.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.measurements;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.eclipse.iot.unide.ppmp.commons.MetaData;
-import org.eclipse.iot.unide.ppmp.measurements.Measurements.Result;
-
-public class Part {
- @JsonProperty("partTypeID")
- private String partTypeID; // optional
-
- @JsonProperty("partID")
- private String partID; // optional
-
- @JsonProperty("result")
- private Result result; // optional
-
- @JsonProperty("code")
- private String code; // optional
-
- @JsonProperty("metaData")
- private MetaData metaData; // optional
-
- public String getPartTypeID() {
- return partTypeID;
- }
-
- public void setPartTypeID(String partTypeID) {
- this.partTypeID = partTypeID;
- }
-
- public String getPartID() {
- return partID;
- }
-
- public void setPartID(String partID) {
- this.partID = partID;
- }
-
- public Result getResult() {
- return result;
- }
-
- public void setResult(Result result) {
- this.result = result;
- }
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public MetaData getMetaData() {
- return metaData;
- }
-
- public void setMetaData(MetaData metaData) {
- this.metaData = metaData;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/SeriesMap.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/SeriesMap.java
deleted file mode 100644
index 8f386b4..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/measurements/SeriesMap.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.measurements;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-
-public class SeriesMap {
- private Map> series = new HashMap<>();
-
- public SeriesMap(){
-
- }
-
- @JsonAnyGetter
- public Map> getSeries() {
- return series;
- }
-
- /**
- * To represents the time sequence of a measurement, add an entry with
- * "$_time" as a key. Its values are relative time-offsets to the given
- * timestamp. Please refer to the documentation of the interface for
- * details.
- */
- @JsonAnySetter
- public void setSeriesValue(String name, List value) {
- series.put(name, value);
- }
-
- public void setSeries(Map> series) {
- this.series = series;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/messages/Message.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/messages/Message.java
deleted file mode 100644
index fb883c4..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/messages/Message.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.messages;
-
-import java.time.OffsetDateTime;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.eclipse.iot.unide.ppmp.commons.MetaData;
-
-public class Message {
- public enum MessageType {
- DEVICE, TECHNICAL_INFO // default DEVICE
- };
-
- public enum MessageSeverity {
- HIGH, MEDIUM, LOW, UNKNOWN // default UNKNOWN
- };
-
- @JsonProperty("origin")
- private String origin; // optional
-
- @JsonProperty("ts")
- private OffsetDateTime timestamp;
-
- @JsonProperty("type")
- private MessageType type; // optional
-
- @JsonProperty("severity")
- private MessageSeverity severity = MessageSeverity.UNKNOWN; // optional
-
- @JsonProperty("code")
- private String code;
-
- @JsonProperty("title")
- private String title; // optional
-
- @JsonProperty("description")
- private String description; // optional
-
- @JsonProperty("hint")
- private String hint; // optional
-
- @JsonProperty("metaData")
- private MetaData metaData; // optional
-
- public String getOrigin() {
- return origin;
- }
-
- public void setOrigin(String origin) {
- this.origin = origin;
- }
-
- public String getHint() {
- return hint;
- }
-
- public void setHint(String hint) {
- this.hint = hint;
- }
-
- public OffsetDateTime getTimestamp() {
- return timestamp;
- }
-
- public MessageType getType() {
- return type;
- }
-
- public MessageSeverity getSeverity() {
- return severity;
- }
-
- public String getCode() {
- return code;
- }
-
- public String getTitle() {
- return title;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setTimestamp(OffsetDateTime timestamp) {
- this.timestamp = timestamp;
- }
-
- public void setType(MessageType type) {
- this.type = type;
- }
-
- public void setSeverity(MessageSeverity severity) {
- this.severity = severity;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public MetaData getMetaData() {
- return metaData;
- }
-
- public void setMetaData(MetaData metaData) {
- this.metaData = metaData;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/messages/MessagesWrapper.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/messages/MessagesWrapper.java
deleted file mode 100644
index 256b889..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/messages/MessagesWrapper.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.eclipse.iot.unide.ppmp.messages;
-
-import java.util.List;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.eclipse.iot.unide.ppmp.commons.Device;
-
-public class MessagesWrapper {
- @JsonProperty("content-spec")
- private final String contentSpec = "urn:spec://eclipse.org/unide/machine-message#v2";
-
- @JsonProperty("device")
- private Device device;
-
- @JsonProperty("messages")
- private List messages;
-
- public Device getDevice() {
- return device;
- }
-
- public void setDevice(Device device) {
- this.device = device;
- }
-
- public List getMessages() {
- return messages;
- }
-
- public void setMessages(List messages) {
- this.messages = messages;
- }
-
- public String getContentSpec() {
- return contentSpec;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Limits.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Limits.java
deleted file mode 100644
index 29727fe..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Limits.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.iot.unide.ppmp.mapper.SingleValueAsArrayUnwrapper;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-public class Limits {
-
- @JsonProperty("upperError")
- @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
- @JsonSerialize(using = SingleValueAsArrayUnwrapper.class)
- private List upperError; // optional
-
- @JsonProperty("lowerError")
- @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
- @JsonSerialize(using = SingleValueAsArrayUnwrapper.class)
- private List lowerError; // optional
-
- @JsonProperty("upperWarn")
- @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
- @JsonSerialize(using = SingleValueAsArrayUnwrapper.class)
- private List upperWarn; // optional
-
- @JsonProperty("lowerWarn")
- @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
- @JsonSerialize(using = SingleValueAsArrayUnwrapper.class)
- private List lowerWarn; // optional
-
- @JsonProperty("target")
- @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
- @JsonSerialize(using = SingleValueAsArrayUnwrapper.class)
- private List target; // optional
-
- public List getUpperError() {
- return upperError;
- }
-
- public void setUpperError(List upperError) {
- this.upperError = upperError;
- }
-
- public void setUpperErrorSingleValue(Number upperError) {
- this.upperError = Arrays.asList(upperError);
- }
-
- public List getLowerError() {
- return lowerError;
- }
-
- public void setLowerError(List lowerError) {
- this.lowerError = lowerError;
- }
-
- public void setLowerErrorSingleValue(Number lowerError) {
- this.lowerError = Arrays.asList(lowerError);
- }
-
-
- public List getUpperWarn() {
- return upperWarn;
- }
-
- public void setUpperWarn(List upperWarn) {
- this.upperWarn = upperWarn;
- }
-
- public void setUpperWarnSingleValue(Number upperWarn) {
- this.upperWarn = Arrays.asList(upperWarn);
- }
-
-
- public List getLowerWarn() {
- return lowerWarn;
- }
-
- public void setLowerWarn(List lowerWarn) {
- this.lowerWarn = lowerWarn;
- }
-
- public void setLowerWarnSingleValue(Number lowerWarn) {
- this.lowerWarn = Arrays.asList(lowerWarn);
- }
-
- public List getTarget() {
- return target;
- }
-
- public void setTarget(List target) {
- this.target = target;
- }
-
- public void setTargetSingleValue(Number target) {
- this.target = Arrays.asList(target);
- }
-
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/LimitsMap.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/LimitsMap.java
deleted file mode 100644
index d76f250..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/LimitsMap.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-
-public class LimitsMap {
- private Map limits = new HashMap<>();
-
- @JsonAnyGetter
- public Map getLimits() {
- return limits;
- }
-
- @JsonAnySetter
- public void setLimitsValue(String name, Limits value) {
- limits.put(name, value);
- }
-
- public void setLimits(Map limits) {
- this.limits = limits;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Measurements.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Measurements.java
deleted file mode 100644
index abb967b..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Measurements.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import java.time.OffsetDateTime;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Measurements {
- public enum Result {
- OK, NOK, UNKNOWN
- };
-
- @JsonProperty("ts")
- private OffsetDateTime timestamp;
-
- @JsonProperty("phase")
- private String phase;
-
- @JsonProperty("name")
- private String name;
-
- @JsonProperty("result")
- private Result result; // optional
-
- @JsonProperty("code")
- private String code; // optional
-
- @JsonProperty("limits")
- private LimitsMap limitsMap; // optional
-
- @JsonProperty("series")
- private SeriesMap seriesMap;
-
- @JsonProperty("specialValues")
- private SpecialValueMap specialValues;
-
- public OffsetDateTime getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(OffsetDateTime timestamp) {
- this.timestamp = timestamp;
- }
-
- public Result getResult() {
- return result;
- }
-
- public void setResult(Result result) {
- this.result = result;
- }
-
- public String getPhase() {
- return phase;
- }
-
- public void setPhase(String phase) {
- this.phase = phase;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public LimitsMap getLimitsMap() {
- return limitsMap;
- }
-
- public void setLimitsMap(LimitsMap limits) {
- this.limitsMap = limits;
- }
-
- public SeriesMap getSeriesMap() {
- return seriesMap;
- }
-
- public void setSeriesMap(SeriesMap series) {
- this.seriesMap = series;
- }
-
- public SpecialValueMap getSpecialValues() {
- return specialValues;
- }
-
- public void setSpecialValues(SpecialValueMap specialValues) {
- this.specialValues = specialValues;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Part.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Part.java
deleted file mode 100644
index b40c4eb..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Part.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.eclipse.iot.unide.ppmp.commons.MetaData;
-
-public class Part {
-
- public enum Result {
- OK, NOK, UNKNOWN
- };
-
- public enum Type {
- SINGLE, BATCH
- };
-
- @JsonProperty("partTypeID")
- private String partTypeID; // optional
-
- @JsonProperty("partID")
- private String partID;
-
- @JsonProperty("type")
- private Type type; // optional
-
- @JsonProperty("result")
- private Result result; // optional
-
- @JsonProperty("code")
- private String code; // optional
-
- @JsonProperty("metaData")
- private MetaData metaData; // optional
-
- public String getPartTypeId() {
- return partTypeID;
- }
-
- public void setPartTypeID(String partTypeID) {
- this.partTypeID = partTypeID;
- }
-
- public String getpartID() {
- return partID;
- }
-
- public void setPartID(String partID) {
- this.partID = partID;
- }
-
- public Result getResult() {
- return result;
- }
-
- public void setResult(Result result) {
- this.result = result;
- }
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public MetaData getMetaData() {
- return metaData;
- }
-
- public void setMetaData(MetaData metaData) {
- this.metaData = metaData;
- }
-
- public Type getType() {
- return type;
- }
-
- public void setType(Type type) {
- this.type = type;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Process.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Process.java
deleted file mode 100644
index 35b5638..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Process.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import java.time.OffsetDateTime;
-
-import org.eclipse.iot.unide.ppmp.commons.MetaData;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Process {
-
- public enum Result {
- OK, NOK, UNKNOWN
- };
-
- @JsonProperty("ts")
- private OffsetDateTime timestamp;
-
- @JsonProperty("result")
- private Result result; // optional
-
- @JsonProperty("externalProcessId")
- private String externalProcessId; // optional
-
- @JsonProperty("shutoffPhase")
- private String shutoffPhase; // optional
-
- @JsonProperty("program")
- private Program program; // optional
-
- @JsonProperty("shutoffValues")
- private ShutOffValuesMap shutOffValuesMap; // optional
-
- @JsonProperty("metaData")
- private MetaData metaData; // optional
-
- public OffsetDateTime getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(OffsetDateTime timestamp) {
- this.timestamp = timestamp;
- }
-
- public Result getResult() {
- return result;
- }
-
- public void setResult(Result result) {
- this.result = result;
- }
-
- public String getExternalProcessId() {
- return externalProcessId;
- }
-
- public void setExternalProcessId(String externalProcessId) {
- this.externalProcessId = externalProcessId;
- }
-
- public String getShutoffPhase() {
- return shutoffPhase;
- }
-
- public void setShutoffPhase(String shutoffPhase) {
- this.shutoffPhase = shutoffPhase;
- }
-
- public ShutOffValuesMap getShutOffValuesMap() {
- return shutOffValuesMap;
- }
-
- public void setShutOffValuesMap(ShutOffValuesMap shutOffValues) {
- this.shutOffValuesMap = shutOffValues;
- }
-
- public Program getProgram() {
- return program;
- }
-
- public void setProgram(Program program) {
- this.program = program;
- }
-
- public MetaData getMetaData() {
- return metaData;
- }
-
- public void setMetaData(MetaData metaData) {
- this.metaData = metaData;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/ProcessWrapper.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/ProcessWrapper.java
deleted file mode 100644
index c1091ce..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/ProcessWrapper.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import java.util.List;
-
-import org.eclipse.iot.unide.ppmp.commons.Device;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ProcessWrapper {
- @JsonProperty("content-spec")
- private final String contentSpec = "urn:spec://eclipse.org/unide/process-message#v2";
-
- @JsonProperty("device")
- private Device device;
-
- @JsonProperty("part")
- private Part part; // optional
-
- @JsonProperty("measurements")
- private List measurements;
-
- @JsonProperty("process")
- private Process process; // optional
-
- public String getContentSpec() {
- return contentSpec;
- }
-
- public Device getDevice() {
- return device;
- }
-
- public void setDevice(Device device) {
- this.device = device;
- }
-
- public Part getPart() {
- return part;
- }
-
- public void setPart(Part part) {
- this.part = part;
- }
-
- public Process getProcess() {
- return process;
- }
-
- public void setProcess(Process process) {
- this.process = process;
- }
-
- public List getMeasurements() {
- return measurements;
- }
-
- public void setMeasurements(List measurements) {
- this.measurements = measurements;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Program.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Program.java
deleted file mode 100644
index 5326d2f..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/Program.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Program {
- @JsonProperty("name")
- private String name; // optional
-
- @JsonProperty("id")
- private String id; // optional
-
- @JsonProperty("lastChangedDate")
- private String lastChangedDate; // optional
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getLastChangedDate() {
- return lastChangedDate;
- }
-
- public void setLastChangedDate(String lastChangedDate) {
- this.lastChangedDate = lastChangedDate;
- }
-
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/SeriesMap.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/SeriesMap.java
deleted file mode 100644
index 0c01509..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/SeriesMap.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-
-public class SeriesMap {
- private Map> series = new HashMap<>();
-
- public SeriesMap(){
-
- }
-
- @JsonAnyGetter
- public Map> getSeries() {
- return series;
- }
-
- /**
- * To represents the time sequence of a measurement, add an entry with
- * "$_time" as a key. Its values are relative time-offsets to the given
- * timestamp. Please refer to the documentation of the interface for
- * details.
- */
- @JsonAnySetter
- public void setSeriesValue(String name, List value) {
- series.put(name, value);
- }
-
- public void setSeries(Map> series) {
- this.series = series;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/ShutOffValues.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/ShutOffValues.java
deleted file mode 100644
index 47d9db4..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/ShutOffValues.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import java.time.OffsetDateTime;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ShutOffValues {
- @JsonProperty("upperError")
- private Number upperError; // optional
-
- @JsonProperty("lowerError")
- private Number lowerError; // optional
-
- @JsonProperty("value")
- private Number value; // optional
-
- @JsonProperty("ts")
- private OffsetDateTime timestamp; // optional
-
- public Number getUpperError() {
- return upperError;
- }
-
- public void setUpperError(Number upperError) {
- this.upperError = upperError;
- }
-
- public Number getLowerError() {
- return lowerError;
- }
-
- public void setLowerError(Number lowerError) {
- this.lowerError = lowerError;
- }
-
- public Number getValue() {
- return value;
- }
-
- public void setValue(Number value) {
- this.value = value;
- }
-
- public OffsetDateTime getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(OffsetDateTime timestamp) {
- this.timestamp = timestamp;
- }
-
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/ShutOffValuesMap.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/ShutOffValuesMap.java
deleted file mode 100644
index aa4c8c5..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/ShutOffValuesMap.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-
-public class ShutOffValuesMap {
- private Map shutOffValues = new HashMap<>();
-
- @JsonAnyGetter
- public Map getShutOffValues() {
- return shutOffValues;
- }
-
- @JsonAnySetter
- public void setShutOffValue(String name, ShutOffValues value) {
- shutOffValues.put(name, value);
- }
-
- public void setShutOffValues(Map shutOffValues) {
- this.shutOffValues = shutOffValues;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/SpecialValue.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/SpecialValue.java
deleted file mode 100644
index b8e9ab2..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/SpecialValue.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class SpecialValue {
-
- @JsonProperty("time")
- private Number time; // optional
-
- @JsonProperty("value")
- private Number value; // optional
-
- public Number getTime() {
- return time;
- }
-
- public void setTime(Number time) {
- this.time = time;
- }
-
- public Number getValue() {
- return value;
- }
-
- public void setValue(Number value) {
- this.value = value;
- }
-
-}
diff --git a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/SpecialValueMap.java b/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/SpecialValueMap.java
deleted file mode 100644
index f05a7f3..0000000
--- a/bindings/ppmp-java-binding/src/main/java/org/eclipse/iot/unide/ppmp/process/SpecialValueMap.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp.process;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-
-public class SpecialValueMap {
- private Map specialValues = new HashMap<>();
-
- @JsonAnyGetter
- public Map getSpecialValue() {
- return specialValues;
- }
-
- @JsonAnySetter
- public void setSpecialValue(String name, SpecialValue value) {
- specialValues.put(name, value);
- }
-
- public void setSpecialValue(Map specialValues) {
- this.specialValues = specialValues;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/test/java/org/eclipse/iot/unide/ppmp/MeasurementsTest.java b/bindings/ppmp-java-binding/src/test/java/org/eclipse/iot/unide/ppmp/MeasurementsTest.java
deleted file mode 100644
index 9e06790..0000000
--- a/bindings/ppmp-java-binding/src/test/java/org/eclipse/iot/unide/ppmp/MeasurementsTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp;
-
-
-
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-
-import org.apache.commons.io.IOUtils;
-import org.eclipse.iot.unide.ppmp.commons.Device;
-import org.eclipse.iot.unide.ppmp.commons.MetaData;
-import org.eclipse.iot.unide.ppmp.measurements.*;
-import org.json.JSONException;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.skyscreamer.jsonassert.JSONAssert;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.time.OffsetDateTime;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class MeasurementsTest {
-
- private static final String TEST_FILE_NAME = "measurement.json";
- private static String MEASUREMENT_TEST_MESSAGE;
-
- @BeforeClass
- public static void readFileContent() throws IOException {
- ClassLoader classLoader = MeasurementsTest.class.getClassLoader();
- MEASUREMENT_TEST_MESSAGE = IOUtils.toString(classLoader.getResourceAsStream(TEST_FILE_NAME), Charset.defaultCharset());
- }
-
- @Test
- public void convertFullMeasurementsExampleToJson() throws JsonGenerationException, JsonMappingException, IOException, JSONException {
- PPMPPackager packager = new PPMPPackager();
- MeasurementsWrapper wrapper = createMeasurementsWrapperWithFullData();
- String result = packager.getMessage(wrapper, true);
-
- JSONAssert.assertEquals(MEASUREMENT_TEST_MESSAGE, result, false);
- }
-
- @Test
- public void convertMeasurementsJsonToJava() throws JsonParseException, JsonMappingException, IOException {
- PPMPPackager packager = new PPMPPackager();
-
- MeasurementsWrapper wrapperResult = packager.getMeasurementsBean(MEASUREMENT_TEST_MESSAGE);
-
- assertNotNull(wrapperResult);
-
- List measurements = wrapperResult.getMeasurements();
- assertEquals(2, measurements.size());
- assertEquals(23, measurements.get(0).getSeriesMap().getSeries().get("$_time").get(1));
- assertEquals(44.2432, measurements.get(1).getSeriesMap().getSeries().get("pressure").get(2));
-
- }
-
- private MeasurementsWrapper createMeasurementsWrapperWithFullData() {
- MeasurementsWrapper wrapper = new MeasurementsWrapper();
- wrapper.setDevice(createDevice());
- wrapper.setPart(createPart());
- wrapper.setMeasurements(createMeasurements());
- return wrapper;
- }
-
- private List createMeasurements() {
- List measurements = new LinkedList<>();
- Measurements measurements1 = createMeasurementsExample1();
- Measurements measurements2 = createMeasurementsExample2();
- measurements.add(measurements1);
- measurements.add(measurements2);
- return measurements;
- }
-
- private Measurements createMeasurementsExample2() {
- Measurements measurements2 = new Measurements();
- measurements2.setTimestamp(OffsetDateTime.parse("2002-05-30T09:30:10.123+02:00"));
- measurements2.setResult(Measurements.Result.OK);
-
- LimitsMap limitsMap2 = new LimitsMap();
- limitsMap2.setLimitsValue("force", createErrorLimits(25, 20));
- limitsMap2.setLimitsValue("pressure", createErrorLimits(60, 40.4));
- measurements2.setLimitsMap(limitsMap2);
-
- SeriesMap seriesMap2 = new SeriesMap();
- seriesMap2.setSeriesValue("force", Arrays.asList(26, 23, 24));
- seriesMap2.setSeriesValue("pressure", Arrays.asList(52.4, 46.32, 44.2432));
- measurements2.setSeriesMap(seriesMap2);
- return measurements2;
- }
-
- private Measurements createMeasurementsExample1() {
- Measurements measurements1 = new Measurements();
- measurements1.setTimestamp(OffsetDateTime.parse("2002-05-30T09:30:10.123+02:00"));
- measurements1.setResult(Measurements.Result.NOK);
- measurements1.setCode("0000 EE01");
-
- LimitsMap limitsMap1 = new LimitsMap();
- limitsMap1.setLimitsValue("temperature", createFullLimits(4444, 44, 2222, 46));
- measurements1.setLimitsMap(limitsMap1);
-
- SeriesMap seriesMap1 = new SeriesMap();
- seriesMap1.setSeriesValue("$_time", Arrays.asList(0, 23, 24));
- seriesMap1.setSeriesValue("temperature", Arrays.asList(45.4243, 46.42342, 44.2432));
- measurements1.setSeriesMap(seriesMap1);
- return measurements1;
- }
-
- private MetaData createMetaData(String key1, String value1, String key2, String value2) {
- MetaData metaData = new MetaData();
- metaData.setMetaDataValue(key1, value1);
- metaData.setMetaDataValue(key2, value2);
- return metaData;
- }
-
- private Limits createFullLimits(Number upperError, Number lowerError, Number upperWarn, Number lowerWarn) {
- Limits limits = createErrorLimits(upperError, lowerError);
- limits.setUpperWarn(upperWarn);
- limits.setLowerWarn(lowerWarn);
- return limits;
- }
-
- private Limits createErrorLimits(Number upper, Number lower) {
- Limits limits = new Limits();
- limits.setUpperError(upper);
- limits.setLowerError(lower);
- return limits;
- }
-
- private Part createPart() {
- Part part = new Part();
- part.setPartTypeID("F00VH07328");
- part.setPartID("420003844");
- part.setResult(Measurements.Result.NOK);
- part.setCode("HUH289");
- MetaData metaData = createMetaData("chargeID", "845849", "toolID", "32324-432143");
- part.setMetaData(metaData);
- return part;
- }
-
- private Device createDevice() {
- Device device = new Device();
- device.setDeviceID("a4927dad-58d4-4580-b460-79cefd56775b");
- device.setOperationalStatus("normal");
- MetaData metaData = createMetaData("swVersion", "2.0.3.13", "swBuildID", "41535");
- device.setMetaData(metaData);
- return device;
- }
-}
diff --git a/bindings/ppmp-java-binding/src/test/java/org/eclipse/iot/unide/ppmp/MessagesTest.java b/bindings/ppmp-java-binding/src/test/java/org/eclipse/iot/unide/ppmp/MessagesTest.java
deleted file mode 100644
index 70d94a9..0000000
--- a/bindings/ppmp-java-binding/src/test/java/org/eclipse/iot/unide/ppmp/MessagesTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2016 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp;
-
-import static org.junit.Assert.*;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.time.OffsetDateTime;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.commons.io.IOUtils;
-import org.eclipse.iot.unide.ppmp.commons.Device;
-import org.eclipse.iot.unide.ppmp.commons.MetaData;
-import org.eclipse.iot.unide.ppmp.messages.Message;
-import org.eclipse.iot.unide.ppmp.messages.MessagesWrapper;
-import org.json.JSONException;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.skyscreamer.jsonassert.JSONAssert;
-
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-
-
-
-public class MessagesTest {
-
-
- private static final String TEST_FILE_NAME = "message.json";
- private static String MEASUREMENT_TEST_MESSAGE;
-
- @BeforeClass
- public static void readFileContent() throws IOException {
- ClassLoader classLoader = MeasurementsTest.class.getClassLoader();
- MEASUREMENT_TEST_MESSAGE = IOUtils.toString(classLoader.getResourceAsStream(TEST_FILE_NAME),Charset.defaultCharset());
- }
-
-
- @Test
- public void convertMessagesJsonToJava() throws JsonParseException, JsonMappingException, IOException {
- PPMPPackager packager = new PPMPPackager();
- MessagesWrapper wrapperResult = packager.getMessagesBean(MEASUREMENT_TEST_MESSAGE);
-
- assertNotNull(wrapperResult);
-
- List messages = wrapperResult.getMessages();
- assertEquals(2, messages.size());
- assertEquals("190ABT", messages.get(0).getCode());
- assertEquals("33-02", messages.get(1).getCode());
- }
-
- @Test
- public void convertFullMessagesExampleToJson() throws JsonGenerationException, JsonMappingException, IOException, JSONException {
- PPMPPackager packager = new PPMPPackager();
- MessagesWrapper wrapper = createMessagesWrapperWithFullData();
- String result = packager.getMessage(wrapper, true);
-
- System.out.println(result);
-
- JSONAssert.assertEquals(MEASUREMENT_TEST_MESSAGE, result, false);
- }
-
- private MessagesWrapper createMessagesWrapperWithFullData() {
- MessagesWrapper wrapper = new MessagesWrapper();
- wrapper.setDevice(createDevice());
- wrapper.setMessages(createMessages());
-
- return wrapper;
- }
-
- private List createMessages() {
- List messages = new LinkedList<>();
-
- Message message1 = createFullMessageExample();
- Message message2 = createShortMessageExample();
-
- messages.add(message1);
- messages.add(message2);
-
- return messages;
- }
-
- private Message createShortMessageExample() {
- Message message = new Message();
- message.setTimestamp(OffsetDateTime.parse("2002-05-30T09:30:10.125+02:00"));
- message.setType(Message.MessageType.TECHNICAL_INFO);
- message.setSeverity(Message.MessageSeverity.HIGH);
- message.setCode("33-02");
- message.setTitle("Disk size limit reached");
- message.setDescription("Disk size has reached limit. Unable to write log files.");
- return message;
- }
-
- private Message createFullMessageExample() {
- Message message = new Message();
- message.setOrigin("sensor-id-992.2393.22");
- message.setTimestamp(OffsetDateTime.parse("2002-05-30T09:30:10.123+02:00"));
- message.setType(Message.MessageType.DEVICE);
- message.setSeverity(Message.MessageSeverity.HIGH);
- message.setCode("190ABT");
- message.setTitle("control board damaged");
- message.setDescription("Electronic control board or its electrical connections are damaged");
- message.setHint("Check the control board");
- MetaData metaData = new MetaData();
- metaData.setMetaDataValue("firmware", "20130304_22.020");
- message.setMetaData(metaData);
- return message;
- }
-
- private Device createDevice() {
- Device device = new Device();
- device.setDeviceID("2ca5158b-8350-4592-bff9-755194497d4e");
- device.setOperationalStatus("normal");
- MetaData metaData = new MetaData();
- metaData.setMetaDataValue("swVersion", "2.0.3.13");
- metaData.setMetaDataValue("swBuildID", "41535");
- device.setMetaData(metaData);
- return device;
- }
-
-}
diff --git a/bindings/ppmp-java-binding/src/test/java/org/eclipse/iot/unide/ppmp/ProcessTest.java b/bindings/ppmp-java-binding/src/test/java/org/eclipse/iot/unide/ppmp/ProcessTest.java
deleted file mode 100644
index 902d2e7..0000000
--- a/bindings/ppmp-java-binding/src/test/java/org/eclipse/iot/unide/ppmp/ProcessTest.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package org.eclipse.iot.unide.ppmp;
-
-import static org.junit.Assert.*;
-
-import java.io.IOException;
-import java.time.OffsetDateTime;
-import java.util.Arrays;
-
-import org.apache.commons.io.IOUtils;
-import org.eclipse.iot.unide.ppmp.commons.Device;
-import org.eclipse.iot.unide.ppmp.commons.MetaData;
-import org.eclipse.iot.unide.ppmp.process.Limits;
-import org.eclipse.iot.unide.ppmp.process.LimitsMap;
-import org.eclipse.iot.unide.ppmp.process.Measurements;
-import org.eclipse.iot.unide.ppmp.process.Part;
-import org.eclipse.iot.unide.ppmp.process.Part.Type;
-import org.eclipse.iot.unide.ppmp.process.Process;
-import org.eclipse.iot.unide.ppmp.process.Process.Result;
-import org.eclipse.iot.unide.ppmp.process.ProcessWrapper;
-import org.eclipse.iot.unide.ppmp.process.Program;
-import org.eclipse.iot.unide.ppmp.process.SeriesMap;
-import org.eclipse.iot.unide.ppmp.process.ShutOffValues;
-import org.eclipse.iot.unide.ppmp.process.ShutOffValuesMap;
-import org.eclipse.iot.unide.ppmp.process.SpecialValue;
-import org.eclipse.iot.unide.ppmp.process.SpecialValueMap;
-import org.json.JSONException;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.skyscreamer.jsonassert.JSONAssert;
-
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-
-/**
- * Testclass for the process message java binding
- * @author FIH1IMB
- *
- */
-public class ProcessTest {
-
- private static final String TEST_FILE_NAME = "process.json";
- private static String PROCESS_TEST_MESSAGE;
-
- @BeforeClass
- public static void readFileContent() throws IOException {
- ClassLoader classLoader = ProcessTest.class.getClassLoader();
- PROCESS_TEST_MESSAGE = IOUtils.toString(classLoader.getResourceAsStream(TEST_FILE_NAME),"UTF-8");
- }
-
-
- @Test
- public void convertFullMessagesExampleToJson() throws JsonGenerationException, JsonMappingException, IOException, JSONException {
- PPMPPackager packager = new PPMPPackager();
- ProcessWrapper wrapper = createProcessWrapperWithFullData();
- String result = packager.getMessage(wrapper, true);
-
- System.out.println(result);
-
- JSONAssert.assertEquals(PROCESS_TEST_MESSAGE, result, false);
- }
-
- @Test
- public void convertMeasurementsJsonToJava() throws JsonParseException, JsonMappingException, IOException {
- PPMPPackager packager = new PPMPPackager();
-
- ProcessWrapper wrapperResult = packager.getProcessesBean(PROCESS_TEST_MESSAGE);
-
- assertNotNull(wrapperResult);
-
- Process process = wrapperResult.getProcess();
- assertEquals("b4927dad-58d4-4580-b460-79cefd56775b", process.getExternalProcessId());
-
- }
-
- /**
- * Creates the ProcessWrapper object with a setup of all parameters
- * @return
- */
- private ProcessWrapper createProcessWrapperWithFullData() {
- ProcessWrapper wrapper = new ProcessWrapper();
- wrapper.setDevice(createDevice());
- wrapper.setProcess(createProcessExample());
- wrapper.setPart(createPart());
- wrapper.setMeasurements(Arrays.asList(createMeasurementsExample1(),createMeasurementsExample2()));
-
- return wrapper;
- }
-
- /**
- * Creates the process object
- * @return
- */
- private Process createProcessExample() {
- Process process = new Process();
- process.setTimestamp(OffsetDateTime.parse("2002-05-30T09:30:10.123+02:00"));
- process.setExternalProcessId("b4927dad-58d4-4580-b460-79cefd56775b");
- process.setResult(Result.NOK);
- process.setShutoffPhase("phase 1");
-
- Program program = new Program();
- program.setName("Programm 1");
- program.setId("1");
- program.setLastChangedDate("2002-05-30T09:30:10.123+02:00");
-
- MetaData metaData = new MetaData();
- metaData.setMetaDataValue("name", "Getriebedeckel verschrauben");
-
- process.setMetaData(metaData);
- process.setShutOffValuesMap(createShutOffValues());
- process.setProgram(program);
-
- return process;
- }
-
- /**
- * Creates an example of a device object
- * @return
- */
- private Device createDevice() {
- Device device = new Device();
- device.setDeviceID("a4927dad-58d4-4580-b460-79cefd56775b");
- device.setOperationalStatus("normal");
- MetaData metaData = new MetaData();
- metaData.setMetaDataValue("swVersion", "2.0.3.13");
- metaData.setMetaDataValue("swBuildId", "41535");
- device.setMetaData(metaData);
- return device;
- }
-
- /**
- * Creates an example of a part object
- * @return
- */
- private Part createPart() {
- Part part = new Part();
- part.setType(Type.SINGLE);
- part.setCode("HUH289");
- part.setPartID("420003844");
- part.setPartTypeID("F00VH07328");
- part.setResult(org.eclipse.iot.unide.ppmp.process.Part.Result.NOK);
- MetaData metaData = new MetaData();
- metaData.setMetaDataValue("toolId", "32324-432143");
- part.setMetaData(metaData);
- return part;
- }
-
- /**
- * Creates an example of a ShutOffValuesMap
- * @return
- */
- private ShutOffValuesMap createShutOffValues() {
- ShutOffValuesMap shutOffValuesMap = new ShutOffValuesMap();
-
- ShutOffValues shutOffValuesForce = new ShutOffValues();
- shutOffValuesForce.setTimestamp(OffsetDateTime.parse("2002-05-30T09:30:11.123+02:00"));
- shutOffValuesForce.setValue(24);
- shutOffValuesForce.setLowerError(22);
- shutOffValuesForce.setUpperError(26);
-
- ShutOffValues shutOffValuesPressure = new ShutOffValues();
- shutOffValuesPressure.setValue(50);
- shutOffValuesPressure.setLowerError(48);
- shutOffValuesPressure.setUpperError(52);
-
- shutOffValuesMap.setShutOffValue("force", shutOffValuesForce);
- shutOffValuesMap.setShutOffValue("pressure", shutOffValuesPressure);
-
- return shutOffValuesMap;
- }
-
- /**
- * Creates an example for a measurement object
- * @return
- */
- private Measurements createMeasurementsExample1() {
- Measurements measurements = new Measurements();
-
- measurements.setPhase("phasen name 2");
- measurements.setName("500 Grad links drehen");
- measurements.setTimestamp(OffsetDateTime.parse("2002-05-30T09:30:10.123+02:00"));
- measurements.setResult(Measurements.Result.NOK);
- measurements.setCode("0000 EE01");
-
- Limits limitsTemperature = new Limits();
- limitsTemperature.setUpperErrorSingleValue(4444);
- limitsTemperature.setLowerErrorSingleValue(44);
- limitsTemperature.setUpperWarnSingleValue(2222);
- limitsTemperature.setLowerWarnSingleValue(46);
- limitsTemperature.setTargetSingleValue(35);
- LimitsMap limitsMapTemperature = new LimitsMap();
- limitsMapTemperature.setLimitsValue("temperature", limitsTemperature);
- measurements.setLimitsMap(limitsMapTemperature);
-
- SpecialValue specialValuePressure = new SpecialValue();
- specialValuePressure.setTime(24);
- specialValuePressure.setValue(44.2432);
- SpecialValue specialValueForce = new SpecialValue();
- specialValueForce.setTime(24);
- specialValueForce.setValue(24);
- SpecialValueMap specialValueMap = new SpecialValueMap();
- specialValueMap.setSpecialValue("pressure", specialValuePressure);
- specialValueMap.setSpecialValue("force", specialValueForce);
- measurements.setSpecialValues(specialValueMap);
-
-
- SeriesMap seriesMap1 = new SeriesMap();
- seriesMap1.setSeriesValue("time", Arrays.asList(0, 23, 24));
- seriesMap1.setSeriesValue("temperature", Arrays.asList(45.4243, 46.42342, 44.2432));
- seriesMap1.setSeriesValue("force", Arrays.asList(26, 23, 24));
- seriesMap1.setSeriesValue("pressure", Arrays.asList(52.4, 46.32, 44.2432));
- measurements.setSeriesMap(seriesMap1);
- return measurements;
- }
-
- /**
- * Creates an example for a measurement object
- * @return
- */
- private Measurements createMeasurementsExample2() {
- Measurements measurements = new Measurements();
-
- measurements.setPhase("phasen name");
- measurements.setTimestamp(OffsetDateTime.parse("2002-05-30T09:30:10.123+02:00"));
- measurements.setResult(Measurements.Result.OK);
-
- Limits limitsForce = new Limits();
- limitsForce.setUpperError(Arrays.asList(27, 24, 25));
- limitsForce.setLowerError(Arrays.asList(25, 22, 23));
- Limits limitsPressure = new Limits();
- limitsPressure.setUpperError(Arrays.asList(54, 48, 46));
- limitsPressure.setLowerError(Arrays.asList(50, 44, 42));
- LimitsMap limitsMap = new LimitsMap();
- limitsMap.setLimitsValue("force", limitsForce);
- limitsMap.setLimitsValue("pressure", limitsPressure);
- measurements.setLimitsMap(limitsMap);
-
- SpecialValue specialValuePressure = new SpecialValue();
- specialValuePressure.setValue(24);
- SpecialValue specialValueForce = new SpecialValue();
- specialValueForce.setValue(50);
- SpecialValueMap specialValueMap = new SpecialValueMap();
- specialValueMap.setSpecialValue("pressure", specialValuePressure);
- specialValueMap.setSpecialValue("force", specialValueForce);
- measurements.setSpecialValues(specialValueMap);
-
- SeriesMap seriesMap = new SeriesMap();
- seriesMap.setSeriesValue("time", Arrays.asList(30, 36, 42));
- seriesMap.setSeriesValue("temperature", Arrays.asList(45.4243, 46.42342, 44.2432));
- seriesMap.setSeriesValue("force", Arrays.asList(26, 23, 24));
- seriesMap.setSeriesValue("pressure", Arrays.asList(52.4, 46.32, 44.2432));
- measurements.setSeriesMap(seriesMap);
-
- return measurements;
- }
-
-}
diff --git a/bindings/ppmp-java-binding/src/test/resources/process.json b/bindings/ppmp-java-binding/src/test/resources/process.json
deleted file mode 100644
index e308a7d..0000000
--- a/bindings/ppmp-java-binding/src/test/resources/process.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "content-spec" : "urn:spec://eclipse.org/unide/process-message#v2",
- "device" : {
- "deviceID" : "a4927dad-58d4-4580-b460-79cefd56775b",
- "operationalStatus" : "normal",
- "metaData" : {
- "swVersion" : "2.0.3.13",
- "swBuildId" : "41535"
- }
- },
- "part" : {
- "type" : "SINGLE",
- "partTypeID" : "F00VH07328",
- "partID" : "420003844",
- "result" : "NOK",
- "code" : "HUH289",
- "metaData" : {
- "toolId" : "32324-432143"
- }
- },
- "process" : {
- "externalProcessId" : "b4927dad-58d4-4580-b460-79cefd56775b",
- "ts" : "2002-05-30T09:30:10.123+02:00",
- "result" : "NOK",
- "shutoffPhase" : "phase 1",
- "program" : {
- "id" : "1",
- "name" : "Programm 1",
- "lastChangedDate" : "2002-05-30T09:30:10.123+02:00"
- },
- "shutoffValues" : {
- "force" : {
- "ts" : "2002-05-30T09:30:11.123+02:00",
- "value" : 24,
- "upperError" : 26,
- "lowerError" : 22
- },
- "pressure" : {
- "value" : 50,
- "upperError" : 52,
- "lowerError" : 48
- }
- },
- "metaData" : {
- "name" : "Getriebedeckel verschrauben"
- }
- },
- "measurements" : [
- {
- "ts" : "2002-05-30T09:30:10.123+02:00",
- "phase" : "phasen name 2",
- "name" : "500 Grad links drehen",
- "result" : "NOK",
- "code" : "0000 EE01",
- "limits" : {
- "temperature" : {
- "upperError" : 4444,
- "lowerError" : 44,
- "upperWarn" : 2222,
- "lowerWarn" : 46,
- "target" : 35
- }
- },
- "specialValues" : {
- "pressure" : {
- "time" : 24,
- "value" : 44.2432
- },
- "force" : {
- "time" : 24,
- "value" : 24
- }
- },
- "series" : {
- "time" : [0, 23, 24],
- "force" : [26, 23, 24],
- "pressure" : [52.4, 46.32, 44.2432],
- "temperature" : [45.4243, 46.42342, 44.2432]
- }
- },
- {
- "ts" : "2002-05-30T09:30:10.123+02:00",
- "phase" : "phasen name",
- "result" : "OK",
- "limits" : {
- "force" : {
- "upperError" : [27, 24, 25],
- "lowerError" : [25, 22, 23]
- },
- "pressure" : {
- "upperError" : [54, 48, 46],
- "lowerError" : [50, 44, 42]
- }
- },
- "specialValues" : {
- "pressure" : {
- "value" : 24
- },
- "force" : {
- "value": 50
- }
- },
- "series" : {
- "time" : [30, 36, 42],
- "force" : [26, 23, 24],
- "pressure" : [52.4, 46.32, 44.2432],
- "temperature" : [45.4243, 46.42342, 44.2432]
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/clients/binsa/.babelrc b/clients/binsa/.babelrc
new file mode 100644
index 0000000..f6fb66a
--- /dev/null
+++ b/clients/binsa/.babelrc
@@ -0,0 +1,15 @@
+{
+ "presets": [["env", {
+ "targets": {
+ "browsers": [
+ "> 1%",
+ "not ie < 11"
+ ]
+ }
+ }]],
+ "plugins": [
+ ["transform-runtime"],
+ "lodash",
+ "syntax-dynamic-import"
+ ]
+}
diff --git a/clients/binsa/.eslintrc b/clients/binsa/.eslintrc
new file mode 100644
index 0000000..9eadf9d
--- /dev/null
+++ b/clients/binsa/.eslintrc
@@ -0,0 +1,100 @@
+{
+ "parser": "babel-eslint",
+ "parserOptions": {
+ "ecmaVersion": 6
+ },
+ "plugins": [
+ "standard", "promise", "html", "babel"
+ ],
+ "extends": ["standard", "vue"],
+ "env": {
+ "browser": true,
+ "jquery": false
+ },
+ "globals": {
+ "chrome": true,
+ "browser": true,
+ "nw": true
+ },
+ "rules": {
+ "key-spacing": ["error", {
+ "align": {
+ "beforeColon": false,
+ "afterColon": true,
+ "on": "value"
+ },
+ "multiLine": {
+ "beforeColon": false,
+ "afterColon": true
+ }
+ }],
+ "brace-style": ["warn", "1tbs", {
+ "allowSingleLine": false
+ }],
+ "camelcase": ["error", {
+ "properties": "always"
+ }],
+ "comma-style": ["warn", "last"],
+ "consistent-return": ["off"],
+ "default-case": ["error"],
+ "indent": ["error", 2, {
+ "SwitchCase": 1,
+ "MemberExpression": 1,
+ "VariableDeclarator": {
+ "var": 2,
+ "let": 2,
+ "const": 3
+ },
+ "FunctionDeclaration": {
+ "body": 1,
+ "parameters": "first"
+ },
+ "FunctionExpression": {
+ "body": 1,
+ "parameters": "first"
+ },
+ "CallExpression": {
+ "arguments": "first"
+ },
+ "ArrayExpression": "first",
+ "ObjectExpression": 1
+ }],
+ "keyword-spacing": ["error", {
+ "before": true,
+ "after": true,
+ "overrides": {
+ "if": {
+ "after": false
+ },
+ "for": {
+ "after": false
+ },
+ "while": {
+ "after": false
+ },
+ "catch": {
+ "after": false
+ }
+ }
+ }],
+ "no-multi-spaces": "off",
+ "no-shadow": ["warn"],
+ "no-unused-vars": ["warn"],
+ "no-unused-expressions": "off",
+ "no-use-before-define": ["error", {
+ "functions": true,
+ "classes": true,
+ "variables": true
+ }],
+ "one-var": ["error", "always"],
+ "one-var-declaration-per-line": ["error", "always"],
+ "quote-props": ["warn", "as-needed"],
+ "semi": ["error", "always"],
+ "space-before-function-paren": ["error", "never"],
+ "vars-on-top": "error",
+
+ "promise/param-names": "warn",
+ "promise/always-return": "warn",
+ "promise/catch-or-return": "warn"
+ }
+}
diff --git a/clients/binsa/.gitignore b/clients/binsa/.gitignore
new file mode 100644
index 0000000..f44ff47
--- /dev/null
+++ b/clients/binsa/.gitignore
@@ -0,0 +1,9 @@
+node_modules
+dist*
+npm-debug.log*
+*.vis
+tests/integration/eclipsecq_spec.js
+tests/videos
+tests/screenshots
+conf/cache
+jenkins.pipeline
diff --git a/clients/binsa/README.md b/clients/binsa/README.md
new file mode 100644
index 0000000..327f271
--- /dev/null
+++ b/clients/binsa/README.md
@@ -0,0 +1,159 @@
+## Compiling
+Install dependencies:
+```
+npm install
+```
+See available npm options:
+```
+npm run
+```
+
+| npm run...| description |
+|-----------|-----------------------------------------------------------|
+| build | run production build and start http-server for testing |
+| dist | run production build |
+| dev | run development server with hot module replacement |
+| watch | run production build and watch files for changes |
+| analyse | run development build and display package stats diagram |
+| start | use [nw.js](https://nwjs.io/) to display the build |
+| test | run tests |
+| cypress | open cypress IDE for running tests |
+
+
+In order to build binsa to a different prefix (e.g. "/binsa"), set environment variable PREFIX:
+```
+set PREFIX=/binsa/
+npm run dist
+```
+
+## Compiling for specific browser
+Current compilation targets include:
+* Chrome for Android 61+
+* Chrome 60+
+* UC Browser for Android 11.4+
+* iOS Safari 10.3+
+* Firefox 56+
+* Samsung Internet 4+
+* Opera Mini
+* IE 11
+* Edge 15+
+* Safari 11+
+
+The targeted browser can be adjusted .babelrc (presets/targets/browsers) with [browserlist](https://github.com/ai/browserslist) queries.
+
+## Set serverside CORS headers
+
+Browser usually do not allow sending data to other domains from which this app is served. In order to use this app, there are several deployment scenarios possible:
+
+1. allow cors, either by your backend or by configuring a reverse-proxy (nginx, apache mod_proxy)
+2. deploy it on the server that should receive the measurements (same-origin)
+3. deploy it as a google chrome app (as long as chrome supports apps)
+4. deploy it with [nw.js](https://nwjs.io/) to avoid cors checks
+
+For 1.:
+add to your nginx location for the /rest endpoint:
+```
+if ($request_method = 'OPTIONS') {
+ add_header 'Access-Control-Allow-Origin' '*';
+ add_header 'Access-Control-Allow-Credentials' 'true';
+ add_header 'Access-Control-Allow-Methods' 'POST, GET, OPTIONS';
+ add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
+ add_header 'Access-Control-Max-Age' 604800;
+ add_header 'Content-Type' 'text/plain charset=UTF-8';
+ add_header 'Content-Length' 0;
+ return 204;
+}
+if ($request_method = 'POST') {
+ add_header 'Access-Control-Allow-Origin' '*';
+ add_header 'Access-Control-Allow-Credentials' 'true';
+ add_header 'Access-Control-Allow-Methods' 'POST, GET, OPTIONS';
+ add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
+ add_header 'Access-Control-Max-Age' 604800;
+}
+```
+
+add to your apache mod_proxy LocationMatch for the /rest endpoint after adding rewrite and headers module:
+```
+Header always set Access-Control-Allow-Origin "*"
+Header always set Access-Control-Allow-Credentials "true"
+Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
+Header always set Access-Control-Max-Age "604800"
+Header always set Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type"
+
+
+RewriteEngine On
+RewriteCond %{REQUEST_METHOD} OPTIONS
+RewriteRule ^(.*)$ $1 [R=200,L]
+```
+
+## Other platforms
+### chrome app
+* build with PREFIX=/
+* open google chrome
+* navigate to chrome://extensions
+* load 'dist' folder via Load unpacked extension...
+* Pack extension...
+* Rename dist.crx to binsa.crx
+
+### native Windows / Linux / MacOS executable
+```
+npm install nw-builder
+node conf/build-nw
+```
+The package with executable will be in dist/binsa/ folder.
+For other platforms than win64, adjust the build-nw script and run again
+
+### native (android, iOS) apps
+install an android development environment ([android-sdk](https://developer.android.com/studio/index.html#command-tools), [gradle](https://gradle.org/releases/), build-tools, java sdk etc.), set the correct PATHS and
+```
+npm install -g cordova
+cordova create binsa org.eclipse.unide.binsa binsa
+cd binsa
+cordova platform add android --save
+cordova requirements android
+```
+change the router mode from 'history' to 'hash' in src/router.js:
+```javascript
+export default new Router({
+ mode: 'hash',
+ // mode: 'history',
+ base: process.env.BASEPATH,
+ routes
+});
+```
+replace cordovas default config.xml with the following:
+```xml
+
+
+ binsa
+
+ Eclipse Unide Sensor Simulator Application
+
+
+ Axel Meinhardt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+compile and get the apk file to your phone:
+```
+cordova build android
+```
+more information at [cordova documentation](https://cordova.apache.org/docs/en/latest/reference/cordova-cli/)
diff --git a/clients/binsa/conf/build-nw.js b/clients/binsa/conf/build-nw.js
new file mode 100644
index 0000000..700b4b2
--- /dev/null
+++ b/clients/binsa/conf/build-nw.js
@@ -0,0 +1,33 @@
+/*
+ * example file on how to build executable from /dist folder
+ * install nw-builder first, than
+ * node conf\build-nw.js
+ */
+
+const NwBuilder = require('nw-builder'),
+ pkgJson = require('../package.json'),
+ nw = new NwBuilder({
+ files: [`${__dirname}/../dist/**`, `!../dist/${pkgJson.name}`],
+ platforms: ['win64', 'linux64'], // ['win', 'win32', 'win64', 'osx', 'osx32', 'osx64', 'linux', 'linux32', 'linux64']
+ version: '0.26.6',
+ flavor: 'normal',
+ appName: pkgJson.name,
+ appVersion: pkgJson.version,
+ buildDir: `${__dirname}/../dist`,
+ cacheDir: `${__dirname}/cache`,
+ winVersionString: {
+ CompanyName: "Bosch Software Innovations",
+ FileDescription: pkgJson.name,
+ ProductName: pkgJson.name,
+ LegalCopyright: "Copyright 2017"
+ },
+ winIco: `${__dirname}/../src/img/icons/favicon.ico`
+ });
+
+nw.on('log', console.log);
+
+nw.build().then(function () {
+ console.log('build');
+}).catch(function (error) {
+ console.error(error);
+});
diff --git a/clients/binsa/conf/fixes/argsToArray.js b/clients/binsa/conf/fixes/argsToArray.js
new file mode 100644
index 0000000..8d0988c
--- /dev/null
+++ b/clients/binsa/conf/fixes/argsToArray.js
@@ -0,0 +1,5 @@
+// dropin es6 replacement for argsarray module
+
+export default fn => function(...args) {
+ return fn.call(this, args);
+};
diff --git a/clients/binsa/conf/webpack-license-plugin.js b/clients/binsa/conf/webpack-license-plugin.js
new file mode 100644
index 0000000..3b36a94
--- /dev/null
+++ b/clients/binsa/conf/webpack-license-plugin.js
@@ -0,0 +1,139 @@
+// var checker = require('license-checker'),
+const fs = require('fs'),
+ path = require('path'),
+ util = require('util'),
+ JsZip = require('jszip');
+
+class LicenseCheckPlugin {
+ static parseRepository(repository) {
+ if(typeof repository === 'object' && typeof repository.url === 'string') {
+ return repository.url
+ .replace('git+ssh://git@', 'git://')
+ .replace('git+https://github.com', 'https://github.com')
+ .replace('git://github.com', 'https://github.com')
+ .replace('git@github.com:', 'https://github.com/')
+ .replace('.git', '');
+ }
+ return '';
+ }
+
+ static parseLicense(license) {
+ if(license instanceof Array) {
+ return license.map(LicenseCheckPlugin.parseLicense).join(', ');
+ } else if(typeof license === 'object' && typeof license.type) {
+ return license.type;
+ }
+ return license;
+ }
+
+ apply(compiler) {
+ compiler.plugin('emit', (compilation, callback) => {
+ // last chance to add assets
+ const sep = path.sep.replace(/\\/, '\\\\'),
+ pkgName = new RegExp(`(^.*node_modules${sep}[^${sep}]+)(?!.*node_modules)`),
+ licenseRe = /li[cs]ense/i,
+ groupedDependencies = compilation.fileDependencies
+ .reduce((l, d) => {
+ const match = pkgName.exec(d);
+ if(match) {
+ if(!l[match[1]]) {
+ l[match[1]] = [];
+ }
+ l[match[1]].push(d);
+ }
+ return l;
+ }, {});
+
+ Promise.all(Object.keys(groupedDependencies).map(module =>
+ util.promisify(fs.readFile)(path.join(module, 'package.json'))
+ .then(pgkJsonData => {
+ const zip = new JsZip(),
+ pkg = JSON.parse(pgkJsonData);
+ return Promise.all(groupedDependencies[module].map(file =>
+ util.promisify(fs.readFile)(file)
+ .then(data => zip.file(file.substring(module.length + 1), data))
+ )
+ // + try to find and add license text
+ .concat(util.promisify(fs.readdir)(module)
+ .then(list => {
+ const fileName = list.find(f => f.match(licenseRe));
+ if(fileName) {
+ return util.promisify(fs.readFile)(path.join(module, fileName))
+ .then(data => zip.file(fileName, data));
+ }
+ return Promise.resolve();
+ })
+ ))
+ .then(() => zip.generateAsync({
+ type: 'nodebuffer'
+ }))
+ .then(zipbuffer => {
+ compilation.assets[`src/${pkg.name}@${pkg.version}.zip`] = {
+ source: () => zipbuffer,
+ size: () => zipbuffer.length
+ };
+ return pkg;
+ });
+ })
+ ))
+ .then(PkgJsons => {
+ const text = JSON.stringify(PkgJsons
+ .sort((pkgA, pkgB) => (pkgA.name < pkgB.name) ? -1 : (pkgA.name > pkgB.name ? 1 : 0))
+ .reduce((pkgs, pkg) => {
+ pkgs[`${pkg.name}@${pkg.version}`] = {
+ name: pkg.name,
+ version: pkg.version,
+ licenses: LicenseCheckPlugin.parseLicense(pkg.license || pkg.licenses),
+ repository: LicenseCheckPlugin.parseRepository(pkg.repository),
+ description: pkg.description
+ };
+ return pkgs;
+ }, {})/*, ' ', 2 */);
+ compilation.assets['licenses.json'] = {
+ source: () => text,
+ size: () => Buffer.byteLength(text, 'utf8')
+ };
+ return callback();
+ })
+ .catch(err => {
+ console.error(err);
+ callback();
+ });
+ });
+
+ /* compiler.plugin('emit', (compilation, done) => {
+ checker.init({
+ start: `${__dirname}/..`,
+ production: true,
+ json: true,
+ customFormat: {
+ name: true,
+ version: true,
+ description: true,
+ repository: true,
+ licenses: true,
+
+ publisher: false,
+ email: false,
+ url: false,
+ licenseFile: false,
+ licenseText: false,
+ licenseModified: false
+ }
+ }, function(err, json) {
+ if(err) {
+ console.error(err);
+ } else {
+ let text = JSON.stringify(json, ' ', 2);
+ compilation.assets['licenses.json'] = {
+ source: () => text,
+ size: () => Buffer.byteLength(text, 'utf8')
+ };
+ }
+ done();
+ });
+ }); */
+ }
+}
+
+module.exports = LicenseCheckPlugin;
diff --git a/clients/binsa/conf/webpack.dev.js b/clients/binsa/conf/webpack.dev.js
new file mode 100644
index 0000000..715a84f
--- /dev/null
+++ b/clients/binsa/conf/webpack.dev.js
@@ -0,0 +1,311 @@
+const webpack = require('webpack'),
+ path = require('path'),
+ fs = require('fs'),
+ ExtractTextPlugin = require('extract-text-webpack-plugin'),
+ LodashModuleReplacementPlugin = require('lodash-webpack-plugin'),
+ CopyWebpackPlugin = require('copy-webpack-plugin'),
+ OfflinePlugin = require('offline-plugin'),
+ HtmlWebpackPlugin = require('html-webpack-plugin'),
+ // FaviconsWebpackPlugin = require('favicons-webpack-plugin'),
+ LicensePlugin = require('./webpack-license-plugin'),
+ // HtmlCriticalPlugin = require('html-critical-webpack-plugin'),
+ packageJson = require('../package.json'),
+
+ extractCSS = new ExtractTextPlugin({
+ filename: '[name].css'
+ }),
+ sassLoader = {
+ loader: 'sass-loader',
+ options: {
+ sourceMap: true,
+ includePaths: ['node_modules']
+ }
+ },
+ langs = fs.readdirSync(`${__dirname}/../src/i18n`).filter(f => f.endsWith('.json')).map(file => file.replace(/.json$/, '')),
+ publicPath = process.env.PREFIX || '/';
+
+module.exports = {
+ devtool: 'source-map',
+ entry: {
+ app: './src',
+ sandbox: './src/sandbox'
+ },
+
+ output: {
+ path: path.join(__dirname, '../dist', publicPath),
+ filename: '[name].js',
+ pathinfo: true,
+ publicPath: publicPath
+ },
+
+ target: "web",
+ /*
+ function(compiler) { //shall work in both, node-webkit and chrome app (web)
+ compiler.apply(
+ new (require("webpack/lib/JsonpTemplatePlugin"))(compiler.options.output),
+ new (require('webpack/lib/FunctionModulePlugin'))(compiler.options.output),
+ new (require("webpack/lib/node/NodeSourcePlugin"))(compiler.options.node),
+ new (require("webpack/lib/ExternalsPlugin"))('commonjs', ['nw.gui', 'os']),
+ new (require("webpack/lib/LoaderTargetPlugin"))('web')
+ );
+ },*/
+
+ node: {
+ // node polyfills
+ },
+
+ devServer: {
+ hot: false,
+ inline: true,
+ progress: true,
+ https: false,
+ // historyApiFallback for SPA, needs special handling for sw.js to redirect without host
+ historyApiFallback: {
+ rewrites: [{
+ from: /sw.js$/,
+ to: `${publicPath}sw.js`
+ }, {
+ from: /.*/,
+ to: `${publicPath}index.html`
+ }]
+ },
+ proxy: {
+ '/rest/v2/measurement': {
+ target: 'http://unide.eclipse.org:443'
+ //, agent: require('http-proxy-agent')('http://localhost:3128')
+ }
+ }
+ },
+
+ module: {
+ rules: [{
+ test: /\.vue$/i,
+ loader: 'vue-loader',
+ options: {
+ loaders: {
+ js: '', // needed here to not fallback to babel-loader
+ css: extractCSS.extract({
+ fallback: 'vue-style-loader',
+ use: [{
+ loader: 'css-loader',
+ options: {
+ sourceMap: true,
+ minimize: false
+ }
+ }]
+ }),
+ scss: extractCSS.extract({
+ fallback: 'vue-style-loader',
+ use: [{
+ loader: 'css-loader',
+ options: {
+ sourceMap: true,
+ minimize: false
+ }
+ }, sassLoader]
+ }),
+ sass: extractCSS.extract({
+ fallback: 'vue-style-loader',
+ use: [{
+ loader: 'css-loader',
+ options: {
+ sourceMap: true,
+ minimize: false
+ }
+ }, sassLoader]
+ })
+ }
+ }
+ }, {
+ // it might be possible to ignore some dependencies that are not used
+ test: /\.js$/i,
+ include: [/chacha/, /ripemd160/],
+ use: ['null-loader']
+ }, {
+ test: /\.js$/i,
+ exclude: /node_modules/,
+ use: ['eslint-loader']
+ }, {
+ test: /\.css$/i,
+ use: extractCSS.extract({
+ fallback: 'style-loader',
+ use: {
+ loader: 'css-loader',
+ options: {
+ sourceMap: true,
+ minimize: false
+ }
+ }
+ })
+ }, {
+ test: /\.(scss|sass)$/i,
+ use: extractCSS.extract({
+ fallback: 'css-loader',
+ use: sassLoader
+ })
+ }, {
+ test: /\.(png|jpe?g|gif)(\?.*)?$/i,
+ exclude: /img\/icons/,
+ use: [{
+ loader: 'url-loader',
+ options: {
+ limit: 1000,
+ name: '[name].[ext]'
+ }
+ }]
+ }, {
+ test: /\.*?$/,
+ use: [{
+ loader: 'file-loader',
+ options: {
+ name: '[name].[ext]'
+ }
+ }],
+ include: /img\/icons/
+ }, {
+ test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/i,
+ use: [{
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/font-woff',
+ name: '[name].[ext]'
+ }
+ }]
+ }, {
+ test: /\.svg?$/i,
+ use: [{
+ loader: 'file-loader',
+ options: {
+ name: '[name].[ext]'
+ }
+ }]
+ }]
+ },
+
+ plugins: fs.readdirSync(`${__dirname}/../src/manifests`).map(f => new HtmlWebpackPlugin({
+ filename: f,
+ template: `${__dirname}/../src/manifests/${f}`,
+ inject: false,
+ packageJson: packageJson
+ // , minimize: true
+ })).concat([
+ new LicensePlugin(),
+ // new DashboardPlugin(),
+ new HtmlWebpackPlugin({
+ filename: packageJson.main,
+ template: `${__dirname}/../index.html`,
+ excludeChunks: ['sandbox'],
+ packageJson: packageJson
+ }),
+ new HtmlWebpackPlugin({
+ filename: 'sandbox.html',
+ template: `${__dirname}/../sandbox.html`,
+ excludeChunks: ['app']
+ }),
+ /*
+ new FaviconsWebpackPlugin({
+ inject: true,
+ logo: './src/img/unide.png',
+ background: '#fff',
+ title: packageJson.name,
+ icons: {
+ appleStartup: false,
+ windows: true
+ },
+ prefix: 'icons/'
+ }),
+ */
+ new CopyWebpackPlugin([{
+ from: 'src/img/icons',
+ to: 'icons'
+ }, {
+ from: 'package.json'
+ }, {
+ from: 'src/background.js'
+ }]),
+ extractCSS,
+ new webpack.EnvironmentPlugin({
+ NODE_ENV: 'development',
+ BASEPATH: publicPath,
+ LANGS: langs,
+ BRAND: packageJson.name
+ }),
+ // limit the locales of vee-validate to the ones we know
+ new webpack.ContextReplacementPlugin(/vee-validate[\/\\]dist[\/\\]locale$/, new RegExp(langs.join('|'))),
+ new LodashModuleReplacementPlugin({
+ collection: true,
+ path: true
+ }),
+ new webpack.LoaderOptionsPlugin({
+ minimize: false,
+ debug: true
+ }),
+ new webpack.optimize.CommonsChunkPlugin({
+ minChunks: 2, // module => module.context && (module.context.indexOf('node_modules') !== -1),
+ children: true,
+ deepChildren: true
+ }),
+ // display relative path of module on Hot Module Replacement
+ new webpack.NamedModulesPlugin(),
+ /* new HtmlCriticalPlugin({
+ base: `${__dirname}/../dist`,
+ src: `${publicPath}index.html`,
+ dest: `${__dirname}/../dist${publicPath}index.html`,
+ inline: true,
+ minify: true,
+ extract: true,
+ dimensions: [{
+ // Galaxy S5
+ height: 640,
+ width: 360
+ }, {
+ // iPad Pro
+ height: 1366,
+ width: 1024
+ }, {
+ // laptop
+ height: 768,
+ width: 1366
+ }, {
+ height: 768,
+ width: 1400
+ }],
+ penthouse: {
+ blockJSRequests: false,
+ }
+ }), */
+ new webpack.HotModuleReplacementPlugin()
+ ]),
+
+ resolve: {
+ mainFields: ['jsnext:main', 'module', 'browser', 'main'],
+ aliasFields: ['browser'],
+ alias: {
+ underscore: 'lodash',
+ // because babel-loader doesn't work with "custom polyfills":
+ 'core-js/library/fn/promise': 'es6-promise',
+
+ // optimize some dependencies
+ debug: path.resolve(__dirname, '../node_modules/debug'),
+ inherits: path.resolve(__dirname, '../node_modules/inherits'),
+ argsarray: path.resolve(__dirname, 'fixes/argsToArray'),
+ 'offline-plugin/runtime': 'null-loader',
+ isarray: 'lodash/isArray',
+
+ // stable access to our main folder
+ components: path.resolve(__dirname, '../src/components/'),
+ pages: path.resolve(__dirname, '../src/pages/'),
+ styles: path.resolve(__dirname, '../src/styles/'),
+
+ // don't use es6, because transform-pouch cannot handle .default
+ 'pouchdb-promise': 'es6-promise',
+ lie: 'es6-promise',
+ 'pouchdb-utils': 'pouchdb-utils/lib/index',
+
+ // es6 rewrites
+ 'vue-multiselect': 'vue-multiselect/src/Multiselect'
+ },
+ extensions: ['.js', '.json', '.vue']
+ }
+};
diff --git a/clients/binsa/conf/webpack.prod.js b/clients/binsa/conf/webpack.prod.js
new file mode 100644
index 0000000..57b8ba9
--- /dev/null
+++ b/clients/binsa/conf/webpack.prod.js
@@ -0,0 +1,312 @@
+const webpack = require('webpack'),
+ path = require('path'),
+ fs = require('fs'),
+ ExtractTextPlugin = require('extract-text-webpack-plugin'),
+ LodashModuleReplacementPlugin = require('lodash-webpack-plugin'),
+ CopyWebpackPlugin = require('copy-webpack-plugin'),
+ OfflinePlugin = require('offline-plugin'),
+ HtmlWebpackPlugin = require('html-webpack-plugin'),
+ CleanPlugin = require('clean-webpack-plugin'),
+ UglifyJsPlugin = require('uglifyjs-webpack-plugin'),
+ // FaviconsWebpackPlugin = require('favicons-webpack-plugin'),
+ LicensePlugin = require('./webpack-license-plugin'),
+ // HtmlCriticalPlugin = require('html-critical-webpack-plugin'),
+ packageJson = require('../package.json'),
+
+ extractCSS = new ExtractTextPlugin({
+ filename: '[name].css'
+ }),
+ compact = true,
+ sassLoader = {
+ loader: 'sass-loader',
+ options: {
+ sourceMap: !compact,
+ outputStyle: 'compressed',
+ includePaths: ['node_modules']
+ }
+ },
+ langs = fs.readdirSync(`${__dirname}/../src/i18n`).filter(f => f.endsWith('.json')).map(file => file.replace(/.json$/, '')),
+ publicPath = process.env.PREFIX || '/binsa/';
+
+module.exports = {
+// devtool: 'hidden-source-map',
+ entry: {
+ app: './src',
+ sandbox: './src/sandbox'
+ },
+
+ output: {
+ path: path.join(__dirname, '../dist', publicPath),
+ filename: '[name].js',
+ chunkFilename: '[name].js',
+ pathinfo: true,
+ publicPath: publicPath
+ },
+
+ target: "web",
+
+ node: {
+ // node polyfills
+ },
+
+ module: {
+ rules: [{
+ test: /\.vue$/i,
+ loader: 'vue-loader',
+ options: {
+ loaders: {
+ js: 'babel-loader',
+ css: extractCSS.extract({
+ fallback: 'vue-style-loader',
+ use: [{
+ loader: 'css-loader',
+ options: {
+ sourceMap: !compact,
+ minimize: compact
+ }
+ }]
+ }),
+ scss: extractCSS.extract({
+ fallback: 'vue-style-loader',
+ use: [{
+ loader: 'css-loader',
+ options: {
+ sourceMap: !compact,
+ minimize: compact
+ }
+ }, sassLoader]
+ }),
+ sass: extractCSS.extract({
+ fallback: 'vue-style-loader',
+ use: [{
+ loader: 'css-loader',
+ options: {
+ sourceMap: !compact,
+ minimize: compact
+ }
+ }, sassLoader]
+ })
+ }
+ }
+ }, {
+ // it might be possible to ignore some dependencies that are not used
+ test: /\.js$/i,
+ include: [/chacha/, /ripemd160/],
+ use: ['null-loader']
+ }, {
+ test: /\.js$/i,
+ include: [
+ path.resolve(__dirname, '..', 'src'),
+ path.resolve(__dirname, '..', 'conf', 'fixes'),
+ path.resolve(__dirname, '..', 'node_modules', 'buefy'),
+ path.resolve(__dirname, '..', 'node_modules', 'native-crypto', 'browser')
+ ],
+ use: ['babel-loader', 'eslint-loader']
+ }, {
+ test: /\.css$/i,
+ use: extractCSS.extract({
+ fallback: 'style-loader',
+ use: {
+ loader: 'css-loader',
+ options: {
+ sourceMap: !compact,
+ minimize: compact
+ }
+ }
+ })
+ }, {
+ test: /\.(scss|sass)$/i,
+ use: extractCSS.extract({
+ fallback: 'css-loader',
+ use: sassLoader
+ })
+ }, {
+ test: /\.(png|jpe?g|gif)(\?.*)?$/i,
+ exclude: /img\/icons/,
+ use: [{
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ name: '[name].[ext]'
+ }
+ }]
+ }, {
+ test: /\.*?$/,
+ use: [{
+ loader: 'file-loader',
+ options: {
+ name: '[name].[ext]'
+ }
+ }],
+ include: /img\/icons/
+ }, {
+ test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/i,
+ use: [{
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/font-woff',
+ name: '[name].[ext]'
+ }
+ }]
+ }, {
+ test: /\.svg?$/i,
+ use: [{
+ loader: 'file-loader',
+ options: {
+ name: '[name].[ext]'
+ }
+ }]
+ }]
+ },
+
+ plugins: fs.readdirSync(`${__dirname}/../src/manifests`).map(f => new HtmlWebpackPlugin({
+ filename: f,
+ template: `${__dirname}/../src/manifests/${f}`,
+ inject: false,
+ packageJson: packageJson,
+ minimize: compact
+ })).concat([
+ new LicensePlugin(),
+ // new DashboardPlugin(),
+ new CleanPlugin(['dist'], {
+ root: path.resolve(__dirname, '..')
+ //, exclude: ["i18n/en.json"]
+ }),
+ new HtmlWebpackPlugin({
+ filename: packageJson.main,
+ template: `${__dirname}/../index.html`,
+ excludeChunks: ['sandbox'],
+ packageJson: packageJson
+ }),
+ new HtmlWebpackPlugin({
+ filename: 'sandbox.html',
+ template: `${__dirname}/../sandbox.html`,
+ excludeChunks: ['app']
+ }),
+ /*
+ new FaviconsWebpackPlugin({
+ inject: true,
+ logo: './src/img/unide.png',
+ background: '#fff',
+ title: packageJson.name,
+ icons: {
+ appleStartup: false,
+ windows: true
+ },
+ prefix: 'icons/'
+ }),
+ */
+ new CopyWebpackPlugin([{
+ from: 'src/img/icons',
+ to: 'icons'
+ }, {
+ from: 'package.json'
+ }, {
+ from: 'src/background.js'
+ }]),
+ extractCSS,
+ new webpack.EnvironmentPlugin({
+ NODE_ENV: 'production',
+ BASEPATH: publicPath,
+ LANGS: langs,
+ BRAND: packageJson.name
+ }),
+ //limit the locales of vee-validate to the ones we know
+ new webpack.ContextReplacementPlugin(/vee-validate[\/\\]dist[\/\\]locale$/, new RegExp(langs.join('|'))),
+ new LodashModuleReplacementPlugin({
+ collection: true,
+ path: true
+ }),
+ new UglifyJsPlugin({
+ sourceMap: !compact,
+ uglifyOptions: {
+ compress: compact ? {
+ drop_console: true
+ } : false,
+ mangle: compact,
+ sourceMap: !compact
+ }
+ }),
+ new webpack.LoaderOptionsPlugin({
+ minimize: compact
+ }),
+ new webpack.optimize.CommonsChunkPlugin({
+ minChunks: 2, //module => module.context && (module.context.indexOf('node_modules') !== -1),
+ children: true,
+ deepChildren: true
+ }),
+ new OfflinePlugin({
+ publicPath: publicPath,
+ excludes: ['**/.*', '**/*.map', '**/*.zip', '**/fontawesome-webfont.+(svg|eot|ttf|woff)'],
+ safeToUseOptionalCaches: true,
+ caches: {
+ main: ['app.js', 'app.css', 'logo.svg', 'fontawesome-webfont.woff2', '**/favicon-16x16.png', '**/favicon-32x32.png'],
+ additional: ['**/*.js', '**/*.json'],
+ optional: [':rest:']
+ },
+ ServiceWorker: {
+ entry: './src/sw.js',
+ events: true,
+ navigateFallbackURL: publicPath
+ //, autoUpdate: 1000 * 60 * 60
+ }
+ }),
+ /* new HtmlCriticalPlugin({
+ base: `${__dirname}/../dist`,
+ src: `${publicPath}index.html`,
+ dest: `${publicPath}index.html`,
+ inline: true,
+ minify: true,
+ extract: true,
+ dimensions: [{
+ // Galaxy S5
+ height: 640,
+ width: 360
+ }, {
+ // iPad Pro
+ height: 1366,
+ width: 1024
+ }, {
+ // laptop
+ height: 768,
+ width: 1366
+ }, {
+ height: 768,
+ width: 1400
+ }],
+ penthouse: {
+ blockJSRequests: false,
+ renderWaitTime: 100
+ }
+ }) */
+ ]),
+
+ resolve: {
+ mainFields: ['jsnext:main', 'module', 'browser', 'main'],
+ aliasFields: ['browser'],
+ alias: {
+ underscore: 'lodash',
+ // because babel-loader doesn't work with "custom polyfills":
+ "core-js/library/fn/promise": "es6-promise",
+
+ // optimize some dependencies
+ debug: path.resolve(__dirname, '../node_modules/debug'),
+ inherits: path.resolve(__dirname, '../node_modules/inherits'),
+ argsarray: path.resolve(__dirname, 'fixes/argsToArray'),
+ isarray: 'lodash/isArray',
+
+ // stable access to our main folders
+ components: path.resolve(__dirname, '../src/components/'),
+ pages: path.resolve(__dirname, '../src/pages/'),
+ styles: path.resolve(__dirname, '../src/styles/'),
+
+ // don't use es6, because transform-pouch cannot handle .default
+ 'pouchdb-promise': 'es6-promise',
+ 'lie': 'es6-promise',
+ 'pouchdb-utils': 'pouchdb-utils/lib/index'
+ },
+ extensions: ['.js', '.json', '.vue']
+ }
+};
+
diff --git a/clients/binsa/cypress.json b/clients/binsa/cypress.json
new file mode 100644
index 0000000..846ae95
--- /dev/null
+++ b/clients/binsa/cypress.json
@@ -0,0 +1,8 @@
+{
+ "port": 8081,
+ "fixturesFolder": "tests/fixtures",
+ "integrationFolder": "tests/integration",
+ "screenshotsFolder": "tests/screenshots",
+ "supportFile": "tests/support",
+ "videosFolder": "tests/videos"
+}
diff --git a/clients/binsa/index.html b/clients/binsa/index.html
new file mode 100644
index 0000000..cca010d
--- /dev/null
+++ b/clients/binsa/index.html
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+ <%= htmlWebpackPlugin.options.packageJson.title || 'Webpack App'%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/package-lock.json b/clients/binsa/package-lock.json
new file mode 100644
index 0000000..ea505de
--- /dev/null
+++ b/clients/binsa/package-lock.json
@@ -0,0 +1,16484 @@
+{
+ "name": "binsa",
+ "version": "2.0.5",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.32",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.32.tgz",
+ "integrity": "sha512-EVq4T1a2GviKiQ75OfxNrGPPhJyXzg9jjORuuwhloZbFdrhT4FHa73sv9OFWBwX7rl2b6bxBVmfxrBQYWYz9tA==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.0.0-beta.32",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.32.tgz",
+ "integrity": "sha512-ysfIt7p72xm5fjSJsv7fMVN/j+EwIdqu8/MJjt6TqB4wM2r6rFRi0ujBTWDkLGQkRB/P5uDV8qcFCHAHnNzmsg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "7.0.0-beta.32",
+ "@babel/template": "7.0.0-beta.32",
+ "@babel/types": "7.0.0-beta.32"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0-beta.32",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.32.tgz",
+ "integrity": "sha512-bm7lIlizycJQY5SJ3HXWJV4XjSrOt1onzrDcOxUo9FEnKRZDEr/zfi5ar2s5tvvZvve/jGHwZKVKekRw2cjPCQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.32"
+ }
+ },
+ "@babel/template": {
+ "version": "7.0.0-beta.32",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.32.tgz",
+ "integrity": "sha512-DB9sLgX2mfE29vjAkxHlzLyWr31EO9HaYoAM/UsPSsL70Eudl0i25URwIfQT6S6ckeVFnFP1t6PhERVeV4EAHA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.32",
+ "@babel/types": "7.0.0-beta.32",
+ "babylon": "7.0.0-beta.32",
+ "lodash": "4.17.4"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.32",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.32.tgz",
+ "integrity": "sha512-PvAmyP2IJEBVAuE5yVzrTSWCCN9VMa1eGns8w3w6FYD/ivHSUmS7n+F40Fmjn+0nCQSUFR96wP0CqQ4jxTnF4Q==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.0.0-beta.32",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.32.tgz",
+ "integrity": "sha512-dGe2CLduCIZ/iDkbmnqspQguRy5ARvI+zC8TiwFnsJ2YYO2TWK7x2aEwrbkSmi0iPlBP+Syiag7Idc1qNQq74g==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.32",
+ "@babel/helper-function-name": "7.0.0-beta.32",
+ "@babel/types": "7.0.0-beta.32",
+ "babylon": "7.0.0-beta.32",
+ "debug": "3.1.0",
+ "globals": "10.3.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.32",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.32.tgz",
+ "integrity": "sha512-PvAmyP2IJEBVAuE5yVzrTSWCCN9VMa1eGns8w3w6FYD/ivHSUmS7n+F40Fmjn+0nCQSUFR96wP0CqQ4jxTnF4Q==",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "globals": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.3.0.tgz",
+ "integrity": "sha512-1g6qO5vMbiPHbRTDtR9JVjRkAhkgH4nSANYGyx1eOfqgxcMnYMMD+7MjmjfzXjwFpVUE/7/NzF+jQxYE7P4r7A==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.0.0-beta.32",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.32.tgz",
+ "integrity": "sha512-w8+wzVcYCMb9OfaBfay2Vg5hyj7UfBX6qQtA+kB0qsW1h1NH/7xHMwvTZNqkuFBwjz5wxGS2QmaIcC3HH+UoxA==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "@cypress/listr-verbose-renderer": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz",
+ "integrity": "sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-cursor": "1.0.2",
+ "date-fns": "1.29.0",
+ "figures": "1.7.0"
+ }
+ },
+ "@cypress/xvfb": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.0.4.tgz",
+ "integrity": "sha512-Ey34vw8L2L1tFBLAsjCYlv24TVjzuU+sCUwONj8xMdlM5iNEHgj+AoMPR6C1LCijm/9Ue/FNAMffDe/lmKYWTA==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
+ "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
+ },
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "requires": {
+ "acorn": "4.0.13"
+ }
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz",
+ "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=",
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I="
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+ },
+ "ansi-align": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz",
+ "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "ansi-escapes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
+ "dev": true
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "requires": {
+ "micromatch": "2.3.11",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "apartment": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/apartment/-/apartment-1.1.1.tgz",
+ "integrity": "sha1-/ZQGzcyodTWULxWzYKGrWkqpfiY=",
+ "dev": true,
+ "requires": {
+ "css": "2.2.1",
+ "get-stdin": "5.0.1",
+ "lodash": "3.10.1",
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "dev": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "argsarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz",
+ "integrity": "sha1-bnIHtOzbObCviDA/pa4ivajfYcs="
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.9.0"
+ }
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
+ "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "asset-resolver": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/asset-resolver/-/asset-resolver-0.3.3.tgz",
+ "integrity": "sha1-GVJY/cA6AXOdZHIUHT6OALVk6Ns=",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.4.7",
+ "debug": "2.6.1",
+ "filesize": "3.5.5",
+ "globby": "6.1.0",
+ "hash": "0.2.0",
+ "lodash": "4.17.4",
+ "meow": "3.7.0",
+ "mime": "1.3.4",
+ "object": "0.1.1",
+ "request": "2.79.0"
+ },
+ "dependencies": {
+ "bluebird": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
+ "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.1.tgz",
+ "integrity": "sha1-eYVQkLosTjEVzH2HaUkdWPBJE1E=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.11.0",
+ "is-my-json-valid": "2.16.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.2",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.1.0"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true
+ }
+ }
+ },
+ "ast-types": {
+ "version": "0.9.6",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz",
+ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk="
+ },
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+ },
+ "async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz",
+ "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=",
+ "dev": true
+ },
+ "attempt-x": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/attempt-x/-/attempt-x-1.1.1.tgz",
+ "integrity": "sha512-hIp37ojJRRW8ExWSxxLpkDHUufk/DFfsb7/cUC1cVbBg7JV4gJTkCTRa44dlL9e5jx1P3VNrjL7QOQfi4MyltA=="
+ },
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000764",
+ "normalize-range": "0.1.2",
+ "num2fraction": "1.2.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz",
+ "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=",
+ "requires": {
+ "follow-redirects": "1.2.5",
+ "is-buffer": "1.1.6"
+ }
+ },
+ "babel-cli": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
+ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-polyfill": "6.26.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "chokidar": "1.7.0",
+ "commander": "2.11.0",
+ "convert-source-map": "1.5.0",
+ "fs-readdir-recursive": "1.1.0",
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "output-file-sync": "1.1.2",
+ "path-is-absolute": "1.0.1",
+ "slash": "1.0.0",
+ "source-map": "0.5.7",
+ "v8flags": "2.1.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.0",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-eslint": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.0.2.tgz",
+ "integrity": "sha512-yyl5U088oE+419+BNLJDKVWkUokuPLQeQt9ZTy9uM9kAzbtQgyYL3JkG425B8jxXA7MwTxnDAtRLMKJNH36qjA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.32",
+ "@babel/traverse": "7.0.0-beta.32",
+ "@babel/types": "7.0.0-beta.32",
+ "babylon": "7.0.0-beta.32"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.32",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.32.tgz",
+ "integrity": "sha512-PvAmyP2IJEBVAuE5yVzrTSWCCN9VMa1eGns8w3w6FYD/ivHSUmS7n+F40Fmjn+0nCQSUFR96wP0CqQ4jxTnF4Q==",
+ "dev": true
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-explode-assignable-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
+ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-module-imports": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-module-imports/-/babel-helper-module-imports-7.0.0-beta.3.tgz",
+ "integrity": "sha512-bdPrIXbUTYfREhRhjbN8SstwQaj0S4+rW4PKi1f2Wc5fizSh0hGYkfXUdiSSOgyTydm956tAyz4FrG61bqdQyw==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3",
+ "lodash": "4.17.4"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "2.0.0"
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-loader": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz",
+ "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "1.0.0",
+ "loader-utils": "1.1.0",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-lodash": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.2.tgz",
+ "integrity": "sha512-lNsptTRfc0FTdW56O087EiKEADVEjJo2frDQ97olMjCKbRZfZPu7MvdyxnZLOoDpuTCtavN8/4Zk65x4gT+C3Q==",
+ "dev": true,
+ "requires": {
+ "babel-helper-module-imports": "7.0.0-beta.3",
+ "babel-types": "6.26.0",
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "require-package-name": "2.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ }
+ }
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
+ "dev": true
+ },
+ "babel-plugin-syntax-dynamic-import": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+ "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
+ "dev": true
+ },
+ "babel-plugin-syntax-exponentiation-operator": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+ "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
+ "dev": true
+ },
+ "babel-plugin-syntax-flow": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
+ "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=",
+ "dev": true
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
+ "dev": true
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ },
+ "dependencies": {
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ }
+ }
+ },
+ "babel-plugin-transform-exponentiation-operator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
+ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-flow-strip-types": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",
+ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-flow": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-runtime": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
+ "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
+ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.9.0",
+ "invariant": "2.2.2",
+ "semver": "5.4.1"
+ },
+ "dependencies": {
+ "browserslist": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.9.0.tgz",
+ "integrity": "sha512-vJEBcDTANoDhSHL46NeOEW5hvQw7It9uCqzeFPQhpawXfnOwnpvW5C97vn1eGJ7iCkSg8wWU0nYObE7d/N95Iw==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "1.0.30000764",
+ "electron-to-chromium": "1.3.27"
+ }
+ }
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base62": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base62/-/base62-1.2.1.tgz",
+ "integrity": "sha512-xVtfFHNPUzpCNHygpXFGMlDk3saxXLQcOOQzAAk6ibvlAHgT6WKXLv9rMFhcyEK1n9LuDmp/LxyGW/Fm9L8++g=="
+ },
+ "base64-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
+ "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw=="
+ },
+ "base64url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz",
+ "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs="
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "beeper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
+ },
+ "bignumber.js": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz",
+ "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz",
+ "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA="
+ },
+ "bindings": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
+ "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==",
+ "optional": true
+ },
+ "bl": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
+ "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+ },
+ "bmp-js": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.3.tgz",
+ "integrity": "sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ },
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.15"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "dev": true
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "2.1.1",
+ "deep-equal": "1.0.1",
+ "dns-equal": "1.0.0",
+ "dns-txt": "2.0.2",
+ "multicast-dns": "6.1.1",
+ "multicast-dns-service-types": "1.1.0"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz",
+ "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=",
+ "dev": true
+ }
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "boxen": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.5.1.tgz",
+ "integrity": "sha1-W3PYhA6388ihVcv2ntPtaNRyABQ=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "chalk": "1.1.3",
+ "cli-boxes": "1.0.0",
+ "filled-array": "1.1.0",
+ "object-assign": "4.1.1",
+ "repeating": "2.0.1",
+ "string-width": "1.0.2",
+ "widest-line": "1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browserify-aes": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
+ "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "requires": {
+ "browserify-aes": "1.1.1",
+ "browserify-des": "1.0.0",
+ "evp_bytestokey": "1.0.3"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "randombytes": "2.0.5"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "elliptic": "6.4.0",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "requires": {
+ "pako": "0.2.9"
+ }
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "1.0.30000764",
+ "electron-to-chromium": "1.3.27"
+ }
+ },
+ "buefy": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/buefy/-/buefy-0.6.1.tgz",
+ "integrity": "sha512-GRh7GpSbcjKwXHd8lFQbsiVexDk9mVgPGNeNxhQfNdlCj61b4ExJC4/V5KCn+OEEO9NzsLufVOo6RK38a/aS9Q==",
+ "requires": {
+ "bulma": "0.6.1",
+ "vue": "2.5.3"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "requires": {
+ "base64-js": "1.2.1",
+ "ieee754": "1.1.8",
+ "isarray": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ }
+ }
+ },
+ "buffer-alloc": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz",
+ "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=",
+ "dev": true,
+ "requires": {
+ "buffer-alloc-unsafe": "0.1.1",
+ "buffer-fill": "0.1.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz",
+ "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=",
+ "dev": true
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true
+ },
+ "buffer-equal": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
+ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
+ "dev": true
+ },
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
+ },
+ "buffer-fill": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.0.tgz",
+ "integrity": "sha1-ypRw6NTRuXf9dUP04qtqfclRAag=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.1.tgz",
+ "integrity": "sha1-V7GLHaChnsBvM4N6UnWiQjUb114=",
+ "requires": {
+ "is-array-buffer-x": "1.7.0"
+ }
+ },
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "buffer-to-vinyl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz",
+ "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=",
+ "dev": true,
+ "requires": {
+ "file-type": "3.9.0",
+ "readable-stream": "2.3.3",
+ "uuid": "2.0.3",
+ "vinyl": "1.2.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+ },
+ "bulma": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.6.1.tgz",
+ "integrity": "sha1-XyGnfAwG99gAUcBmKMI1Fggb1kk="
+ },
+ "bulma-extensions": {
+ "version": "1.0.14",
+ "resolved": "https://registry.npmjs.org/bulma-extensions/-/bulma-extensions-1.0.14.tgz",
+ "integrity": "sha1-29U+3hqiTnVZ88gWIbUYheSxfrw="
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.1.tgz",
+ "integrity": "sha512-dRHYcs9LvG9cHgdPzjiI+/eS7e1xRhULrcyOx04RZQsszNJXU2SL9CyG60yLnge282Qq5nwTv+ieK2fH+WPZmA==",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "chownr": "1.0.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lru-cache": "4.1.1",
+ "mississippi": "1.3.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.2",
+ "ssri": "5.0.0",
+ "unique-filename": "1.1.0",
+ "y18n": "3.2.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ }
+ }
+ },
+ "cached-constructors-x": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cached-constructors-x/-/cached-constructors-x-1.0.0.tgz",
+ "integrity": "sha512-JVP0oilYlPgBTD8bkQ+of7hSIJRtydCCJiMtzdRMXVQ98gdj0NyrJTZzbu5wtlO26Ev/1HXRTtbBNsVlLJ3+3A=="
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true,
+ "requires": {
+ "no-case": "2.3.2",
+ "upper-case": "1.1.3"
+ }
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ }
+ }
+ },
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000764",
+ "lodash.memoize": "4.1.2",
+ "lodash.uniq": "4.5.0"
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30000764",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000764.tgz",
+ "integrity": "sha1-1zqxGuYvap4vaYZ9bZwjrj8uXY0="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000764",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000764.tgz",
+ "integrity": "sha1-l+p0cvnT5pHu3jTyGYPPwhmseEI=",
+ "dev": true
+ },
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
+ "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "cave": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cave/-/cave-2.0.0.tgz",
+ "integrity": "sha1-DFd66oWSgBXQKgK2GIgG2VvrJiY=",
+ "dev": true,
+ "requires": {
+ "css": "2.2.1",
+ "get-stdin": "3.0.2",
+ "lodash": "2.4.2",
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-3.0.2.tgz",
+ "integrity": "sha1-wc7SS5A5s43thb3xYeV3E7bdSr4=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "caw": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
+ "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
+ "dev": true,
+ "requires": {
+ "get-proxy": "2.1.0",
+ "isurl": "1.0.0",
+ "tunnel-agent": "0.6.0",
+ "url-to-options": "1.0.1"
+ }
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chacha": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chacha/-/chacha-2.1.0.tgz",
+ "integrity": "sha1-9NV8h2ihtCBumWf4WLSNp90o6qY=",
+ "requires": {
+ "chacha-native": "2.0.2",
+ "inherits": "2.0.3",
+ "readable-stream": "1.1.14"
+ }
+ },
+ "chacha-native": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/chacha-native/-/chacha-native-2.0.2.tgz",
+ "integrity": "sha1-+grrzOywTElnPSpz0FlGIGf1vuQ=",
+ "optional": true,
+ "requires": {
+ "bindings": "1.3.0",
+ "inherits": "2.0.3",
+ "nan": "2.8.0"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "charm": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz",
+ "integrity": "sha1-BsIe7RobBq62dVPNxT4jJ0usIpY=",
+ "dev": true
+ },
+ "check-more-types": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
+ "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=",
+ "dev": true
+ },
+ "cheerio": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz",
+ "integrity": "sha1-dy5wFfLuKZZQltcepBdbdas1SSU=",
+ "dev": true,
+ "requires": {
+ "css-select": "1.0.0",
+ "dom-serializer": "0.1.0",
+ "entities": "1.1.1",
+ "htmlparser2": "3.8.3",
+ "lodash": "3.10.1"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
+ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
+ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.3.0",
+ "domutils": "1.5.1",
+ "entities": "1.0.0",
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
+ "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ }
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "requires": {
+ "anymatch": "1.3.2",
+ "async-each": "1.0.1",
+ "fsevents": "1.2.3",
+ "glob-parent": "2.0.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "2.0.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.1.tgz",
+ "integrity": "sha512-vHDDF/bP9RYpTWtUhpJRhCFdvvp3iDWvEbuDbWgvjUrNGV1MXJrE0MPcwGtEled04m61iwdBLUIHZtDgzWS4ZQ==",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "requires": {
+ "chalk": "1.1.3"
+ }
+ },
+ "clean-css": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz",
+ "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "clean-webpack-plugin": {
+ "version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.17.tgz",
+ "integrity": "sha512-Bts/V725v8Ijosp4K1cqppQXgXcrohxoMsg0CV2xL4y/vua1G5pAfHEW/eJIiKF+GNNG72mdjbipxMRFEms7yg==",
+ "dev": true,
+ "requires": {
+ "rimraf": "2.6.2"
+ }
+ },
+ "cli": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
+ "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
+ "dev": true,
+ "requires": {
+ "exit": "0.1.2",
+ "glob": "7.1.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ }
+ }
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "1.0.1"
+ }
+ },
+ "cli-spinners": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
+ "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
+ "dev": true
+ },
+ "cli-truncate": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
+ "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "0.0.4",
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8="
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg="
+ },
+ "clone-deep": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz",
+ "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=",
+ "dev": true,
+ "requires": {
+ "for-own": "1.0.0",
+ "is-plain-object": "2.0.4",
+ "kind-of": "3.2.2",
+ "shallow-clone": "0.1.2"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ }
+ }
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz",
+ "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "process-nextick-args": "1.0.7",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "color": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "requires": {
+ "clone": "1.0.3",
+ "color-convert": "1.9.1",
+ "color-string": "0.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "requires": {
+ "color": "0.11.4",
+ "css-color-names": "0.0.4",
+ "has": "1.0.1"
+ }
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ=="
+ },
+ "common-tags": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz",
+ "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "commoner": {
+ "version": "0.10.8",
+ "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz",
+ "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=",
+ "requires": {
+ "commander": "2.11.0",
+ "detective": "4.5.0",
+ "glob": "5.0.15",
+ "graceful-fs": "4.1.11",
+ "iconv-lite": "0.4.19",
+ "mkdirp": "0.5.1",
+ "private": "0.1.8",
+ "q": "1.5.1",
+ "recast": "0.11.23"
+ }
+ },
+ "compressible": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz",
+ "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "compression": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz",
+ "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "bytes": "3.0.0",
+ "compressible": "2.0.12",
+ "debug": "2.6.9",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.2"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz",
+ "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=",
+ "dev": true,
+ "requires": {
+ "ini": "1.3.4",
+ "proto-list": "1.2.4"
+ }
+ },
+ "configstore": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz",
+ "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "3.0.0",
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1",
+ "os-tmpdir": "1.0.2",
+ "osenv": "0.1.4",
+ "uuid": "2.0.3",
+ "write-file-atomic": "1.3.4",
+ "xdg-basedir": "2.0.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
+ "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=",
+ "dev": true
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "requires": {
+ "date-now": "0.1.4"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "consolidate": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz",
+ "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=",
+ "requires": {
+ "bluebird": "3.5.1"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz",
+ "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "dev": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "fs-write-stream-atomic": "1.0.10",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2",
+ "run-queue": "1.0.3"
+ }
+ },
+ "copy-webpack-plugin": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.2.0.tgz",
+ "integrity": "sha512-eZERim02YjJcepLjrToQMapOoRLfiXewJi9zJON6xXNNJSUhkGzL1L/yFjOufS0KxsnWUzc2szg9t8ZaZKJXAg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "fs-extra": "4.0.2",
+ "glob": "7.1.2",
+ "is-glob": "4.0.0",
+ "loader-utils": "0.2.17",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "node-dir": "0.1.17"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "corser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
+ "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "requires": {
+ "is-directory": "0.3.1",
+ "js-yaml": "3.7.0",
+ "minimist": "1.2.0",
+ "object-assign": "4.1.1",
+ "os-homedir": "1.0.2",
+ "parse-json": "2.2.0",
+ "require-from-string": "1.2.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "elliptic": "6.4.0"
+ }
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "1.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
+ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
+ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "critical": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/critical/-/critical-0.9.1.tgz",
+ "integrity": "sha512-KOAU4B6l9sMVLA/FuMEK5COG5D+9rpvwYMilPf3KQ1uJSx3ds2DggSqNPt625AATYt2AIcFUIvhrhm3tKIwCjg==",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "chalk": "2.3.0",
+ "cheerio": "0.22.0",
+ "clean-css": "4.1.9",
+ "cli": "1.0.1",
+ "debug": "2.6.9",
+ "filter-css": "0.1.2",
+ "finalhandler": "1.1.0",
+ "fs-extra": "4.0.2",
+ "get-port": "3.2.0",
+ "get-stdin": "5.0.1",
+ "group-args": "0.1.0",
+ "gulp-util": "3.0.8",
+ "imageinliner": "0.2.4",
+ "indent-string": "3.2.0",
+ "inline-critical": "2.4.2",
+ "lodash": "4.17.4",
+ "meow": "3.7.0",
+ "mime-types": "2.1.17",
+ "oust": "0.4.0",
+ "parseurl": "1.3.2",
+ "penthouse": "0.11.13",
+ "postcss": "6.0.14",
+ "postcss-image-inliner": "1.0.6",
+ "request": "2.81.0",
+ "serve-static": "1.13.1",
+ "slash": "1.0.0",
+ "tempfile": "2.0.0",
+ "through2": "2.0.3",
+ "tmp": "0.0.31",
+ "vinyl": "2.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "cheerio": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+ "dev": true,
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-serializer": "0.1.0",
+ "entities": "1.1.1",
+ "htmlparser2": "3.9.2",
+ "lodash.assignin": "4.2.0",
+ "lodash.bind": "4.2.1",
+ "lodash.defaults": "4.2.0",
+ "lodash.filter": "4.6.0",
+ "lodash.flatten": "4.4.0",
+ "lodash.foreach": "4.5.0",
+ "lodash.map": "4.6.0",
+ "lodash.merge": "4.6.0",
+ "lodash.pick": "4.4.0",
+ "lodash.reduce": "4.6.0",
+ "lodash.reject": "4.6.0",
+ "lodash.some": "4.6.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "vinyl": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
+ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "clone-buffer": "1.0.0",
+ "clone-stats": "1.0.0",
+ "cloneable-readable": "1.0.0",
+ "remove-trailing-separator": "1.1.0",
+ "replace-ext": "1.0.0"
+ }
+ }
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "requires": {
+ "browserify-cipher": "1.0.0",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.0",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "diffie-hellman": "5.0.2",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.14",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.5",
+ "randomfill": "1.0.3"
+ }
+ },
+ "crypto-pouch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/crypto-pouch/-/crypto-pouch-3.1.3.tgz",
+ "integrity": "sha512-sHTsAchKCyl4jAig+1Jn9TfheZHnF9rq9+16U4nmBYWUOObB/47/utxKMLy/VXlQcCLu4gPceIKrADnBCf9mhg==",
+ "requires": {
+ "chacha": "2.1.0",
+ "native-crypto": "1.8.1",
+ "pouchdb-promise": "6.3.4",
+ "randombytes": "2.0.5",
+ "transform-pouch": "1.1.4",
+ "uuid": "3.1.0"
+ }
+ },
+ "css": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz",
+ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "source-map": "0.1.43",
+ "source-map-resolve": "0.3.1",
+ "urix": "0.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
+ },
+ "css-fork-pocketjoso": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-fork-pocketjoso/-/css-fork-pocketjoso-2.2.1.tgz",
+ "integrity": "sha1-ondI76ZzUfReRUmmgGRSvrQkQWI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "source-map": "0.1.43",
+ "source-map-resolve": "0.3.1",
+ "urix": "0.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "css-loader": {
+ "version": "0.28.7",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz",
+ "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "css-selector-tokenizer": "0.7.0",
+ "cssnano": "3.10.0",
+ "icss-utils": "2.1.0",
+ "loader-utils": "1.1.0",
+ "lodash.camelcase": "4.3.0",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-modules-extract-imports": "1.1.0",
+ "postcss-modules-local-by-default": "1.2.0",
+ "postcss-modules-scope": "1.1.0",
+ "postcss-modules-values": "1.3.0",
+ "postcss-value-parser": "3.3.0",
+ "source-list-map": "2.0.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "css-mediaquery": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz",
+ "integrity": "sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA=",
+ "dev": true
+ },
+ "css-parse": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+ "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
+ "dev": true
+ },
+ "css-select": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.0.0.tgz",
+ "integrity": "sha1-sRIcpRhI3SZOIkTQWM7iVN7rRLA=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "1.0.0",
+ "domutils": "1.4.3",
+ "nth-check": "1.0.1"
+ },
+ "dependencies": {
+ "domutils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz",
+ "integrity": "sha1-CGVRN5bGswYDGFDhdVFrr4C3Km8=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ }
+ }
+ },
+ "css-selector-tokenizer": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
+ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
+ "requires": {
+ "cssesc": "0.1.0",
+ "fastparse": "1.1.1",
+ "regexpu-core": "1.0.0"
+ }
+ },
+ "css-stringify": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.4.1.tgz",
+ "integrity": "sha1-JSzL8D9yOgCb3Ydw/n6ydBca/fo=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.1.43"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "css-what": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-1.0.0.tgz",
+ "integrity": "sha1-18wt9FGAZm+Z0rFEYmOUaeAPc2w=",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
+ "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q="
+ },
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "requires": {
+ "autoprefixer": "6.7.7",
+ "decamelize": "1.2.0",
+ "defined": "1.0.0",
+ "has": "1.0.1",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-calc": "5.3.1",
+ "postcss-colormin": "2.2.2",
+ "postcss-convert-values": "2.6.1",
+ "postcss-discard-comments": "2.0.4",
+ "postcss-discard-duplicates": "2.1.0",
+ "postcss-discard-empty": "2.1.0",
+ "postcss-discard-overridden": "0.1.1",
+ "postcss-discard-unused": "2.2.3",
+ "postcss-filter-plugins": "2.0.2",
+ "postcss-merge-idents": "2.1.7",
+ "postcss-merge-longhand": "2.0.2",
+ "postcss-merge-rules": "2.1.2",
+ "postcss-minify-font-values": "1.0.5",
+ "postcss-minify-gradients": "1.0.5",
+ "postcss-minify-params": "1.2.2",
+ "postcss-minify-selectors": "2.1.1",
+ "postcss-normalize-charset": "1.1.1",
+ "postcss-normalize-url": "3.0.8",
+ "postcss-ordered-values": "2.2.3",
+ "postcss-reduce-idents": "2.4.0",
+ "postcss-reduce-initial": "1.0.1",
+ "postcss-reduce-transforms": "1.0.4",
+ "postcss-svgo": "2.1.6",
+ "postcss-unique-selectors": "2.0.2",
+ "postcss-value-parser": "3.3.0",
+ "postcss-zindex": "2.2.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "requires": {
+ "clap": "1.2.3",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "1.0.2"
+ }
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+ "dev": true
+ },
+ "cypress": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cypress/-/cypress-1.0.3.tgz",
+ "integrity": "sha1-7zqPvnLW9pssAuOE20BcxJxXc74=",
+ "dev": true,
+ "requires": {
+ "@cypress/listr-verbose-renderer": "0.4.1",
+ "@cypress/xvfb": "1.0.4",
+ "bluebird": "3.5.0",
+ "chalk": "2.1.0",
+ "check-more-types": "2.24.0",
+ "commander": "2.11.0",
+ "common-tags": "1.4.0",
+ "debug": "2.6.8",
+ "dev-null": "0.1.1",
+ "extract-zip": "1.6.5",
+ "fs-extra": "4.0.1",
+ "getos": "2.8.4",
+ "glob": "7.1.2",
+ "is-ci": "1.0.10",
+ "is-installed-globally": "0.1.0",
+ "lazy-ass": "1.6.0",
+ "listr": "0.12.0",
+ "lodash": "4.17.4",
+ "minimist": "1.2.0",
+ "progress": "1.1.8",
+ "ramda": "0.24.1",
+ "request": "2.81.0",
+ "request-progress": "0.3.1",
+ "tmp": "0.0.31",
+ "url": "0.11.0",
+ "yauzl": "2.8.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
+ "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz",
+ "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "3.0.1",
+ "universalify": "0.1.1"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "requires": {
+ "es5-ext": "0.10.35"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "date-fns": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz",
+ "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==",
+ "dev": true
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+ },
+ "dateformat": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+ "dev": true
+ },
+ "de-indent": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
+ "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decompress": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz",
+ "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=",
+ "dev": true,
+ "requires": {
+ "buffer-to-vinyl": "1.1.0",
+ "concat-stream": "1.6.0",
+ "decompress-tar": "3.1.0",
+ "decompress-tarbz2": "3.1.0",
+ "decompress-targz": "3.1.0",
+ "decompress-unzip": "3.4.0",
+ "stream-combiner2": "1.1.1",
+ "vinyl-assign": "1.2.1",
+ "vinyl-fs": "2.4.4"
+ }
+ },
+ "decompress-tar": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz",
+ "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=",
+ "dev": true,
+ "requires": {
+ "is-tar": "1.0.0",
+ "object-assign": "2.1.1",
+ "strip-dirs": "1.1.1",
+ "tar-stream": "1.5.5",
+ "through2": "0.6.5",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "0.0.1"
+ }
+ }
+ }
+ },
+ "decompress-tarbz2": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz",
+ "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=",
+ "dev": true,
+ "requires": {
+ "is-bzip2": "1.0.0",
+ "object-assign": "2.1.1",
+ "seek-bzip": "1.0.5",
+ "strip-dirs": "1.1.1",
+ "tar-stream": "1.5.5",
+ "through2": "0.6.5",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "0.0.1"
+ }
+ }
+ }
+ },
+ "decompress-targz": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz",
+ "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=",
+ "dev": true,
+ "requires": {
+ "is-gzip": "1.0.0",
+ "object-assign": "2.1.1",
+ "strip-dirs": "1.1.1",
+ "tar-stream": "1.5.5",
+ "through2": "0.6.5",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "0.0.1"
+ }
+ }
+ }
+ },
+ "decompress-unzip": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz",
+ "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=",
+ "dev": true,
+ "requires": {
+ "is-zip": "1.0.0",
+ "read-all-stream": "3.1.0",
+ "stat-mode": "0.2.2",
+ "strip-dirs": "1.1.1",
+ "through2": "2.0.3",
+ "vinyl": "1.2.0",
+ "yauzl": "2.8.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8="
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
+ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "dev": true,
+ "requires": {
+ "foreach": "2.0.5",
+ "object-keys": "1.0.11"
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "detect-node": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz",
+ "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
+ "dev": true
+ },
+ "detective": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz",
+ "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=",
+ "requires": {
+ "acorn": "4.0.13",
+ "defined": "1.0.0"
+ }
+ },
+ "dev-null": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dev-null/-/dev-null-0.1.1.tgz",
+ "integrity": "sha1-WiBc48Ky73e2I41roXnrdMag6Bg=",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.0.5"
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz",
+ "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==",
+ "dev": true,
+ "requires": {
+ "ip": "1.1.5",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "1.1.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
+ "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "dom-converter": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz",
+ "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
+ "dev": true,
+ "requires": {
+ "utila": "0.3.3"
+ },
+ "dependencies": {
+ "utila": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
+ "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=",
+ "dev": true
+ }
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "dom-walk": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
+ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=",
+ "dev": true
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw="
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
+ "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz",
+ "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "dot-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "dev": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ }
+ },
+ "download": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/download/-/download-5.0.3.tgz",
+ "integrity": "sha1-Y1N/l3+ZJmow64oqL70fILgAD3o=",
+ "dev": true,
+ "requires": {
+ "caw": "2.0.1",
+ "decompress": "4.2.0",
+ "filenamify": "2.0.0",
+ "get-stream": "3.0.0",
+ "got": "6.7.1",
+ "mkdirp": "0.5.1",
+ "pify": "2.3.0"
+ },
+ "dependencies": {
+ "decompress": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz",
+ "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=",
+ "dev": true,
+ "requires": {
+ "decompress-tar": "4.1.1",
+ "decompress-tarbz2": "4.1.1",
+ "decompress-targz": "4.1.1",
+ "decompress-unzip": "4.0.1",
+ "graceful-fs": "4.1.11",
+ "make-dir": "1.1.0",
+ "pify": "2.3.0",
+ "strip-dirs": "2.1.0"
+ }
+ },
+ "decompress-tar": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+ "dev": true,
+ "requires": {
+ "file-type": "5.2.0",
+ "is-stream": "1.1.0",
+ "tar-stream": "1.5.5"
+ }
+ },
+ "decompress-tarbz2": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+ "dev": true,
+ "requires": {
+ "decompress-tar": "4.1.1",
+ "file-type": "6.2.0",
+ "is-stream": "1.1.0",
+ "seek-bzip": "1.0.5",
+ "unbzip2-stream": "1.2.5"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+ "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
+ "dev": true
+ }
+ }
+ },
+ "decompress-targz": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+ "dev": true,
+ "requires": {
+ "decompress-tar": "4.1.1",
+ "file-type": "5.2.0",
+ "is-stream": "1.1.0"
+ }
+ },
+ "decompress-unzip": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+ "dev": true,
+ "requires": {
+ "file-type": "3.9.0",
+ "get-stream": "2.3.1",
+ "pify": "2.3.0",
+ "yauzl": "2.8.0"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
+ }
+ }
+ }
+ },
+ "file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "dev": true
+ },
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ }
+ },
+ "is-natural-number": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "strip-dirs": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+ "dev": true,
+ "requires": {
+ "is-natural-number": "4.0.1"
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "dev": true
+ }
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz",
+ "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "ecdsa-sig-formatter": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz",
+ "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=",
+ "requires": {
+ "base64url": "2.0.0",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "ecstatic": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-2.2.1.tgz",
+ "integrity": "sha512-ztE4WqheoWLh3wv+HQwy7dACnvNY620coWpa+XqY6R2cVWgaAT2lUISU1Uf7JpdLLJCURktJOaA9av2AOzsyYQ==",
+ "dev": true,
+ "requires": {
+ "he": "1.1.1",
+ "mime": "1.4.1",
+ "minimist": "1.2.0",
+ "url-join": "2.0.2"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "ejs": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz",
+ "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo="
+ },
+ "electron-to-chromium": {
+ "version": "1.3.27",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz",
+ "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0="
+ },
+ "elegant-spinner": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
+ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0",
+ "hash.js": "1.1.3",
+ "hmac-drbg": "1.0.1",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "encodeurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz",
+ "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=",
+ "dev": true
+ },
+ "encoding": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.4.19"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
+ "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "memory-fs": "0.4.1",
+ "object-assign": "4.1.1",
+ "tapable": "0.2.8"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
+ "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
+ "requires": {
+ "prr": "0.0.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz",
+ "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "1.1.1",
+ "function-bind": "1.1.1",
+ "has": "1.0.1",
+ "is-callable": "1.1.3",
+ "is-regex": "1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+ "dev": true,
+ "requires": {
+ "is-callable": "1.1.3",
+ "is-date-object": "1.0.1",
+ "is-symbol": "1.0.1"
+ }
+ },
+ "es3ify": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.2.2.tgz",
+ "integrity": "sha1-Xa4+ZQ5b42hLiAZlE9Uo0JJimGI=",
+ "requires": {
+ "esprima": "2.7.3",
+ "jstransform": "11.0.3",
+ "through": "2.3.8"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.35",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz",
+ "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=",
+ "requires": {
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-iterator": "2.0.3",
+ "es6-set": "0.1.5",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-promise": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz",
+ "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng=="
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "requires": {
+ "es6-map": "0.1.5",
+ "es6-weak-map": "2.0.2",
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz",
+ "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.3.0",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.3.0",
+ "concat-stream": "1.6.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "doctrine": "2.0.0",
+ "eslint-scope": "3.7.1",
+ "espree": "3.5.2",
+ "esquery": "1.0.0",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "functional-red-black-tree": "1.0.1",
+ "glob": "7.1.2",
+ "globals": "9.18.0",
+ "ignore": "3.3.7",
+ "imurmurhash": "0.1.4",
+ "inquirer": "3.3.0",
+ "is-resolvable": "1.0.0",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
+ "require-uncached": "1.0.3",
+ "semver": "5.4.1",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "4.0.2",
+ "text-table": "0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-standard": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz",
+ "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=",
+ "dev": true
+ },
+ "eslint-config-vue": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-vue/-/eslint-config-vue-2.0.2.tgz",
+ "integrity": "sha1-o6sQBImeSTJ6lMY+JNR6OWsvSEg=",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz",
+ "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "resolve": "1.5.0"
+ }
+ },
+ "eslint-loader": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.9.0.tgz",
+ "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==",
+ "dev": true,
+ "requires": {
+ "loader-fs-cache": "1.0.1",
+ "loader-utils": "1.1.0",
+ "object-assign": "4.1.1",
+ "object-hash": "1.2.0",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz",
+ "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "pkg-dir": "1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2"
+ }
+ }
+ }
+ },
+ "eslint-plugin-babel": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz",
+ "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=",
+ "dev": true
+ },
+ "eslint-plugin-html": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.0.tgz",
+ "integrity": "sha512-xK/909qOTq5JVzuO2jo4a24nQcWhkOBz9dOIkORvB7RxC75a4b6B9wFpBXAl8WDhwJGFDj5gBDRN+/L3kK/ghw==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "3.9.2"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz",
+ "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1",
+ "contains-path": "0.1.0",
+ "debug": "2.6.9",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "0.3.1",
+ "eslint-module-utils": "2.1.1",
+ "has": "1.0.1",
+ "lodash.cond": "4.5.2",
+ "minimatch": "3.0.4",
+ "read-pkg-up": "2.0.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-node": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz",
+ "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==",
+ "dev": true,
+ "requires": {
+ "ignore": "3.3.7",
+ "minimatch": "3.0.4",
+ "resolve": "1.5.0",
+ "semver": "5.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz",
+ "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==",
+ "dev": true
+ },
+ "eslint-plugin-react": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz",
+ "integrity": "sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==",
+ "dev": true,
+ "requires": {
+ "doctrine": "2.0.0",
+ "has": "1.0.1",
+ "jsx-ast-utils": "2.0.1",
+ "prop-types": "15.6.0"
+ }
+ },
+ "eslint-plugin-standard": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz",
+ "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=",
+ "dev": true
+ },
+ "eslint-plugin-vue": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-2.1.0.tgz",
+ "integrity": "sha1-UO0LfpojidkOaJdDo8wmtQJEG2k=",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-html": "3.2.2",
+ "eslint-plugin-react": "7.4.0"
+ },
+ "dependencies": {
+ "eslint-plugin-html": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-3.2.2.tgz",
+ "integrity": "sha512-sSuafathF6ImPrzF2vUKEJY6Llq06d/riMTMzlsruDRDhNsQMYp2viUKo+jx+JRr1QevskeUpQcuptp2gN1XVQ==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "3.9.2",
+ "semver": "5.4.1"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "esmangle-evaluator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz",
+ "integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY="
+ },
+ "espree": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz",
+ "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.2.1",
+ "acorn-jsx": "3.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "requires": {
+ "estraverse": "4.2.0",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35"
+ }
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+ },
+ "eventsource": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz",
+ "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
+ "dev": true,
+ "requires": {
+ "original": "1.0.0"
+ }
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ }
+ },
+ "exif-parser": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz",
+ "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=",
+ "dev": true
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "exit-hook": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "express": {
+ "version": "4.16.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz",
+ "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.2",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "finalhandler": "1.1.0",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "2.0.2",
+ "qs": "6.5.1",
+ "range-parser": "1.2.0",
+ "safe-buffer": "5.1.1",
+ "send": "0.16.1",
+ "serve-static": "1.13.1",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.3.1",
+ "type-is": "1.6.15",
+ "utils-merge": "1.0.1",
+ "vary": "1.1.2"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "external-editor": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.5.tgz",
+ "integrity": "sha512-Msjo64WT5W+NhOpQXh0nOHm+n0RfU1QUwDnKYvJ8dEJ8zlwLrqXNTv5mSUTJpepf41PDJGyhueTw2vNZW+Fr/w==",
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.4.19",
+ "jschardet": "1.6.0",
+ "tmp": "0.0.33"
+ },
+ "dependencies": {
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "extract-text-webpack-plugin": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz",
+ "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==",
+ "dev": true,
+ "requires": {
+ "async": "2.6.0",
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0",
+ "webpack-sources": "1.0.2"
+ }
+ },
+ "extract-zip": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.5.tgz",
+ "integrity": "sha1-maBnNbbqIOqbcF13ms/8yHz/BEA=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.0",
+ "debug": "2.2.0",
+ "mkdirp": "0.5.0",
+ "yauzl": "2.4.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+ "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ },
+ "yauzl": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
+ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
+ "dev": true,
+ "requires": {
+ "fd-slicer": "1.0.1"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "falafel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz",
+ "integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=",
+ "requires": {
+ "acorn": "1.2.2",
+ "foreach": "2.0.5",
+ "isarray": "0.0.1",
+ "object-keys": "1.0.11"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
+ "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
+ }
+ }
+ },
+ "fancy-log": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz",
+ "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "time-stamp": "1.1.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastparse": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz",
+ "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg="
+ },
+ "favicons": {
+ "version": "4.8.6",
+ "resolved": "https://registry.npmjs.org/favicons/-/favicons-4.8.6.tgz",
+ "integrity": "sha1-orE4AKs/7CcVvI8n+oQdA41HYeI=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "cheerio": "0.19.0",
+ "clone": "1.0.3",
+ "colors": "1.1.2",
+ "harmony-reflect": "1.5.1",
+ "image-size": "0.4.0",
+ "jimp": "0.2.28",
+ "jsontoxml": "0.0.11",
+ "merge-defaults": "0.2.1",
+ "mkdirp": "0.5.1",
+ "node-rest-client": "1.8.0",
+ "require-directory": "2.1.1",
+ "svg2png": "3.0.1",
+ "through2": "2.0.3",
+ "tinycolor2": "1.4.1",
+ "to-ico": "1.1.5",
+ "underscore": "1.8.3",
+ "vinyl": "1.2.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "favicons-webpack-plugin": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/favicons-webpack-plugin/-/favicons-webpack-plugin-0.0.7.tgz",
+ "integrity": "sha1-JTpGpPk9E30QlnYod/io7xLihkg=",
+ "dev": true,
+ "requires": {
+ "favicons": "4.8.6",
+ "loader-utils": "0.2.17",
+ "lodash": "4.17.4",
+ "webpack": "1.15.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-0.4.0.tgz",
+ "integrity": "sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.3.0.tgz",
+ "integrity": "sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "0.4.0",
+ "pbkdf2-compat": "2.0.1",
+ "ripemd160": "0.2.0",
+ "sha.js": "2.2.6"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz",
+ "integrity": "sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "memory-fs": "0.2.0",
+ "tapable": "0.1.10"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz",
+ "integrity": "sha1-8rslNovBIeORwlIN6Slpyu4KApA=",
+ "dev": true
+ }
+ }
+ },
+ "interpret": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-0.6.6.tgz",
+ "integrity": "sha1-/s16GOfOXKar+5U+H4YhOknxYls=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "memory-fs": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz",
+ "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=",
+ "dev": true,
+ "requires": {
+ "errno": "0.1.4",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "node-libs-browser": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-0.7.0.tgz",
+ "integrity": "sha1-PicsCBnjCJNeJmdECNevDhSRuDs=",
+ "dev": true,
+ "requires": {
+ "assert": "1.4.1",
+ "browserify-zlib": "0.1.4",
+ "buffer": "4.9.1",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.3.0",
+ "domain-browser": "1.1.7",
+ "events": "1.1.1",
+ "https-browserify": "0.0.1",
+ "os-browserify": "0.2.1",
+ "path-browserify": "0.0.0",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "readable-stream": "2.3.3",
+ "stream-browserify": "2.0.1",
+ "stream-http": "2.7.2",
+ "string_decoder": "0.10.31",
+ "timers-browserify": "2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "ripemd160": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz",
+ "integrity": "sha1-K/GYveFnys+lHAqSjoS2i74XH84=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.2.6.tgz",
+ "integrity": "sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ },
+ "tapable": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
+ "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.7.5",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz",
+ "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=",
+ "dev": true,
+ "requires": {
+ "async": "0.2.10",
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ }
+ }
+ },
+ "watchpack": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-0.2.9.tgz",
+ "integrity": "sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=",
+ "dev": true,
+ "requires": {
+ "async": "0.9.2",
+ "chokidar": "1.7.0",
+ "graceful-fs": "4.1.11"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "dev": true
+ }
+ }
+ },
+ "webpack": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-1.15.0.tgz",
+ "integrity": "sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0",
+ "async": "1.5.2",
+ "clone": "1.0.3",
+ "enhanced-resolve": "0.9.1",
+ "interpret": "0.6.6",
+ "loader-utils": "0.2.17",
+ "memory-fs": "0.3.0",
+ "mkdirp": "0.5.1",
+ "node-libs-browser": "0.7.0",
+ "optimist": "0.6.1",
+ "supports-color": "3.2.3",
+ "tapable": "0.1.10",
+ "uglify-js": "2.7.5",
+ "watchpack": "0.2.9",
+ "webpack-core": "0.6.9"
+ }
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.7.0"
+ }
+ },
+ "fbjs": {
+ "version": "0.8.16",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
+ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
+ "dev": true,
+ "requires": {
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.17"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "dev": true,
+ "requires": {
+ "pend": "1.2.0"
+ }
+ },
+ "fg-loadcss": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/fg-loadcss/-/fg-loadcss-1.3.1.tgz",
+ "integrity": "sha1-iTDoIJWfqvuyQoUO7sTy0CWUMMs=",
+ "dev": true
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "file-exists": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-exists/-/file-exists-2.0.0.tgz",
+ "integrity": "sha1-okFQZlFQ5i1VvFRJKB2I0rCBDco=",
+ "dev": true
+ },
+ "file-loader": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.5.tgz",
+ "integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0"
+ }
+ },
+ "file-type": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+ "dev": true
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
+ },
+ "filename-reserved-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
+ "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
+ "dev": true
+ },
+ "filenamify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.0.0.tgz",
+ "integrity": "sha1-vRYiYsC26Uv7zc8Zo7uzdk94VpU=",
+ "dev": true,
+ "requires": {
+ "filename-reserved-regex": "2.0.0",
+ "strip-outer": "1.0.0",
+ "trim-repeated": "1.0.0"
+ }
+ },
+ "filesize": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.5.tgz",
+ "integrity": "sha1-PCpcFEY5GaIYQ0chRytjzDB0iZI=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "filled-array": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz",
+ "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=",
+ "dev": true
+ },
+ "filter-css": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/filter-css/-/filter-css-0.1.2.tgz",
+ "integrity": "sha1-Sk0BWyGhRamWFxA4+AYMAxV17gk=",
+ "dev": true,
+ "requires": {
+ "css": "2.2.1",
+ "get-stdin": "5.0.1",
+ "lodash": "4.17.4",
+ "meow": "3.7.0",
+ "update-notifier": "0.7.0"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ }
+ },
+ "find-cache-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "dev": true,
+ "requires": {
+ "commondir": "1.0.1",
+ "make-dir": "1.1.0",
+ "pkg-dir": "2.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ },
+ "first-chunk-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+ "dev": true
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ }
+ },
+ "flatten": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
+ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I="
+ },
+ "flush-write-stream": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz",
+ "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "follow-redirects": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.2.5.tgz",
+ "integrity": "sha512-lMhwQTryFbG+wYsAIEKC1Kf5IGDlVNnONRogIBllh7LLoV7pNIxW0z9fhjRar9NBql+hd2Y49KboVVNxf6GEfg==",
+ "requires": {
+ "debug": "2.6.9"
+ }
+ },
+ "font-awesome": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
+ "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
+ },
+ "for-each": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz",
+ "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=",
+ "dev": true,
+ "requires": {
+ "is-function": "1.0.1"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz",
+ "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs-readdir-recursive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+ "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
+ "dev": true
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "1.1.14"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.3.tgz",
+ "integrity": "sha512-X+57O5YkDTiEQGiw8i7wYc2nQgweIekqkepI8Q3y4wVlurgBt2SuwxTeYUYMZIGpLZH3r/TsMjczCMXE5ZOt7Q==",
+ "optional": true,
+ "requires": {
+ "nan": "2.10.0",
+ "node-pre-gyp": "0.9.1"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "2.2.4"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.1",
+ "yallist": "3.0.2"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "2.2.4"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "nan": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "2.6.9",
+ "iconv-lite": "0.4.21",
+ "sax": "1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.9.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "1.0.3",
+ "mkdirp": "0.5.1",
+ "needle": "2.2.0",
+ "nopt": "4.0.1",
+ "npm-packlist": "1.1.10",
+ "npmlog": "4.1.2",
+ "rc": "1.2.6",
+ "rimraf": "2.6.2",
+ "semver": "5.5.0",
+ "tar": "4.4.1"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.1",
+ "osenv": "0.1.5"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "3.0.1",
+ "npm-bundled": "1.0.3"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "chownr": "1.0.1",
+ "fs-minipass": "1.2.5",
+ "minipass": "2.2.4",
+ "minizlib": "1.1.0",
+ "mkdirp": "0.5.1",
+ "safe-buffer": "5.1.1",
+ "yallist": "3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "gaze": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
+ "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
+ "dev": true,
+ "requires": {
+ "globule": "1.2.0"
+ }
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "1.0.2"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U="
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
+ "dev": true
+ },
+ "get-proxy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
+ "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
+ "dev": true,
+ "requires": {
+ "npm-conf": "1.1.3"
+ }
+ },
+ "get-stdin": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
+ "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+ },
+ "getos": {
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/getos/-/getos-2.8.4.tgz",
+ "integrity": "sha1-e4YD02GcKOOMsP56T2PDrLgNUWM=",
+ "dev": true,
+ "requires": {
+ "async": "2.1.4"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz",
+ "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ }
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-stream": {
+ "version": "5.3.5",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
+ "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "glob": "5.0.15",
+ "glob-parent": "3.1.0",
+ "micromatch": "2.3.11",
+ "ordered-read-streams": "0.3.0",
+ "through2": "0.6.5",
+ "to-absolute-glob": "0.1.1",
+ "unique-stream": "2.2.1"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "global": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
+ "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
+ "dev": true,
+ "requires": {
+ "min-document": "2.19.0",
+ "process": "0.5.2"
+ },
+ "dependencies": {
+ "process": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
+ "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=",
+ "dev": true
+ }
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.0.tgz",
+ "integrity": "sha1-ENNAOeDfBCcuJizyQiT3IJQ0308=",
+ "dev": true,
+ "requires": {
+ "ini": "1.3.4"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "globule": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
+ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ }
+ }
+ },
+ "glogg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz",
+ "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "got": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
+ "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer2": "0.1.4",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "node-status-codes": "1.0.0",
+ "object-assign": "4.1.1",
+ "parse-json": "2.2.0",
+ "pinkie-promise": "2.0.1",
+ "read-all-stream": "3.1.0",
+ "readable-stream": "2.3.3",
+ "timed-out": "3.1.3",
+ "unzip-response": "1.0.2",
+ "url-parse-lax": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "group-args": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/group-args/-/group-args-0.1.0.tgz",
+ "integrity": "sha1-5MXtYei+hH5/0aFCpqnfrESK2+M=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4",
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-sourcemaps": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
+ "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.5.0",
+ "graceful-fs": "4.1.11",
+ "strip-bom": "2.0.0",
+ "through2": "2.0.3",
+ "vinyl": "1.2.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "gulp-util": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dev": true,
+ "requires": {
+ "array-differ": "1.0.0",
+ "array-uniq": "1.0.3",
+ "beeper": "1.1.1",
+ "chalk": "1.1.3",
+ "dateformat": "2.2.0",
+ "fancy-log": "1.3.0",
+ "gulplog": "1.0.0",
+ "has-gulplog": "0.1.0",
+ "lodash._reescape": "3.0.0",
+ "lodash._reevaluate": "3.0.0",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.template": "3.6.2",
+ "minimist": "1.2.0",
+ "multipipe": "0.1.2",
+ "object-assign": "3.0.0",
+ "replace-ext": "0.0.1",
+ "through2": "2.0.3",
+ "vinyl": "0.5.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "vinyl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "1.0.0"
+ }
+ },
+ "gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "dev": true,
+ "requires": {
+ "duplexer": "0.1.1"
+ }
+ },
+ "handle-thing": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
+ "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ }
+ }
+ },
+ "harmony-reflect": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.5.1.tgz",
+ "integrity": "sha1-tUymF7AMyK71Wbuxez2FQx3H4yk=",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "requires": {
+ "function-bind": "1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "has-gulplog": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "has-own-property-x": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/has-own-property-x/-/has-own-property-x-3.2.0.tgz",
+ "integrity": "sha512-HtRQTYpRFz/YVaQ7jh2mU5iorMAxFcML9FNOLMI1f8VNJ2K0hpOlXoi1a+nmVl6oUcGnhd6zYOFAVe7NUFStyQ==",
+ "requires": {
+ "cached-constructors-x": "1.0.0",
+ "to-object-x": "1.5.0",
+ "to-property-key-x": "2.0.2"
+ }
+ },
+ "has-symbol-support-x": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz",
+ "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA=="
+ },
+ "has-to-string-tag-x": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
+ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
+ "requires": {
+ "has-symbol-support-x": "1.4.1"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "hash": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/hash/-/hash-0.2.0.tgz",
+ "integrity": "sha1-l4ZU+nI7ElLuqETlYMOTHa0nKJs=",
+ "dev": true
+ },
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ="
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "hasha": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
+ "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
+ "dev": true,
+ "requires": {
+ "is-stream": "1.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg=="
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "wbuf": "1.7.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "html-comment-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
+ "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4="
+ },
+ "html-critical-webpack-plugin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/html-critical-webpack-plugin/-/html-critical-webpack-plugin-1.0.1.tgz",
+ "integrity": "sha1-mvqkbhmxwoL1RB2zsdr4/R0oYuc=",
+ "dev": true,
+ "requires": {
+ "critical": "0.9.1"
+ }
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+ "dev": true
+ },
+ "html-minifier": {
+ "version": "3.5.6",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.6.tgz",
+ "integrity": "sha512-88FjtKrlak2XjczhxrBomgzV4jmGzM3UnHRBScRkJcmcRum0kb+IwhVAETJ8AVp7j0p3xugjSaw9L+RmI5/QOA==",
+ "dev": true,
+ "requires": {
+ "camel-case": "3.0.0",
+ "clean-css": "4.1.9",
+ "commander": "2.11.0",
+ "he": "1.1.1",
+ "ncname": "1.0.0",
+ "param-case": "2.1.1",
+ "relateurl": "0.2.7",
+ "uglify-js": "3.1.9"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.9.tgz",
+ "integrity": "sha512-ari2E89bD7f+fMU173NgF12JBcOhgoxeyuCs97h5K58IBENrnG9eVj2lFadrOPdqf0KifsxVmUQfzA2cHNxCZQ==",
+ "dev": true,
+ "requires": {
+ "commander": "2.11.0",
+ "source-map": "0.6.1"
+ }
+ }
+ }
+ },
+ "html-webpack-plugin": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz",
+ "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.1",
+ "html-minifier": "3.5.6",
+ "loader-utils": "0.2.17",
+ "lodash": "4.17.4",
+ "pretty-error": "2.1.1",
+ "toposort": "1.0.6"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.4.1",
+ "domutils": "1.6.2",
+ "entities": "1.1.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1"
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.9",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz",
+ "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
+ "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
+ "dev": true,
+ "requires": {
+ "http-proxy": "1.16.2",
+ "is-glob": "3.1.0",
+ "lodash": "4.17.4",
+ "micromatch": "2.3.11"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "http-server": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.10.0.tgz",
+ "integrity": "sha1-sqRGsWqduH7TxiK6m+sbCFsSNKc=",
+ "dev": true,
+ "requires": {
+ "colors": "1.0.3",
+ "corser": "2.0.1",
+ "ecstatic": "2.2.1",
+ "http-proxy": "1.16.2",
+ "opener": "1.4.3",
+ "optimist": "0.6.1",
+ "portfinder": "1.0.13",
+ "union": "0.4.6"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI="
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
+ },
+ "icss-replace-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0="
+ },
+ "icss-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
+ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
+ "requires": {
+ "postcss": "6.0.14"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==",
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q="
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "dev": true
+ },
+ "image-size": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.4.0.tgz",
+ "integrity": "sha1-1LTh9hlS5MvBzqmmsMkV/stwdRA=",
+ "dev": true
+ },
+ "imageinliner": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/imageinliner/-/imageinliner-0.2.4.tgz",
+ "integrity": "sha1-EQ8LstQKEZaPyz202Fohr949v00=",
+ "dev": true,
+ "requires": {
+ "css-parse": "1.7.0",
+ "css-stringify": "1.4.1",
+ "mime": "1.2.11",
+ "mkdirp": "0.3.5",
+ "optimist": "0.6.1"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+ "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
+ "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=",
+ "dev": true
+ }
+ }
+ },
+ "immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+ },
+ "import-local": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz",
+ "integrity": "sha1-sReVcqrNwRxqkQCftDDbyrX2aKg=",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "2.0.0",
+ "resolve-cwd": "2.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "in-publish": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+ "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "infinity-x": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/infinity-x/-/infinity-x-1.0.0.tgz",
+ "integrity": "sha512-wjy2TupBtZ+aAniKt+xs/PO0xOkuaL6wBysUKbgD7aL1PMW/qY5xXDG59zXZ7dU+gk3zwXOu4yIEWPCEFBTgHQ=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+ "dev": true
+ },
+ "inline-critical": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/inline-critical/-/inline-critical-2.4.2.tgz",
+ "integrity": "sha1-1PH9bO+MMuK34mjfbtw1xK6bFFc=",
+ "dev": true,
+ "requires": {
+ "cave": "2.0.0",
+ "cheerio": "0.22.0",
+ "clean-css": "4.1.9",
+ "css": "2.2.1",
+ "detect-indent": "5.0.0",
+ "dom-serializer": "0.1.0",
+ "fg-loadcss": "1.3.1",
+ "get-stdin": "5.0.1",
+ "indent-string": "3.1.0",
+ "lodash": "4.17.4",
+ "meow": "3.7.0",
+ "normalize-newline": "3.0.0",
+ "reaver": "2.0.0",
+ "resolve": "1.3.3",
+ "slash": "1.0.0",
+ "uglify-js": "3.1.9"
+ },
+ "dependencies": {
+ "cheerio": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+ "dev": true,
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-serializer": "0.1.0",
+ "entities": "1.1.1",
+ "htmlparser2": "3.9.2",
+ "lodash.assignin": "4.2.0",
+ "lodash.bind": "4.2.1",
+ "lodash.defaults": "4.2.0",
+ "lodash.filter": "4.6.0",
+ "lodash.flatten": "4.4.0",
+ "lodash.foreach": "4.5.0",
+ "lodash.map": "4.6.0",
+ "lodash.merge": "4.6.0",
+ "lodash.pick": "4.4.0",
+ "lodash.reduce": "4.6.0",
+ "lodash.reject": "4.6.0",
+ "lodash.some": "4.6.0"
+ }
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
+ "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
+ "dev": true
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "indent-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.1.0.tgz",
+ "integrity": "sha1-CP9DNGAziDmbMp5rlTjcejz13n0=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz",
+ "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.9.tgz",
+ "integrity": "sha512-ari2E89bD7f+fMU173NgF12JBcOhgoxeyuCs97h5K58IBENrnG9eVj2lFadrOPdqf0KifsxVmUQfzA2cHNxCZQ==",
+ "dev": true,
+ "requires": {
+ "commander": "2.11.0",
+ "source-map": "0.6.1"
+ }
+ }
+ }
+ },
+ "inline-process-browser": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz",
+ "integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI=",
+ "requires": {
+ "falafel": "1.2.0",
+ "through2": "0.6.5"
+ }
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.0.0",
+ "chalk": "2.3.0",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.0.5",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "ansi-escapes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
+ "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "internal-ip": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz",
+ "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=",
+ "dev": true,
+ "requires": {
+ "meow": "3.7.0"
+ }
+ },
+ "interpret": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz",
+ "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA="
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz",
+ "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz",
+ "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz",
+ "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=",
+ "dev": true,
+ "requires": {
+ "is-relative": "0.1.3"
+ }
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY="
+ },
+ "is-array-buffer-x": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/is-array-buffer-x/-/is-array-buffer-x-1.7.0.tgz",
+ "integrity": "sha512-ufSZRMY2WZX5xyNvk0NOZAG7cgi35B/sGQDGqv8w0X7MoQ2GC9vedanJhuYTPaC4PUCqLQsda1w7NF+dPZmAJw==",
+ "requires": {
+ "attempt-x": "1.1.1",
+ "has-to-string-tag-x": "1.4.1",
+ "is-object-like-x": "1.6.0",
+ "object-get-own-property-descriptor-x": "3.2.0",
+ "to-string-tag-x": "1.4.2"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "1.10.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-bzip2": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz",
+ "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
+ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz",
+ "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=",
+ "dev": true,
+ "requires": {
+ "ci-info": "1.1.1"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE="
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-falsey-x": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-falsey-x/-/is-falsey-x-1.0.1.tgz",
+ "integrity": "sha512-XWNZC4A+3FX1ECoMjspuEFgSdio82IWjqY/suE0gZ10QA7nzHd/KraRq7Tc5VEHtFRgTRyTdY6W+ykPrDnyoAQ==",
+ "requires": {
+ "to-boolean-x": "1.0.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-finite-x": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite-x/-/is-finite-x-3.0.2.tgz",
+ "integrity": "sha512-HyFrxJZsgmP5RtR1PVlVvHSP4VslZOqr4uoq4x3rDrSOFaYp4R9tfmiWtAzQxPzixXhac3cYEno3NuVn0OHk2Q==",
+ "requires": {
+ "infinity-x": "1.0.0",
+ "is-nan-x": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-function": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz",
+ "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=",
+ "dev": true
+ },
+ "is-function-x": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/is-function-x/-/is-function-x-3.3.0.tgz",
+ "integrity": "sha512-SreSSU1dlgYaXR5c0mm4qJHKYHIiGiEY+7Cd8/aRLLoMP/VvofD2XcWgBnP833ajpU5XzXbUSpfysnfKZLJFlg==",
+ "requires": {
+ "attempt-x": "1.1.1",
+ "has-to-string-tag-x": "1.4.1",
+ "is-falsey-x": "1.0.1",
+ "is-primitive": "2.0.0",
+ "normalize-space-x": "3.0.0",
+ "replace-comments-x": "2.0.0",
+ "to-boolean-x": "1.0.1",
+ "to-string-tag-x": "1.4.2"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-gzip": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
+ "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=",
+ "dev": true
+ },
+ "is-index-x": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-index-x/-/is-index-x-1.1.0.tgz",
+ "integrity": "sha512-qULKLMepQLGC8rSVdi8uF2vI4LiDrU9XSDg1D+Aa657GIB7GV1jHpga7uXgQvkt/cpQ5mVBHUFTpSehYSqT6+A==",
+ "requires": {
+ "math-clamp-x": "1.2.0",
+ "max-safe-integer": "1.0.1",
+ "to-integer-x": "3.0.0",
+ "to-number-x": "2.0.0",
+ "to-string-symbols-supported-x": "1.0.0"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "dev": true,
+ "requires": {
+ "global-dirs": "0.1.0",
+ "is-path-inside": "1.0.0"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz",
+ "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==",
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-nan-x": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-nan-x/-/is-nan-x-1.0.1.tgz",
+ "integrity": "sha512-VfNJgfuT8USqKCYQss8g7sFvCzDnL+OOVMQoXhVoulZAyp0ZTj3oyZaaPrn2dxepAkKSQI2BiKHbBabX1DqVtw=="
+ },
+ "is-natural-number": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz",
+ "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=",
+ "dev": true
+ },
+ "is-nil-x": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/is-nil-x/-/is-nil-x-1.4.1.tgz",
+ "integrity": "sha512-cfTKWI5iSR04SSCzzugTH5tS2rYG7kwI8yl/AqWkyuxZ7k55cbA47Y7Lezdg1N9aaELd+UxLg628bdQeNQ6BUw==",
+ "requires": {
+ "lodash.isnull": "3.0.0",
+ "validate.io-undefined": "1.0.3"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+ "dev": true
+ },
+ "is-object-like-x": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/is-object-like-x/-/is-object-like-x-1.6.0.tgz",
+ "integrity": "sha512-mc3dBMv1jEOdk0f1i2RkJFsZDux0MuHqGwHOoRo770ShUOf4VE6tWThAW8dAZARr9a5RN+iNX1yzMDA5ad1clQ==",
+ "requires": {
+ "is-function-x": "3.3.0",
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz",
+ "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "1.0.1"
+ }
+ },
+ "is-relative": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz",
+ "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
+ "dev": true,
+ "requires": {
+ "tryit": "1.0.3"
+ }
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-string": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz",
+ "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ="
+ },
+ "is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "requires": {
+ "html-comment-regex": "1.1.1"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
+ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI="
+ },
+ "is-tar": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz",
+ "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-valid-glob": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
+ "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "is-zip": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz",
+ "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ }
+ }
+ },
+ "isomorphic-fetch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+ "dev": true,
+ "requires": {
+ "node-fetch": "1.7.3",
+ "whatwg-fetch": "2.0.3"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "isurl": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
+ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+ "dev": true,
+ "requires": {
+ "has-to-string-tag-x": "1.4.1",
+ "is-object": "1.0.1"
+ }
+ },
+ "jimp": {
+ "version": "0.2.28",
+ "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.28.tgz",
+ "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=",
+ "dev": true,
+ "requires": {
+ "bignumber.js": "2.4.0",
+ "bmp-js": "0.0.3",
+ "es6-promise": "3.3.1",
+ "exif-parser": "0.1.12",
+ "file-type": "3.9.0",
+ "jpeg-js": "0.2.0",
+ "load-bmfont": "1.3.0",
+ "mime": "1.4.1",
+ "mkdirp": "0.5.1",
+ "pixelmatch": "4.0.2",
+ "pngjs": "3.3.0",
+ "read-chunk": "1.0.1",
+ "request": "2.81.0",
+ "stream-to-buffer": "0.1.0",
+ "tinycolor2": "1.4.1",
+ "url-regex": "3.2.0"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
+ "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=",
+ "dev": true
+ }
+ }
+ },
+ "jpeg-js": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.2.0.tgz",
+ "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz",
+ "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw=="
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "2.7.3"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jschardet": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.6.0.tgz",
+ "integrity": "sha512-xYuhvQ7I9PDJIGBWev9xm0+SMSed3ZDBAmvVjbFR1ZRLAF+vlXcQu6cRI9uAlj81rzikElRVteehwV7DuX2ZmQ==",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ },
+ "json-loader": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
+ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w=="
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "jsontoxml": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/jsontoxml/-/jsontoxml-0.0.11.tgz",
+ "integrity": "sha1-Nzq1sgcL43N6X7PjL9G3uBhwyqQ=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "jstransform": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-11.0.3.tgz",
+ "integrity": "sha1-CaeJk+CuTU70SH9hVakfYZDLQiM=",
+ "requires": {
+ "base62": "1.2.1",
+ "commoner": "0.10.8",
+ "esprima-fb": "15001.1.0-dev-harmony-fb",
+ "object-assign": "2.1.1",
+ "source-map": "0.4.4"
+ },
+ "dependencies": {
+ "esprima-fb": {
+ "version": "15001.1.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz",
+ "integrity": "sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE="
+ }
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
+ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
+ "dev": true,
+ "requires": {
+ "array-includes": "3.0.3"
+ }
+ },
+ "jszip": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
+ "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==",
+ "dev": true,
+ "requires": {
+ "core-js": "2.3.0",
+ "es6-promise": "3.0.2",
+ "lie": "3.1.1",
+ "pako": "1.0.6",
+ "readable-stream": "2.0.6"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
+ "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=",
+ "dev": true
+ },
+ "es6-promise": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
+ "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.2"
+ }
+ }
+ }
+ },
+ "jwk-to-pem": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/jwk-to-pem/-/jwk-to-pem-1.2.6.tgz",
+ "integrity": "sha1-1QfOzkAInFJI4J7GgmaiAwqcYyU=",
+ "requires": {
+ "asn1.js": "4.9.2",
+ "elliptic": "6.4.0",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "kew": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
+ "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
+ "dev": true
+ },
+ "killable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz",
+ "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "latest-version": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz",
+ "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=",
+ "dev": true,
+ "requires": {
+ "package-json": "2.4.0"
+ }
+ },
+ "lazy-ass": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
+ "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=",
+ "dev": true
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lie": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
+ "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
+ "requires": {
+ "immediate": "3.0.6"
+ }
+ },
+ "listr": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz",
+ "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-truncate": "0.2.1",
+ "figures": "1.7.0",
+ "indent-string": "2.1.0",
+ "is-promise": "2.1.0",
+ "is-stream": "1.1.0",
+ "listr-silent-renderer": "1.1.1",
+ "listr-update-renderer": "0.2.0",
+ "listr-verbose-renderer": "0.4.1",
+ "log-symbols": "1.0.2",
+ "log-update": "1.0.2",
+ "ora": "0.2.3",
+ "p-map": "1.2.0",
+ "rxjs": "5.5.2",
+ "stream-to-observable": "0.1.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "listr-silent-renderer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
+ "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
+ "dev": true
+ },
+ "listr-update-renderer": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz",
+ "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-truncate": "0.2.1",
+ "elegant-spinner": "1.0.1",
+ "figures": "1.7.0",
+ "indent-string": "3.2.0",
+ "log-symbols": "1.0.2",
+ "log-update": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ }
+ }
+ },
+ "listr-verbose-renderer": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz",
+ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-cursor": "1.0.2",
+ "date-fns": "1.29.0",
+ "figures": "1.7.0"
+ }
+ },
+ "load-bmfont": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.3.0.tgz",
+ "integrity": "sha1-u358cQ3mvK/LE8s7jIHgwBMey8k=",
+ "dev": true,
+ "requires": {
+ "buffer-equal": "0.0.1",
+ "mime": "1.4.1",
+ "parse-bmfont-ascii": "1.0.6",
+ "parse-bmfont-binary": "1.0.6",
+ "parse-bmfont-xml": "1.1.3",
+ "xhr": "2.4.0",
+ "xtend": "4.0.1"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "loader-fs-cache": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz",
+ "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "0.1.1",
+ "mkdirp": "0.5.1"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+ "dev": true,
+ "requires": {
+ "commondir": "1.0.1",
+ "mkdirp": "0.5.1",
+ "pkg-dir": "1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2"
+ }
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz",
+ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI="
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "lodash-webpack-plugin": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/lodash-webpack-plugin/-/lodash-webpack-plugin-0.11.4.tgz",
+ "integrity": "sha1-bD7Lo9S40ktTlAtjVCcVxe08SsU=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "dev": true
+ },
+ "lodash.assignin": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+ "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
+ "dev": true
+ },
+ "lodash.bind": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+ "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.cond": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
+ "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
+ "dev": true
+ },
+ "lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.escape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "3.0.1"
+ }
+ },
+ "lodash.escaperegexp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
+ "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=",
+ "dev": true
+ },
+ "lodash.filter": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+ "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
+ "dev": true
+ },
+ "lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+ "dev": true
+ },
+ "lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
+ "dev": true
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+ "dev": true
+ },
+ "lodash.isnull": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash.isnull/-/lodash.isnull-3.0.0.tgz",
+ "integrity": "sha1-+vvlnqHcon7teGU0A53YTC4HxW4="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.last": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash.last/-/lodash.last-3.0.0.tgz",
+ "integrity": "sha1-JC9mMRLdTG5jcoxgo8kJ0b2tvUw=",
+ "dev": true
+ },
+ "lodash.map": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+ "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
+ },
+ "lodash.merge": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz",
+ "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=",
+ "dev": true
+ },
+ "lodash.mergewith": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz",
+ "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=",
+ "dev": true
+ },
+ "lodash.partialright": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/lodash.partialright/-/lodash.partialright-4.2.1.tgz",
+ "integrity": "sha1-ATDYDoM2MmTUAHTzKbij56ihzEs=",
+ "dev": true
+ },
+ "lodash.pick": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+ "dev": true
+ },
+ "lodash.reduce": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+ "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
+ "dev": true
+ },
+ "lodash.reject": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+ "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
+ "dev": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.result": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.result/-/lodash.result-4.5.2.tgz",
+ "integrity": "sha1-y0Wyf7kU6qjY7m8M57KHC4fLcKo=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "lodash.tail": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
+ "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash._basetostring": "3.0.1",
+ "lodash._basevalues": "3.0.0",
+ "lodash._isiterateecall": "3.0.9",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0",
+ "lodash.keys": "3.1.2",
+ "lodash.restparam": "3.6.1",
+ "lodash.templatesettings": "3.1.1"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0"
+ }
+ },
+ "lodash.throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+ },
+ "log-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3"
+ }
+ },
+ "log-update": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz",
+ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "1.4.0",
+ "cli-cursor": "1.0.2"
+ }
+ },
+ "loglevel": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.0.tgz",
+ "integrity": "sha1-rgyqVhERSYxboTcj1vtjHSQAOTQ=",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "macaddress": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz",
+ "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI="
+ },
+ "make-dir": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
+ "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
+ "dev": true,
+ "requires": {
+ "pify": "3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "material-colors": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.5.tgz",
+ "integrity": "sha1-UpJZPmdUyxvMK5gDDk4Najr8nqE="
+ },
+ "math-clamp-x": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/math-clamp-x/-/math-clamp-x-1.2.0.tgz",
+ "integrity": "sha512-tqpjpBcIf9UulApz3EjWXqTZpMlr2vLN9PryC9ghoyCuRmqZaf3JJhPddzgQpJnKLi2QhoFnvKBFtJekAIBSYg==",
+ "requires": {
+ "to-number-x": "2.0.0"
+ }
+ },
+ "math-expression-evaluator": {
+ "version": "1.2.17",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
+ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw="
+ },
+ "math-sign-x": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/math-sign-x/-/math-sign-x-3.0.0.tgz",
+ "integrity": "sha512-OzPas41Pn4d16KHnaXmGxxY3/l3zK4OIXtmIwdhgZsxz4FDDcNnbrABYPg2vGfxIkaT9ezGnzDviRH7RfF44jQ==",
+ "requires": {
+ "is-nan-x": "1.0.1",
+ "to-number-x": "2.0.0"
+ }
+ },
+ "max-safe-integer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/max-safe-integer/-/max-safe-integer-1.0.1.tgz",
+ "integrity": "sha1-84BgvixWPYwC5tSK85Ei/YO29BA="
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "0.1.4",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "2.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.4.0",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ }
+ }
+ },
+ "merge": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz",
+ "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=",
+ "dev": true
+ },
+ "merge-defaults": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/merge-defaults/-/merge-defaults-0.2.1.tgz",
+ "integrity": "sha1-3UIkjrlrtqUVIXJDIccv+Vg93oA=",
+ "dev": true,
+ "requires": {
+ "lodash": "2.4.2"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
+ "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
+ "dev": true
+ }
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg="
+ },
+ "min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "dev": true,
+ "requires": {
+ "dom-walk": "0.1.1"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mississippi": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz",
+ "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.0",
+ "duplexify": "3.5.1",
+ "end-of-stream": "1.4.0",
+ "flush-write-stream": "1.0.2",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "1.0.3",
+ "pumpify": "1.3.5",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "mixin-object": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
+ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
+ "dev": true,
+ "requires": {
+ "for-in": "0.1.8",
+ "is-extendable": "0.1.1"
+ },
+ "dependencies": {
+ "for-in": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
+ "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
+ "dev": true
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "dev": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "copy-concurrently": "1.0.5",
+ "fs-write-stream-atomic": "1.0.10",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2",
+ "run-queue": "1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "multicast-dns": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz",
+ "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=",
+ "dev": true,
+ "requires": {
+ "dns-packet": "1.2.2",
+ "thunky": "0.1.0"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "multimeter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/multimeter/-/multimeter-0.1.1.tgz",
+ "integrity": "sha1-+FbID8PPDx1K2Os2rWhzXj7Vs+o=",
+ "dev": true,
+ "requires": {
+ "charm": "0.1.2"
+ }
+ },
+ "multipipe": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ },
+ "dependencies": {
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14"
+ }
+ }
+ }
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz",
+ "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo="
+ },
+ "nan-x": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/nan-x/-/nan-x-1.0.0.tgz",
+ "integrity": "sha512-yw4Fhe2/UTzanQ4f0yHWkRnfTuHZFAi4GZDjXS4G+qv5BqXTqPJBbSxpa7MyyW9v4Y4ZySZQik1vcbNkhdnIOg=="
+ },
+ "native-crypto": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/native-crypto/-/native-crypto-1.8.1.tgz",
+ "integrity": "sha512-A+nv9MY/ZYxqhB86DQUrLPfbljqMmGhWM0Z3iTgKi9NvBgi4cj4H/7uFA3c2W/rx5M9VOr+zkvQURsAQB/uuPg==",
+ "requires": {
+ "asn1.js": "4.9.2",
+ "bn.js": "4.11.8",
+ "browserify-aes": "1.1.1",
+ "browserify-sign": "4.0.4",
+ "buffer-equal-constant-time": "1.0.1",
+ "create-ecdh": "4.0.0",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "debug": "2.6.9",
+ "ecdsa-sig-formatter": "1.0.9",
+ "elliptic": "6.4.0",
+ "jwk-to-pem": "1.2.6",
+ "miller-rabin": "4.0.1",
+ "minimalistic-assert": "1.0.0",
+ "pbkdf2": "3.0.14",
+ "pemstrip": "0.0.1",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.5",
+ "raw-ecdsa": "1.1.1",
+ "rsa-keygen": "1.0.6"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "ncname": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
+ "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+ "dev": true,
+ "requires": {
+ "xml-char-classes": "1.0.0"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "requires": {
+ "lower-case": "1.1.4"
+ }
+ },
+ "node-dir": {
+ "version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
+ "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "node-fetch": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+ "dev": true,
+ "requires": {
+ "encoding": "0.1.12",
+ "is-stream": "1.1.0"
+ }
+ },
+ "node-forge": {
+ "version": "0.6.33",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz",
+ "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=",
+ "dev": true
+ },
+ "node-gyp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
+ "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
+ "dev": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.2",
+ "osenv": "0.1.4",
+ "request": "2.81.0",
+ "rimraf": "2.6.2",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz",
+ "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=",
+ "requires": {
+ "assert": "1.4.1",
+ "browserify-zlib": "0.1.4",
+ "buffer": "4.9.1",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.12.0",
+ "domain-browser": "1.1.7",
+ "events": "1.1.1",
+ "https-browserify": "0.0.1",
+ "os-browserify": "0.2.1",
+ "path-browserify": "0.0.0",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "readable-stream": "2.3.3",
+ "stream-browserify": "2.0.1",
+ "stream-http": "2.7.2",
+ "string_decoder": "0.10.31",
+ "timers-browserify": "2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "node-rest-client": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/node-rest-client/-/node-rest-client-1.8.0.tgz",
+ "integrity": "sha1-jTxWa4F+JzlMtyc3g6Qcrv4+WVU=",
+ "dev": true,
+ "requires": {
+ "debug": "2.2.0",
+ "xml2js": "0.4.19"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ }
+ },
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "node-sass": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.6.1.tgz",
+ "integrity": "sha512-0zQQ7tjEK5W8RfW9LiQrkzfo7uLZ0QtZGV69rdKn5cFzdweHLJ14lR6xLPvI6UimkXMO8m0qDsXwUCNdnqV3sA==",
+ "dev": true,
+ "requires": {
+ "async-foreach": "0.1.3",
+ "chalk": "1.1.3",
+ "cross-spawn": "3.0.1",
+ "gaze": "1.1.2",
+ "get-stdin": "4.0.1",
+ "glob": "7.1.2",
+ "in-publish": "2.0.0",
+ "lodash.assign": "4.2.0",
+ "lodash.clonedeep": "4.5.0",
+ "lodash.mergewith": "4.6.0",
+ "meow": "3.7.0",
+ "mkdirp": "0.5.1",
+ "nan": "2.8.0",
+ "node-gyp": "3.6.2",
+ "npmlog": "4.1.2",
+ "request": "2.81.0",
+ "sass-graph": "2.2.4",
+ "stdout-stream": "1.4.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "which": "1.3.0"
+ }
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ }
+ }
+ },
+ "node-status-codes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
+ "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=",
+ "dev": true
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "normalize-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-newline/-/normalize-newline-3.0.0.tgz",
+ "integrity": "sha1-HL6oBKukNgAfg5OKsh7AOdaa6dM=",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.4.1",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
+ },
+ "normalize-space-x": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-space-x/-/normalize-space-x-3.0.0.tgz",
+ "integrity": "sha512-tbCJerqZCCHPst4rRKgsTanLf45fjOyeAU5zE3mhDxJtFJKt66q39g2XArWhXelgTFVib8mNBUm6Wrd0LxYcfQ==",
+ "requires": {
+ "cached-constructors-x": "1.0.0",
+ "trim-x": "3.0.0",
+ "white-space-x": "3.0.0"
+ }
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "prepend-http": "1.0.4",
+ "query-string": "4.3.4",
+ "sort-keys": "1.1.2"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "npm-conf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+ "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+ "dev": true,
+ "requires": {
+ "config-chain": "1.1.11",
+ "pify": "3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0"
+ }
+ },
+ "null-loader": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz",
+ "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=",
+ "dev": true
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "nw": {
+ "version": "0.26.6",
+ "resolved": "https://registry.npmjs.org/nw/-/nw-0.26.6.tgz",
+ "integrity": "sha512-16pYQ4V8GHxSoalRqq2YaN+IqA5/CDtWfpxmoTLRSyEVWg5xvl1c1PfAJLpEJofZKfRs1pVO7MDRNU3cBlOIJw==",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "decompress": "3.0.0",
+ "download": "5.0.3",
+ "file-exists": "2.0.0",
+ "merge": "1.2.0",
+ "multimeter": "0.1.1",
+ "rimraf": "2.6.2",
+ "semver": "5.4.1",
+ "yargs": "3.32.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "os-locale": "1.4.0",
+ "string-width": "1.0.2",
+ "window-size": "0.1.4",
+ "y18n": "3.2.1"
+ }
+ }
+ }
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/object/-/object-0.1.1.tgz",
+ "integrity": "sha1-HgLO3orh81iqqHKtdUv2QNd6IsI=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
+ "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo="
+ },
+ "object-get-own-property-descriptor-x": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/object-get-own-property-descriptor-x/-/object-get-own-property-descriptor-x-3.2.0.tgz",
+ "integrity": "sha512-Z/0fIrptD9YuzN+SNK/1kxAEaBcPQM4gSrtOSMSi9eplnL/AbyQcAyAlreAoAzmBon+DQ1Z+AdhxyQSvav5Fyg==",
+ "requires": {
+ "attempt-x": "1.1.1",
+ "has-own-property-x": "3.2.0",
+ "has-symbol-support-x": "1.4.1",
+ "is-falsey-x": "1.0.1",
+ "is-index-x": "1.1.0",
+ "is-primitive": "2.0.0",
+ "is-string": "1.0.4",
+ "property-is-enumerable-x": "1.1.0",
+ "to-object-x": "1.5.0",
+ "to-property-key-x": "2.0.2"
+ }
+ },
+ "object-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz",
+ "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz",
+ "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=",
+ "dev": true
+ },
+ "offline-plugin": {
+ "version": "4.8.4",
+ "resolved": "https://registry.npmjs.org/offline-plugin/-/offline-plugin-4.8.4.tgz",
+ "integrity": "sha1-EITFn2YGve1e5aa/YgjiufW90zk=",
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ejs": "2.5.7",
+ "loader-utils": "0.2.17",
+ "minimatch": "3.0.4",
+ "slash": "1.0.0"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "opener": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz",
+ "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=",
+ "dev": true
+ },
+ "opn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz",
+ "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "1.1.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "ora": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
+ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-cursor": "1.0.2",
+ "cli-spinners": "0.1.2",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
+ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
+ "dev": true,
+ "requires": {
+ "is-stream": "1.1.0",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "original": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz",
+ "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=",
+ "dev": true,
+ "requires": {
+ "url-parse": "1.0.5"
+ },
+ "dependencies": {
+ "url-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz",
+ "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=",
+ "dev": true,
+ "requires": {
+ "querystringify": "0.0.4",
+ "requires-port": "1.0.0"
+ }
+ }
+ }
+ },
+ "os-browserify": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz",
+ "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8="
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+ "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "oust": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/oust/-/oust-0.4.0.tgz",
+ "integrity": "sha1-T80YEo+jXLH4VFXml/vSeNiATpI=",
+ "dev": true,
+ "requires": {
+ "cheerio": "0.19.0",
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "output-file-sync": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
+ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw="
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "requires": {
+ "p-limit": "1.1.0"
+ }
+ },
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "package-json": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz",
+ "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=",
+ "dev": true,
+ "requires": {
+ "got": "5.7.1",
+ "registry-auth-token": "3.3.1",
+ "registry-url": "3.1.0",
+ "semver": "5.4.1"
+ }
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU="
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "dev": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "dev": true,
+ "requires": {
+ "no-case": "2.3.2"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "requires": {
+ "asn1.js": "4.9.2",
+ "browserify-aes": "1.1.1",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.14"
+ }
+ },
+ "parse-bmfont-ascii": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
+ "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=",
+ "dev": true
+ },
+ "parse-bmfont-binary": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
+ "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=",
+ "dev": true
+ },
+ "parse-bmfont-xml": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.3.tgz",
+ "integrity": "sha1-1rZqNxr9OcUAfZ8O6yYqTyzOe3w=",
+ "dev": true,
+ "requires": {
+ "xml-parse-from-string": "1.0.1",
+ "xml2js": "0.4.19"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "parse-headers": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz",
+ "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=",
+ "dev": true,
+ "requires": {
+ "for-each": "0.3.2",
+ "trim": "0.0.1"
+ }
+ },
+ "parse-int-x": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/parse-int-x/-/parse-int-x-2.0.0.tgz",
+ "integrity": "sha512-NIMm52gmd1+0qxJK8lV3OZ4zzWpRH1xcz9xCHXl+DNzddwUdS4NEtd7BmTeK7iCIXoaK5e6BoDMHgieH2eNIhg==",
+ "requires": {
+ "cached-constructors-x": "1.0.0",
+ "nan-x": "1.0.0",
+ "to-string-x": "1.4.2",
+ "trim-left-x": "3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parse-png": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-1.1.2.tgz",
+ "integrity": "sha1-9cKtfHmTSQmGAgooTBmu5FlxH/I=",
+ "dev": true,
+ "requires": {
+ "pngjs": "3.3.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
+ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "requires": {
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "pbkdf2-compat": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz",
+ "integrity": "sha1-tuDI+plJTZTgURV1gCpZpcFC8og=",
+ "dev": true
+ },
+ "pemstrip": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/pemstrip/-/pemstrip-0.0.1.tgz",
+ "integrity": "sha1-OfcHFyDPoT1ULJvedfH6W/nQiAY="
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "penthouse": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/penthouse/-/penthouse-0.11.13.tgz",
+ "integrity": "sha1-RjHmAWpgd/OdC/o4Iq7rb+t1t0Q=",
+ "dev": true,
+ "requires": {
+ "apartment": "1.1.1",
+ "css-fork-pocketjoso": "2.2.1",
+ "css-mediaquery": "0.1.2",
+ "jsesc": "1.3.0",
+ "os-tmpdir": "1.0.2",
+ "phantomjs-prebuilt": "2.1.16",
+ "regenerator-runtime": "0.10.5",
+ "tmp": "0.0.31"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ }
+ }
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "dev": true
+ },
+ "phantomjs-prebuilt": {
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
+ "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "4.1.1",
+ "extract-zip": "1.6.5",
+ "fs-extra": "1.0.0",
+ "hasha": "2.2.0",
+ "kew": "0.7.0",
+ "progress": "1.1.8",
+ "request": "2.81.0",
+ "request-progress": "2.0.1",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
+ "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "2.4.0",
+ "klaw": "1.3.1"
+ }
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "request-progress": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
+ "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
+ "dev": true,
+ "requires": {
+ "throttleit": "1.0.0"
+ }
+ },
+ "throttleit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
+ "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
+ "dev": true
+ }
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pixelmatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz",
+ "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=",
+ "dev": true,
+ "requires": {
+ "pngjs": "3.3.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "pn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pn/-/pn-1.0.0.tgz",
+ "integrity": "sha1-HPWjCw2AbNGPiPxBprXUrWFbO6k=",
+ "dev": true
+ },
+ "pngjs": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.3.0.tgz",
+ "integrity": "sha1-H1cwwYnJSTO4G+2iqy+OKFUmOo8=",
+ "dev": true
+ },
+ "portfinder": {
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
+ "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "debug": "2.6.9",
+ "mkdirp": "0.5.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.3.2",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-message-helpers": "2.0.0",
+ "reduce-css-calc": "1.3.0"
+ }
+ },
+ "postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "requires": {
+ "colormin": "1.1.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ }
+ },
+ "postcss-filter-plugins": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz",
+ "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=",
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqid": "4.1.1"
+ }
+ },
+ "postcss-image-inliner": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-image-inliner/-/postcss-image-inliner-1.0.6.tgz",
+ "integrity": "sha1-48dgX9k00EpDC3WoQtSRvnUoRtU=",
+ "dev": true,
+ "requires": {
+ "asset-resolver": "0.3.3",
+ "bluebird": "3.4.7",
+ "debug": "2.6.1",
+ "filesize": "3.5.5",
+ "lodash.defaults": "4.2.0",
+ "lodash.escaperegexp": "4.1.2",
+ "lodash.isstring": "4.0.1",
+ "lodash.last": "3.0.0",
+ "lodash.map": "4.6.0",
+ "lodash.partialright": "4.2.1",
+ "lodash.reduce": "4.6.0",
+ "lodash.reject": "4.6.0",
+ "lodash.result": "4.5.2",
+ "mime": "1.3.4",
+ "object-hash": "1.1.5",
+ "postcss": "5.2.15",
+ "request": "2.79.0",
+ "svgo": "0.7.2",
+ "then-fs": "2.0.0"
+ },
+ "dependencies": {
+ "bluebird": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
+ "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.1.tgz",
+ "integrity": "sha1-eYVQkLosTjEVzH2HaUkdWPBJE1E=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.2"
+ }
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.11.0",
+ "is-my-json-valid": "2.16.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "object-hash": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.1.5.tgz",
+ "integrity": "sha1-vdhE4DDQhhtpLKF1xsq2ho7CM9c=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "5.2.15",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.15.tgz",
+ "integrity": "sha1-qehoXlDgbMWz/epSlycyRsJvWzA=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.3.2",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "qs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.2",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.1.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true
+ }
+ }
+ },
+ "postcss-load-config": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz",
+ "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1",
+ "postcss-load-options": "1.2.0",
+ "postcss-load-plugins": "2.3.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "postcss-load-options": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz",
+ "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "postcss-load-plugins": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz",
+ "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-api": "1.6.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3",
+ "vendors": "1.0.1"
+ }
+ },
+ "postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4="
+ },
+ "postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "uniqs": "2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3"
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
+ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
+ "requires": {
+ "postcss": "6.0.14"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==",
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
+ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.14"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==",
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
+ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.14"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==",
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-values": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
+ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+ "requires": {
+ "icss-replace-symbols": "1.1.0",
+ "postcss": "6.0.14"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==",
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "requires": {
+ "is-absolute-url": "2.1.0",
+ "normalize-url": "1.9.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "requires": {
+ "postcss": "5.2.18"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "requires": {
+ "flatten": "1.0.2",
+ "indexes-of": "1.0.1",
+ "uniq": "1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "requires": {
+ "is-svg": "2.1.0",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "svgo": "0.7.2"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
+ "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU="
+ },
+ "postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ }
+ },
+ "pouchdb-adapter-idb": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-idb/-/pouchdb-adapter-idb-6.3.4.tgz",
+ "integrity": "sha512-pNZjf6Qosno7vhIMxTccOmHGmJ4zwoAA289Gg0twcIYstK24IIDLHqed81gciVQZ5s+/oWsiAX3n6UFMDY967Q==",
+ "requires": {
+ "pouchdb-adapter-utils": "6.3.4",
+ "pouchdb-binary-utils": "6.3.4",
+ "pouchdb-collections": "6.3.4",
+ "pouchdb-errors": "6.3.4",
+ "pouchdb-json": "6.3.4",
+ "pouchdb-merge": "6.3.4",
+ "pouchdb-promise": "6.3.4",
+ "pouchdb-utils": "6.3.4"
+ }
+ },
+ "pouchdb-adapter-utils": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-6.3.4.tgz",
+ "integrity": "sha512-YXGpAKsHXl6A4HV+HMUJg7/ebM+ZtiGgQBSgUGuX5HETOaoczEP9yawLpiheAeQ727EeNM9MtVvCPeFFZAmqBA==",
+ "requires": {
+ "pouchdb-binary-utils": "6.3.4",
+ "pouchdb-collections": "6.3.4",
+ "pouchdb-errors": "6.3.4",
+ "pouchdb-md5": "6.3.4",
+ "pouchdb-merge": "6.3.4",
+ "pouchdb-utils": "6.3.4"
+ }
+ },
+ "pouchdb-adapter-websql": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-websql/-/pouchdb-adapter-websql-6.3.4.tgz",
+ "integrity": "sha512-3zha5xwGEOnt6IYDMBrNc6bA81aJIXDxuRWt2mA+86qu+AFhLWJal1bvQ6Xm0IjxTlpA2xS8bhkeG4t6O0c15g==",
+ "requires": {
+ "pouchdb-adapter-websql-core": "6.3.4",
+ "pouchdb-utils": "6.3.4"
+ }
+ },
+ "pouchdb-adapter-websql-core": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-6.3.4.tgz",
+ "integrity": "sha512-vFwlMol2rblLJB8PhPTLuFSyCdKRr+GvnA/LhCkcx9y2Lz1w6qeaOgUS5kWbtQWL5aaWDwyY9Pw6kMSy8wWKpQ==",
+ "requires": {
+ "pouchdb-adapter-utils": "6.3.4",
+ "pouchdb-binary-utils": "6.3.4",
+ "pouchdb-collections": "6.3.4",
+ "pouchdb-errors": "6.3.4",
+ "pouchdb-json": "6.3.4",
+ "pouchdb-merge": "6.3.4",
+ "pouchdb-utils": "6.3.4"
+ }
+ },
+ "pouchdb-binary-utils": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-6.3.4.tgz",
+ "integrity": "sha512-sjQwbtbg4yb6FOF1LJbdXlOVb2q7VImxxX2+8qsyrRyOzk9AdahTx/Ui4CVBPJO3w5M9HA52X0ou8eCsjtjEcg==",
+ "requires": {
+ "buffer-from": "0.1.1"
+ }
+ },
+ "pouchdb-changes-filter": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-changes-filter/-/pouchdb-changes-filter-6.3.4.tgz",
+ "integrity": "sha512-6Q9koC6ZalYHjc5zUWw33Gg26CFokU/NoMCkvxgJe1tugquMc3f20Hvi2vjnIdwL2VwTpYcFrxEQ/5SlEGTf6Q==",
+ "requires": {
+ "pouchdb-errors": "6.3.4",
+ "pouchdb-selector-core": "6.3.4",
+ "pouchdb-utils": "6.3.4"
+ }
+ },
+ "pouchdb-collate": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-6.3.4.tgz",
+ "integrity": "sha512-Tk9x+EAXLOvT4uk+63RYsn1K335u0PnBGSQUmynrkYqsVAb0etmuoBzKJinKD8ZprGhuAiFEyu0mZG71+atCJg=="
+ },
+ "pouchdb-collections": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-6.3.4.tgz",
+ "integrity": "sha512-F+o2SGRO5FZwoURVVcuj1hd94YN9DVr8sD/kg2pXhf2m/nJ2GfMiR4l88h9bh2VYb8BDNU3OQj6gXebzfxSwjA=="
+ },
+ "pouchdb-core": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-core/-/pouchdb-core-6.3.4.tgz",
+ "integrity": "sha512-5Gfr/F/0u0gW4EW/uNfEDG7nBd1RpvY+hEwqWdbPO4qqeBq6iOQ74FNqHgPykWwKfc5zOevy9w/9nNEXpYMBcQ==",
+ "requires": {
+ "argsarray": "0.0.1",
+ "inherits": "2.0.3",
+ "pouchdb-changes-filter": "6.3.4",
+ "pouchdb-collections": "6.3.4",
+ "pouchdb-debug": "6.3.4",
+ "pouchdb-errors": "6.3.4",
+ "pouchdb-merge": "6.3.4",
+ "pouchdb-promise": "6.3.4",
+ "pouchdb-utils": "6.3.4"
+ }
+ },
+ "pouchdb-debug": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-debug/-/pouchdb-debug-6.3.4.tgz",
+ "integrity": "sha512-K0LtVuzQWA23QcVTkzvbs5uaSWMTg6Fe0vJ/Db+Zm3wb4HbKPQwSkBJVWWM3mOj7di+ioHndh2PaXjIN/lX/mg==",
+ "requires": {
+ "debug": "2.6.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz",
+ "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=",
+ "requires": {
+ "ms": "0.7.3"
+ }
+ },
+ "ms": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz",
+ "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8="
+ }
+ }
+ },
+ "pouchdb-errors": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-6.3.4.tgz",
+ "integrity": "sha512-w96XRbS6hSFmCt+YmoUA2s6TsP8aUTteZ9BZ/Jjkcv5EdSlHwTKpmaBG5WG3givjCSmfP7+ZMCSDEop2PPcdqg==",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "pouchdb-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/pouchdb-extend/-/pouchdb-extend-0.1.2.tgz",
+ "integrity": "sha1-0c5RG/cE7S4p979CikFqz/+hJLg="
+ },
+ "pouchdb-json": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-6.3.4.tgz",
+ "integrity": "sha512-Aqa3rYkbjKYPJO8ZJvdOBUkR8Y65JQKB7+O0krIk79jGOST1rx4phFQWnKRIKEqaHPcunFCf+Esy1qWANQaRsw==",
+ "requires": {
+ "vuvuzela": "1.0.3"
+ }
+ },
+ "pouchdb-md5": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-6.3.4.tgz",
+ "integrity": "sha512-rd162ZigLEJZ6OotY6EJsM/hbWPTE5Dhr4WHTOJekv59n4Sp0/3Fq/MB5XFFfM6lZFrvuvd9Q6yzHwk4edemLw==",
+ "requires": {
+ "pouchdb-binary-utils": "6.3.4",
+ "spark-md5": "3.0.0"
+ }
+ },
+ "pouchdb-merge": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-6.3.4.tgz",
+ "integrity": "sha512-leejoseJNegA/hrEgEs3PeWAX800qM4+MuKYk24Jc2szY3VywinOzHMTv4sPeItRgAC6+9YG8CelC8F58525Jg=="
+ },
+ "pouchdb-promise": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-6.3.4.tgz",
+ "integrity": "sha512-9kgpKXWFuFYJmhP7pjZvPhK9Lof8ipFVIoaZrFQN8HMep9/IdmhyXMUlISHkaNt3l0yWzW8bWYPg3OMocImvHA==",
+ "requires": {
+ "lie": "3.1.1"
+ }
+ },
+ "pouchdb-selector-core": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-6.3.4.tgz",
+ "integrity": "sha512-7mkBFzN1k7ijp6kZccM20O9CrLWJeF7ZaP2d5yKpK4XSyBhxDGgSDNrmcyBHOmPFjDLrsQmYJVcaADUEXDhJFg==",
+ "requires": {
+ "pouchdb-collate": "6.3.4",
+ "pouchdb-utils": "6.3.4"
+ }
+ },
+ "pouchdb-utils": {
+ "version": "6.3.4",
+ "resolved": "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-6.3.4.tgz",
+ "integrity": "sha512-63mnIL7MX3ciyW1zWRl8OOUHZqRjeB1bC9kbFE+56F3U9T5OHMgkDcTukHRKXSfSnHPXoS+QujU3ups0SYsKIw==",
+ "requires": {
+ "argsarray": "0.0.1",
+ "clone-buffer": "1.0.0",
+ "immediate": "3.0.6",
+ "inherits": "2.0.3",
+ "pouchdb-collections": "6.3.4",
+ "pouchdb-errors": "6.3.4",
+ "pouchdb-promise": "6.3.4",
+ "uuid": "3.1.0"
+ }
+ },
+ "pouchdb-wrappers": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/pouchdb-wrappers/-/pouchdb-wrappers-1.3.6.tgz",
+ "integrity": "sha1-8+EbZk6JqbMX54XJYVHMsXNvJdA=",
+ "requires": {
+ "promise-nodify": "1.0.2"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+ },
+ "prettier": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.8.2.tgz",
+ "integrity": "sha512-fHWjCwoRZgjP1rvLP7OGqOznq7xH1sHMQUFLX8qLRO79hI57+6xbc5vB904LxEkCfgFgyr3vv06JkafgCSzoZg=="
+ },
+ "pretty-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+ "dev": true,
+ "requires": {
+ "renderkid": "2.0.1",
+ "utila": "0.4.0"
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "progress": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+ "dev": true
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "dev": true,
+ "requires": {
+ "asap": "2.0.6"
+ }
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "promise-nodify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/promise-nodify/-/promise-nodify-1.0.2.tgz",
+ "integrity": "sha1-DQ+xQ8M0ALAGG0flgSV1VwR9TFo="
+ },
+ "prop-types": {
+ "version": "15.6.0",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz",
+ "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=",
+ "dev": true,
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "property-is-enumerable-x": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/property-is-enumerable-x/-/property-is-enumerable-x-1.1.0.tgz",
+ "integrity": "sha512-22cKy3w3OpRswU6to9iKWDDlg+F9vF2REcwGlGW23jyLjHb1U/jJEWA44sWupOnkhGfDgotU6Lw+N2oyhNi+5A==",
+ "requires": {
+ "to-object-x": "1.5.0",
+ "to-property-key-x": "2.0.2"
+ }
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true
+ },
+ "proxy-addr": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz",
+ "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.5.2"
+ }
+ },
+ "prr": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
+ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo="
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "public-encrypt": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
+ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "parse-asn1": "5.1.0",
+ "randombytes": "2.0.5"
+ }
+ },
+ "pump": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
+ "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz",
+ "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=",
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.1",
+ "inherits": "2.0.3",
+ "pump": "1.0.3"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+ },
+ "qrcode-reader": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz",
+ "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ=="
+ },
+ "qs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "dev": true
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "strict-uri-encode": "1.1.0"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ }
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "querystringify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz",
+ "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=",
+ "dev": true
+ },
+ "ramda": {
+ "version": "0.24.1",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz",
+ "integrity": "sha1-w7d1UZfzW43DUCIoJixMkd22uFc=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
+ "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
+ "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
+ "requires": {
+ "randombytes": "2.0.5",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "raw-ecdsa": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/raw-ecdsa/-/raw-ecdsa-1.1.1.tgz",
+ "integrity": "sha1-nSdqYNcSOZHworhG6kzMM0Br3P0=",
+ "optional": true,
+ "requires": {
+ "bindings": "1.3.0",
+ "nan": "2.8.0"
+ }
+ },
+ "raw-loader": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
+ "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=",
+ "dev": true
+ },
+ "rc": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz",
+ "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=",
+ "dev": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "read-all-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
+ "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "read-chunk": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-1.0.1.tgz",
+ "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.3",
+ "set-immediate-shim": "1.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "reaver": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/reaver/-/reaver-2.0.0.tgz",
+ "integrity": "sha1-epBv61vBvNCFZ/wjUV807LEnQQY=",
+ "dev": true,
+ "requires": {
+ "minimist": "1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "recast": {
+ "version": "0.11.23",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz",
+ "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=",
+ "requires": {
+ "ast-types": "0.9.6",
+ "esprima": "3.1.3",
+ "private": "0.1.8",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
+ }
+ },
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "requires": {
+ "balanced-match": "0.4.2",
+ "math-expression-evaluator": "1.2.17",
+ "reduce-function-call": "1.0.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
+ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "requires": {
+ "balanced-match": "0.4.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg=="
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A=="
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regexpu-core": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
+ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz",
+ "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=",
+ "dev": true,
+ "requires": {
+ "rc": "1.2.2",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "1.2.2"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "requires": {
+ "jsesc": "0.5.0"
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
+ "renderkid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz",
+ "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=",
+ "dev": true,
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-converter": "0.1.4",
+ "htmlparser2": "3.3.0",
+ "strip-ansi": "3.0.1",
+ "utila": "0.3.3"
+ },
+ "dependencies": {
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz",
+ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
+ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.1.0",
+ "domutils": "1.1.6",
+ "readable-stream": "1.0.34"
+ },
+ "dependencies": {
+ "domutils": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz",
+ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "utila": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
+ "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=",
+ "dev": true
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "replace-comments-x": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-comments-x/-/replace-comments-x-2.0.0.tgz",
+ "integrity": "sha512-+vMP4jqU+8HboLWms6YMNEiaZG5hh1oR6ENCnGYDF/UQ7aYiJUK/8tcl3+KZAHRCKKa3gqzrfiarlUBHQSgRlg==",
+ "requires": {
+ "require-coercible-to-string-x": "1.0.0",
+ "to-string-x": "1.4.2"
+ }
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.81.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "4.2.1",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "performance-now": "0.2.0",
+ "qs": "6.4.0",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.1.0"
+ }
+ },
+ "request-progress": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz",
+ "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=",
+ "dev": true,
+ "requires": {
+ "throttleit": "0.0.2"
+ }
+ },
+ "require-coercible-to-string-x": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/require-coercible-to-string-x/-/require-coercible-to-string-x-1.0.0.tgz",
+ "integrity": "sha512-Rpfd4sMdflPAKecdKhfAtQHlZzzle4UMUgxJ01hXtTcNWMV8w9GeZnKhEyrT73kgrflBOP1zg41amUPZGcNspA==",
+ "requires": {
+ "require-object-coercible-x": "1.4.1",
+ "to-string-x": "1.4.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-from-string": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
+ "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
+ "require-object-coercible-x": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/require-object-coercible-x/-/require-object-coercible-x-1.4.1.tgz",
+ "integrity": "sha512-0YHa2afepsLfQvwQ1P2XvDZnGOUia5sC07ZijIRU2dnsRxnuilXWF6B2CFaKGDA9eZl39lJHrXCDsnfgroRd6Q==",
+ "requires": {
+ "is-nil-x": "1.4.1"
+ }
+ },
+ "require-package-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz",
+ "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resize-img": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/resize-img/-/resize-img-1.1.2.tgz",
+ "integrity": "sha1-+tZQ+vPvLFPqYxErwnLZXp2SVQ4=",
+ "dev": true,
+ "requires": {
+ "bmp-js": "0.0.1",
+ "file-type": "3.9.0",
+ "get-stream": "2.3.1",
+ "jimp": "0.2.28",
+ "jpeg-js": "0.1.2",
+ "parse-png": "1.1.2"
+ },
+ "dependencies": {
+ "bmp-js": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.0.1.tgz",
+ "integrity": "sha1-WtAUcJnROp84qnuZrx1ueGZu038=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "jpeg-js": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz",
+ "integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "3.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "1.1.1",
+ "onetime": "1.1.0"
+ }
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ }
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ }
+ },
+ "rsa-keygen": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/rsa-keygen/-/rsa-keygen-1.0.6.tgz",
+ "integrity": "sha1-PaO/gUfJYkfPaVaBsL2hem76QIY=",
+ "optional": true,
+ "requires": {
+ "nan": "2.3.5"
+ },
+ "dependencies": {
+ "nan": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.3.5.tgz",
+ "integrity": "sha1-gioNwmYpDOTNOhIoLKPn42Rmigg=",
+ "optional": true
+ }
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "requires": {
+ "aproba": "1.2.0"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "rxjs": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.2.tgz",
+ "integrity": "sha512-oRYoIKWBU3Ic37fLA5VJu31VqQO4bWubRntcHSJ+cwaDQBwdnZ9x4zmhJfm/nFQ2E82/I4loSioHnACamrKGgA==",
+ "dev": true,
+ "requires": {
+ "symbol-observable": "1.0.4"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "sass-graph": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "scss-tokenizer": "0.2.3",
+ "yargs": "7.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "5.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ }
+ }
+ }
+ },
+ "sass-loader": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz",
+ "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==",
+ "dev": true,
+ "requires": {
+ "async": "2.6.0",
+ "clone-deep": "0.3.0",
+ "loader-utils": "1.1.0",
+ "lodash.tail": "4.1.1",
+ "pify": "3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.3.0"
+ }
+ },
+ "scss-tokenizer": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "dev": true,
+ "requires": {
+ "js-base64": "2.3.2",
+ "source-map": "0.4.4"
+ }
+ },
+ "seek-bzip": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
+ "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
+ "dev": true,
+ "requires": {
+ "commander": "2.8.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ }
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz",
+ "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=",
+ "dev": true,
+ "requires": {
+ "node-forge": "0.6.33"
+ }
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "dev": true,
+ "requires": {
+ "semver": "5.4.1"
+ }
+ },
+ "send": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz",
+ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ }
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "1.0.3",
+ "http-errors": "1.6.2",
+ "mime-types": "2.1.17",
+ "parseurl": "1.3.2"
+ }
+ },
+ "serve-static": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz",
+ "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.16.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.9",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz",
+ "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "shallow-clone": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz",
+ "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1",
+ "kind-of": "2.0.1",
+ "lazy-cache": "0.2.7",
+ "mixin-object": "2.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
+ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "lazy-cache": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
+ "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=",
+ "dev": true
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "slice-ansi": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+ "dev": true
+ },
+ "slide": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
+ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
+ "dev": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "sockjs": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz",
+ "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "0.10.0",
+ "uuid": "2.0.3"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "sockjs-client": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz",
+ "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "eventsource": "0.1.6",
+ "faye-websocket": "0.11.1",
+ "inherits": "2.0.3",
+ "json3": "3.3.2",
+ "url-parse": "1.2.0"
+ },
+ "dependencies": {
+ "faye-websocket": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
+ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": "0.7.0"
+ }
+ }
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "requires": {
+ "is-plain-obj": "1.1.0"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
+ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A=="
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "source-map-resolve": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
+ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
+ "dev": true,
+ "requires": {
+ "atob": "1.1.3",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.3.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "source-map-url": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz",
+ "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=",
+ "dev": true
+ },
+ "spark-md5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz",
+ "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8="
+ },
+ "sparkles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
+ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw="
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc="
+ },
+ "spdy": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
+ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "handle-thing": "1.2.5",
+ "http-deceiver": "1.2.7",
+ "safe-buffer": "5.1.1",
+ "select-hose": "2.0.0",
+ "spdy-transport": "2.0.20"
+ }
+ },
+ "spdy-transport": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz",
+ "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "detect-node": "2.0.3",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "safe-buffer": "5.1.1",
+ "wbuf": "1.7.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "ssri": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.0.0.tgz",
+ "integrity": "sha512-728D4yoQcQm1ooZvSbywLkV1RjfITZXh0oWrhM/lnsx3nAHx7LsRGJWB/YyvoceAYRq98xqbstiN4JBv1/wNHg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stat-mode": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
+ "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ },
+ "stdout-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
+ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.1.4",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz",
+ "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "stream-shift": "1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
+ "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==",
+ "requires": {
+ "builtin-status-codes": "3.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "to-arraybuffer": "1.0.1",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "stream-to": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stream-to/-/stream-to-0.2.2.tgz",
+ "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=",
+ "dev": true
+ },
+ "stream-to-buffer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz",
+ "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=",
+ "dev": true,
+ "requires": {
+ "stream-to": "0.2.2"
+ }
+ },
+ "stream-to-observable": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz",
+ "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=",
+ "dev": true
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ },
+ "strip-bom-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
+ "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "1.0.0",
+ "strip-bom": "2.0.0"
+ },
+ "dependencies": {
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ }
+ }
+ },
+ "strip-dirs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz",
+ "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "get-stdin": "4.0.1",
+ "is-absolute": "0.1.7",
+ "is-natural-number": "2.1.1",
+ "minimist": "1.2.0",
+ "sum-up": "1.0.3"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ }
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "strip-outer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz",
+ "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "style-loader": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.0.tgz",
+ "integrity": "sha512-9mx9sC9nX1dgP96MZOODpGC6l1RzQBITI2D5WJhu+wnbrSYVKLGuy14XJSLVQih/0GFrPpjelt+s//VcZQ2Evw==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0"
+ }
+ },
+ "sum-up": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz",
+ "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "svg2png": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/svg2png/-/svg2png-3.0.1.tgz",
+ "integrity": "sha1-omRNaLAjGsAK9DGqFjcU/xcQZEc=",
+ "dev": true,
+ "requires": {
+ "phantomjs-prebuilt": "2.1.16",
+ "pn": "1.0.0",
+ "yargs": "3.32.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "os-locale": "1.4.0",
+ "string-width": "1.0.2",
+ "window-size": "0.1.4",
+ "y18n": "3.2.1"
+ }
+ }
+ }
+ },
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "requires": {
+ "coa": "1.0.4",
+ "colors": "1.1.2",
+ "csso": "2.3.2",
+ "js-yaml": "3.7.0",
+ "mkdirp": "0.5.1",
+ "sax": "1.2.4",
+ "whet.extend": "0.9.9"
+ }
+ },
+ "symbol-observable": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz",
+ "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=",
+ "dev": true
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.3.0",
+ "ajv-keywords": "2.1.1",
+ "chalk": "2.3.0",
+ "lodash": "4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "tapable": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
+ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI="
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "tar-stream": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz",
+ "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==",
+ "dev": true,
+ "requires": {
+ "bl": "1.2.1",
+ "end-of-stream": "1.4.0",
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "temp-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+ "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+ "dev": true
+ },
+ "tempfile": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
+ "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
+ "dev": true,
+ "requires": {
+ "temp-dir": "1.0.0",
+ "uuid": "3.1.0"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "then-fs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/then-fs/-/then-fs-2.0.0.tgz",
+ "integrity": "sha1-cveS3Z0xcFqRrhnr/Piz+WjIHaI=",
+ "dev": true,
+ "requires": {
+ "promise": "7.3.1"
+ }
+ },
+ "throttleit": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
+ "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ }
+ }
+ },
+ "through2-filter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
+ "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
+ "dev": true,
+ "requires": {
+ "through2": "2.0.3",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "thunky": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz",
+ "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=",
+ "dev": true
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "timed-out": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
+ "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz",
+ "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==",
+ "requires": {
+ "setimmediate": "1.0.5"
+ }
+ },
+ "tinycolor2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz",
+ "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g="
+ },
+ "tmp": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
+ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "to-absolute-glob": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
+ "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-boolean-x": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-boolean-x/-/to-boolean-x-1.0.1.tgz",
+ "integrity": "sha512-PstxY3K6hVEHnY3FITs8XBoJbt0RI1e4MLIhAL9hWa3BtVLCrb86vU5z6lEKh7uZZjiPiLqIKMmfMro1nNgtXQ=="
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-ico": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/to-ico/-/to-ico-1.1.5.tgz",
+ "integrity": "sha512-5kIh7m7bkIlqIESEZkL8gAMMzucXKfPe3hX2FoDY5HEAfD9OJU+Qh9b6Enp74w0qRcxVT5ejss66PHKqc3AVkg==",
+ "dev": true,
+ "requires": {
+ "arrify": "1.0.1",
+ "buffer-alloc": "1.1.0",
+ "image-size": "0.5.5",
+ "parse-png": "1.1.2",
+ "resize-img": "1.1.2"
+ },
+ "dependencies": {
+ "image-size": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+ "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+ "dev": true
+ }
+ }
+ },
+ "to-integer-x": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/to-integer-x/-/to-integer-x-3.0.0.tgz",
+ "integrity": "sha512-794L2Lpwjtynm7RxahJi2YdbRY75gTxUW27TMuN26UgwPkmJb/+HPhkFEFbz+E4vNoiP0dxq5tq5fkXoXLaK/w==",
+ "requires": {
+ "is-finite-x": "3.0.2",
+ "is-nan-x": "1.0.1",
+ "math-sign-x": "3.0.0",
+ "to-number-x": "2.0.0"
+ }
+ },
+ "to-number-x": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-number-x/-/to-number-x-2.0.0.tgz",
+ "integrity": "sha512-lGOnCoccUoSzjZ/9Uen8TC4+VFaQcFGhTroWTv2tYWxXgyJV1zqAZ8hEIMkez/Eo790fBMOjidTnQ/OJSCvAoQ==",
+ "requires": {
+ "cached-constructors-x": "1.0.0",
+ "nan-x": "1.0.0",
+ "parse-int-x": "2.0.0",
+ "to-primitive-x": "1.1.0",
+ "trim-x": "3.0.0"
+ }
+ },
+ "to-object-x": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/to-object-x/-/to-object-x-1.5.0.tgz",
+ "integrity": "sha512-AKn5GQcdWky+s20vjWkt+Wa6y3dxQH3yQyMBhOfBOPldUwqwhgvlqcIg5H092ntNc+TX8/Cxzs1kMHH19pyCnA==",
+ "requires": {
+ "cached-constructors-x": "1.0.0",
+ "require-object-coercible-x": "1.4.1"
+ }
+ },
+ "to-primitive-x": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/to-primitive-x/-/to-primitive-x-1.1.0.tgz",
+ "integrity": "sha512-gyMY0gi3wjK3e4MUBKqv9Zl8QGcWguIkaUr2VJmoBEsOpDcpDZSEyljR773eVG4maS48uX7muLkoQoh/BA82OQ==",
+ "requires": {
+ "has-symbol-support-x": "1.4.1",
+ "is-date-object": "1.0.1",
+ "is-function-x": "3.3.0",
+ "is-nil-x": "1.4.1",
+ "is-primitive": "2.0.0",
+ "is-symbol": "1.0.1",
+ "require-object-coercible-x": "1.4.1",
+ "validate.io-undefined": "1.0.3"
+ }
+ },
+ "to-property-key-x": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/to-property-key-x/-/to-property-key-x-2.0.2.tgz",
+ "integrity": "sha512-YISLpZFYIazNm0P8hLsKEEUEZ3m8U3+eDysJZqTu3+B9tQp+2TrMpaEGT8Agh4fZ5LSoums60/glNEzk5ozqrg==",
+ "requires": {
+ "has-symbol-support-x": "1.4.1",
+ "to-primitive-x": "1.1.0",
+ "to-string-x": "1.4.2"
+ }
+ },
+ "to-string-symbols-supported-x": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/to-string-symbols-supported-x/-/to-string-symbols-supported-x-1.0.0.tgz",
+ "integrity": "sha512-HbVH673pybrUmhzESGHUm17BBJvqb7BU8HciOvuEYm9ipuDyjmddhvkVqpVW6sM/C5/zhJo17n7O7I/24loJIQ==",
+ "requires": {
+ "cached-constructors-x": "1.0.0",
+ "has-symbol-support-x": "1.4.1",
+ "is-symbol": "1.0.1"
+ }
+ },
+ "to-string-tag-x": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/to-string-tag-x/-/to-string-tag-x-1.4.2.tgz",
+ "integrity": "sha512-ytO9eLigxsQQLGuab0C1iSSTzKdJNVSlBg0Spg4J/rGAVrQJ5y774mo0SSzgGeTT4RJGGyJNfObXaTMzX0XDOQ==",
+ "requires": {
+ "lodash.isnull": "3.0.0",
+ "validate.io-undefined": "1.0.3"
+ }
+ },
+ "to-string-x": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/to-string-x/-/to-string-x-1.4.2.tgz",
+ "integrity": "sha512-/WP5arlwtCpAAexCCHiQBW0eXwse84osWyP1Qtaz71nsYSuUpOkT6tBm8nQ4IIUfSh5hji0hDupUCD2xbbOL6A==",
+ "requires": {
+ "is-symbol": "1.0.1"
+ }
+ },
+ "toposort": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz",
+ "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
+ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "transform-pouch": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/transform-pouch/-/transform-pouch-1.1.4.tgz",
+ "integrity": "sha512-YRiWhJxrzXyj9JfqkpYoIAJ3EtlNVfxldTo8NsPsbNHEIv5F8duWrAPeLujzXrb3Nmi+b9M2jVWj44oJBvxzqw==",
+ "requires": {
+ "argsarray": "0.0.1",
+ "es3ify": "0.2.2",
+ "immediate": "3.0.6",
+ "inherits": "2.0.1",
+ "lie": "3.0.4",
+ "pouchdb-extend": "0.1.2",
+ "pouchdb-promise": "5.4.3",
+ "pouchdb-wrappers": "1.3.6"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ },
+ "lie": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.0.4.tgz",
+ "integrity": "sha1-vHrh6+fxyN45r9zU94kHa0ew9jQ=",
+ "requires": {
+ "es3ify": "0.2.2",
+ "immediate": "3.0.6",
+ "inline-process-browser": "1.0.0",
+ "unreachable-branch-transform": "0.3.0"
+ }
+ },
+ "pouchdb-promise": {
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/pouchdb-promise/-/pouchdb-promise-5.4.3.tgz",
+ "integrity": "sha1-Mx1nCxmJ1aA/JogRIU8n9UFQyys=",
+ "requires": {
+ "lie": "3.0.4"
+ }
+ }
+ }
+ },
+ "trim": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
+ "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
+ "dev": true
+ },
+ "trim-left-x": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/trim-left-x/-/trim-left-x-3.0.0.tgz",
+ "integrity": "sha512-+m6cqkppI+CxQBTwWEZliOHpOBnCArGyMnS1WCLb6IRgukhTkiQu/TNEN5Lj2eM9jk8ewJsc7WxFZfmwNpRXWQ==",
+ "requires": {
+ "cached-constructors-x": "1.0.0",
+ "require-coercible-to-string-x": "1.0.0",
+ "white-space-x": "3.0.0"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-repeated": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+ "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "trim-right-x": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/trim-right-x/-/trim-right-x-3.0.0.tgz",
+ "integrity": "sha512-iIqEsWEbWVodqdixJHi4FoayJkUxhoL4AvSNGp4FF4FfQKRPGizt8++/RnyC9od75y7P/S6EfONoVqP+NddiKA==",
+ "requires": {
+ "cached-constructors-x": "1.0.0",
+ "require-coercible-to-string-x": "1.0.0",
+ "white-space-x": "3.0.0"
+ }
+ },
+ "trim-x": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/trim-x/-/trim-x-3.0.0.tgz",
+ "integrity": "sha512-w8s38RAUScQ6t3XqMkS75iz5ZkIYLQpVnv2lp3IuTS36JdlVzC54oe6okOf4Wz3UH4rr3XAb2xR3kR5Xei82fw==",
+ "requires": {
+ "trim-left-x": "3.0.0",
+ "trim-right-x": "3.0.0"
+ }
+ },
+ "tryit": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "type-is": {
+ "version": "1.6.15",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.17"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.17",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
+ "dev": true
+ },
+ "uglify-es": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.2.0.tgz",
+ "integrity": "sha512-eD4rjK4o6rzrvE1SMZJLQFEVMnWRUyIu6phJ0BXk5TIthMmP5B4QP0HI8o3bkQB5wf1N4WHA0leZAQyQBAd+Jg==",
+ "dev": true,
+ "requires": {
+ "commander": "2.12.2",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz",
+ "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.2.tgz",
+ "integrity": "sha512-k07cmJTj+8vZMSc3BaQ9uW7qVl2MqDts4ti4KaNACXEcXSw2vQM2S8olSk/CODxvcSFGvUHzNSqA8JQlhgUJPw==",
+ "dev": true,
+ "requires": {
+ "cacache": "10.0.1",
+ "find-cache-dir": "1.0.0",
+ "schema-utils": "0.3.0",
+ "source-map": "0.6.1",
+ "uglify-es": "3.2.0",
+ "webpack-sources": "1.0.2",
+ "worker-farm": "1.5.2"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "ultron": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz",
+ "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ=",
+ "dev": true
+ },
+ "unbzip2-stream": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz",
+ "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==",
+ "dev": true,
+ "requires": {
+ "buffer": "3.6.0",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "base64-js": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
+ "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=",
+ "dev": true
+ },
+ "buffer": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz",
+ "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=",
+ "dev": true,
+ "requires": {
+ "base64-js": "0.0.8",
+ "ieee754": "1.1.8",
+ "isarray": "1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "underscore": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
+ "dev": true
+ },
+ "union": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz",
+ "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=",
+ "dev": true,
+ "requires": {
+ "qs": "2.3.3"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz",
+ "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=",
+ "dev": true
+ }
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ },
+ "uniqid": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz",
+ "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=",
+ "requires": {
+ "macaddress": "0.2.8"
+ }
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI="
+ },
+ "unique-filename": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
+ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=",
+ "dev": true,
+ "requires": {
+ "unique-slug": "2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
+ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "0.1.4"
+ }
+ },
+ "unique-stream": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
+ "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "1.0.1",
+ "through2-filter": "2.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unreachable-branch-transform": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz",
+ "integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo=",
+ "requires": {
+ "esmangle-evaluator": "1.0.1",
+ "recast": "0.10.43",
+ "through2": "0.6.5"
+ },
+ "dependencies": {
+ "ast-types": {
+ "version": "0.8.15",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz",
+ "integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI="
+ },
+ "esprima-fb": {
+ "version": "15001.1001.0-dev-harmony-fb",
+ "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz",
+ "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk="
+ },
+ "recast": {
+ "version": "0.10.43",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz",
+ "integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=",
+ "requires": {
+ "ast-types": "0.8.15",
+ "esprima-fb": "15001.1001.0-dev-harmony-fb",
+ "private": "0.1.8",
+ "source-map": "0.5.7"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "unzip-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
+ "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
+ "dev": true
+ },
+ "update-notifier": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.7.0.tgz",
+ "integrity": "sha1-FDxFMzg9CJCO9wVGIGOV/htauwY=",
+ "dev": true,
+ "requires": {
+ "ansi-align": "1.1.0",
+ "boxen": "0.5.1",
+ "chalk": "1.1.3",
+ "configstore": "2.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "2.0.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "2.0.0"
+ }
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ }
+ }
+ },
+ "url-join": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.2.tgz",
+ "integrity": "sha1-wHJ1aWetJLi1nldBVRyqx49QuLc=",
+ "dev": true
+ },
+ "url-loader": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz",
+ "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "1.1.0",
+ "mime": "1.4.1",
+ "schema-utils": "0.3.0"
+ }
+ },
+ "url-parse": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz",
+ "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==",
+ "dev": true,
+ "requires": {
+ "querystringify": "1.0.0",
+ "requires-port": "1.0.0"
+ },
+ "dependencies": {
+ "querystringify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz",
+ "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=",
+ "dev": true
+ }
+ }
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "1.0.4"
+ }
+ },
+ "url-regex": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz",
+ "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=",
+ "dev": true,
+ "requires": {
+ "ip-regex": "1.0.3"
+ }
+ },
+ "url-to-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
+ "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
+ "dev": true
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "vali-date": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
+ "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "validate.io-undefined": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/validate.io-undefined/-/validate.io-undefined-1.0.3.tgz",
+ "integrity": "sha1-fif8uzFbhB54JDQxiXZxkp4gt/Q="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "vee-validate": {
+ "version": "2.0.0-rc.21",
+ "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-2.0.0-rc.21.tgz",
+ "integrity": "sha512-KryCEZcfYKuB6EAWQXYfK38C0nPagbmPLyh5CrXSbt8vsLjjUCHXENxyuzKdu545c6mt+TnR2nlYjR72gKbqKg=="
+ },
+ "vendors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz",
+ "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "vinyl": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ },
+ "vinyl-assign": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz",
+ "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "vinyl-fs": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
+ "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.1",
+ "glob-stream": "5.3.5",
+ "graceful-fs": "4.1.11",
+ "gulp-sourcemaps": "1.6.0",
+ "is-valid-glob": "0.3.0",
+ "lazystream": "1.0.0",
+ "lodash.isequal": "4.5.0",
+ "merge-stream": "1.0.1",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1",
+ "readable-stream": "2.3.3",
+ "strip-bom": "2.0.0",
+ "strip-bom-stream": "1.0.0",
+ "through2": "2.0.3",
+ "through2-filter": "2.0.0",
+ "vali-date": "1.0.0",
+ "vinyl": "1.2.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "vue": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.3.tgz",
+ "integrity": "sha512-C8O5ZtR9jpwm6sCre3k42/WvuAcil5hH1+c3mJks8kNCYKh57sQh6I5U7m9L0fD89OKkIofmebUORngZkLedNA=="
+ },
+ "vue-color": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/vue-color/-/vue-color-2.4.2.tgz",
+ "integrity": "sha1-qhL/W8UzmucEYSuKlO6+UntWfdw=",
+ "requires": {
+ "lodash.throttle": "4.1.1",
+ "material-colors": "1.2.5",
+ "tinycolor2": "1.4.1"
+ }
+ },
+ "vue-hot-reload-api": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.2.3.tgz",
+ "integrity": "sha512-LNdf9SYan0S8DurNuMzBE6yZGI8B42CRvpm7OtyH3OkhYYlNZOqcLAYsPszsxKnLfo5p93Oszw4qSwbHTJdrow=="
+ },
+ "vue-i18n": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-7.3.2.tgz",
+ "integrity": "sha512-4NBhqrH4Pe1etecC2aafXEKH9gJY+TaO4EHYZ0EBYPwFakUp4FyDHHf+r2N1keSX60iEm1k25WcVMD+OxAH/yw=="
+ },
+ "vue-loader": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-13.5.0.tgz",
+ "integrity": "sha512-O0+ZU1oyLlDXSAQB7pV/pwVt3wJLfyhXtnGpCVFBGMKGC0Yp9Un7ULFHKejrFEYaMBKY0s6h4iJzjMdSngNA2g==",
+ "requires": {
+ "consolidate": "0.14.5",
+ "hash-sum": "1.0.2",
+ "loader-utils": "1.1.0",
+ "lru-cache": "4.1.1",
+ "postcss": "6.0.14",
+ "postcss-load-config": "1.2.0",
+ "postcss-selector-parser": "2.2.3",
+ "prettier": "1.8.2",
+ "resolve": "1.5.0",
+ "source-map": "0.6.1",
+ "vue-hot-reload-api": "2.2.3",
+ "vue-style-loader": "3.0.3",
+ "vue-template-es2015-compiler": "1.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "postcss": {
+ "version": "6.0.14",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz",
+ "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==",
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "4.5.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "vue-multiselect": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.0.6.tgz",
+ "integrity": "sha1-fKgObFPbQeQUv3ama5N33fRlnr0="
+ },
+ "vue-router": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.1.tgz",
+ "integrity": "sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w=="
+ },
+ "vue-style-loader": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.0.3.tgz",
+ "integrity": "sha512-P/ihpaZKU23T1kq3E0y4c+F8sbm1HQO69EFYoLoGMSGVAHroHsGir/WQ9qUavP8dyFYHmXenzHaJ/nqd8vfaxw==",
+ "requires": {
+ "hash-sum": "1.0.2",
+ "loader-utils": "1.1.0"
+ }
+ },
+ "vue-template-compiler": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.3.tgz",
+ "integrity": "sha512-C7yWPyT8ZPyXv9AL1eZEZSp72qDHGSgfD80Rf2A9s2vKmMbUuRInfsDsOfYtoiN2hK4hMGMQ71xaZs2e8RnucQ==",
+ "dev": true,
+ "requires": {
+ "de-indent": "1.0.2",
+ "he": "1.1.1"
+ }
+ },
+ "vue-template-es2015-compiler": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz",
+ "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg=="
+ },
+ "vuex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz",
+ "integrity": "sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w=="
+ },
+ "vuex-router-sync": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/vuex-router-sync/-/vuex-router-sync-5.0.0.tgz",
+ "integrity": "sha512-Mry2sO4kiAG64714X1CFpTA/shUH1DmkZ26DFDtwoM/yyx6OtMrc+MxrU+7vvbNLO9LSpgwkiJ8W+rlmRtsM+w=="
+ },
+ "vuvuzela": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz",
+ "integrity": "sha1-O+FF5YJxxzylUnndhR8SpoIRSws="
+ },
+ "watchpack": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz",
+ "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=",
+ "requires": {
+ "async": "2.6.0",
+ "chokidar": "1.7.0",
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "wbuf": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz",
+ "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "webpack": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz",
+ "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==",
+ "requires": {
+ "acorn": "5.2.1",
+ "acorn-dynamic-import": "2.0.2",
+ "ajv": "5.3.0",
+ "ajv-keywords": "2.1.1",
+ "async": "2.6.0",
+ "enhanced-resolve": "3.4.1",
+ "escope": "3.6.0",
+ "interpret": "1.0.4",
+ "json-loader": "0.5.7",
+ "json5": "0.5.1",
+ "loader-runner": "2.3.0",
+ "loader-utils": "1.1.0",
+ "memory-fs": "0.4.1",
+ "mkdirp": "0.5.1",
+ "node-libs-browser": "2.0.0",
+ "source-map": "0.5.7",
+ "supports-color": "4.5.0",
+ "tapable": "0.2.8",
+ "uglifyjs-webpack-plugin": "0.4.6",
+ "watchpack": "1.4.0",
+ "webpack-sources": "1.0.2",
+ "yargs": "8.0.2"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w=="
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
+ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-js": "2.8.29",
+ "webpack-sources": "1.0.2"
+ }
+ }
+ }
+ },
+ "webpack-bundle-analyzer": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.1.tgz",
+ "integrity": "sha512-a+UcvlsXvCmclNgfThT8PVyuJKd029By7CxkYEbNNCfs0Lqj9gagjkdv3S3MBvCIKBaUGYs8l4UpiVI0bFoh2Q==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.2.1",
+ "chalk": "1.1.3",
+ "commander": "2.11.0",
+ "ejs": "2.5.7",
+ "express": "4.16.2",
+ "filesize": "3.5.11",
+ "gzip-size": "3.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "opener": "1.4.3",
+ "ws": "3.3.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==",
+ "dev": true
+ },
+ "filesize": {
+ "version": "3.5.11",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz",
+ "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-core": {
+ "version": "0.6.9",
+ "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz",
+ "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=",
+ "dev": true,
+ "requires": {
+ "source-list-map": "0.1.8",
+ "source-map": "0.4.4"
+ },
+ "dependencies": {
+ "source-list-map": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
+ "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=",
+ "dev": true
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz",
+ "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=",
+ "dev": true,
+ "requires": {
+ "memory-fs": "0.4.1",
+ "mime": "1.4.1",
+ "path-is-absolute": "1.0.1",
+ "range-parser": "1.2.0",
+ "time-stamp": "2.0.0"
+ },
+ "dependencies": {
+ "time-stamp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz",
+ "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=",
+ "dev": true
+ }
+ }
+ },
+ "webpack-dev-server": {
+ "version": "2.9.4",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz",
+ "integrity": "sha512-thrqC0EQEoSjXeYgP6pUXcUCZ+LNrKsDPn+mItLnn5VyyNZOJKd06hUP5vqkYwL8nWWXsii0loSF9NHNccT6ow==",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "array-includes": "3.0.3",
+ "bonjour": "3.5.0",
+ "chokidar": "1.7.0",
+ "compression": "1.7.1",
+ "connect-history-api-fallback": "1.5.0",
+ "debug": "3.1.0",
+ "del": "3.0.0",
+ "express": "4.16.2",
+ "html-entities": "1.2.1",
+ "http-proxy-middleware": "0.17.4",
+ "import-local": "0.1.1",
+ "internal-ip": "1.2.0",
+ "ip": "1.1.5",
+ "killable": "1.0.0",
+ "loglevel": "1.6.0",
+ "opn": "5.1.0",
+ "portfinder": "1.0.13",
+ "selfsigned": "1.10.1",
+ "serve-index": "1.9.1",
+ "sockjs": "0.3.18",
+ "sockjs-client": "1.1.4",
+ "spdy": "3.4.7",
+ "strip-ansi": "3.0.1",
+ "supports-color": "4.5.0",
+ "webpack-dev-middleware": "1.12.0",
+ "yargs": "6.6.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "6.1.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "p-map": "1.2.0",
+ "pify": "3.0.0",
+ "rimraf": "2.6.2"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
+ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "4.2.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
+ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ }
+ }
+ }
+ },
+ "webpack-sources": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.2.tgz",
+ "integrity": "sha512-Y7UddMCv6dGjy81nBv6nuQeFFIt5aalHm7uyDsAsW86nZwfOVPGRr3XMjEQLaT+WKo8rlzhC9qtbJvYKLtAwaw==",
+ "requires": {
+ "source-list-map": "2.0.0",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
+ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+ "dev": true,
+ "requires": {
+ "http-parser-js": "0.4.9",
+ "websocket-extensions": "0.1.3"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+ "dev": true
+ },
+ "whatwg-fetch": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz",
+ "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=",
+ "dev": true
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE="
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "white-space-x": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/white-space-x/-/white-space-x-3.0.0.tgz",
+ "integrity": "sha512-nMPVXGMdi/jQepXKryxqzEh/vCwdOYY/u6NZy40glMHvZfEr7/+vQKnDhEq4rZ1nniOFq9GWohQYB30uW/5Olg=="
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "widest-line": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz",
+ "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ },
+ "worker-farm": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.2.tgz",
+ "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==",
+ "dev": true,
+ "requires": {
+ "errno": "0.1.4",
+ "xtend": "4.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
+ "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "slide": "1.1.6"
+ }
+ },
+ "ws": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.1.tgz",
+ "integrity": "sha512-8A/uRMnQy8KCQsmep1m7Bk+z/+LIkeF7w+TDMLtX1iZm5Hq9HsUDmgFGaW1ACW5Cj0b2Qo7wCvRhYN2ErUVp/A==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.0"
+ }
+ },
+ "xdg-basedir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz",
+ "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "xhr": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.4.0.tgz",
+ "integrity": "sha1-4W5mpF+GmGHu76tBbV7/ci3ECZM=",
+ "dev": true,
+ "requires": {
+ "global": "4.3.2",
+ "is-function": "1.0.1",
+ "parse-headers": "2.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "xml-char-classes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
+ "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=",
+ "dev": true
+ },
+ "xml-parse-from-string": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
+ "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=",
+ "dev": true
+ },
+ "xml2js": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "dev": true,
+ "requires": {
+ "sax": "1.2.4",
+ "xmlbuilder": "9.0.4"
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz",
+ "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "requires": {
+ "camelcase": "4.1.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "read-pkg-up": "2.0.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "7.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "requires": {
+ "camelcase": "4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ }
+ }
+ },
+ "yauzl": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz",
+ "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "0.2.13",
+ "fd-slicer": "1.0.1"
+ }
+ }
+ }
+}
diff --git a/clients/binsa/package.json b/clients/binsa/package.json
new file mode 100644
index 0000000..f1fb700
--- /dev/null
+++ b/clients/binsa/package.json
@@ -0,0 +1,107 @@
+{
+ "name": "binsa",
+ "title": "Eclipse Unide Sensor Simulator App",
+ "version": "2.0.7",
+ "description": "Eclipse Unide Sensor Simulator Application",
+ "main": "index.html",
+ "dependencies": {
+ "axios": "^0.17.1",
+ "babel-runtime": "^6.23.0",
+ "buefy": "^0.6.1",
+ "bulma": "^0.6.1",
+ "crypto-pouch": "^3.1.2",
+ "css-loader": "^0.28.7",
+ "es6-promise": "^4.1.1",
+ "font-awesome": "^4.7.0",
+ "inherits": "^2.0.3",
+ "lodash": "^4.17.4",
+ "offline-plugin": "^4.6.2",
+ "pouchdb-adapter-idb": "^6.2.0",
+ "pouchdb-adapter-websql": "^6.3.4",
+ "pouchdb-core": "^6.2.0",
+ "pouchdb-utils": "^6.2.0",
+ "qrcode-reader": "^1.0.4",
+ "vee-validate": "^2.0.0-rc.21",
+ "vue": "^2.5.3",
+ "vue-color": "^2.4.2",
+ "vue-i18n": "^7.3.2",
+ "vue-loader": "^13.5.0",
+ "vue-multiselect": "^2.0.6",
+ "vue-router": "^3.0.1",
+ "vue-style-loader": "^3.0.3",
+ "vuex": "^3.0.1",
+ "vuex-router-sync": "^5.0.0",
+ "webpack": "^3.8.1"
+ },
+ "devDependencies": {
+ "babel-cli": "^6.23.0",
+ "babel-core": "^6.23.1",
+ "babel-eslint": "^8.0.2",
+ "babel-loader": "^7.1.2",
+ "babel-plugin-lodash": "^3.3.2",
+ "babel-plugin-syntax-dynamic-import": "^6.18.0",
+ "babel-plugin-transform-flow-strip-types": "^6.22.0",
+ "babel-plugin-transform-runtime": "^6.23.0",
+ "babel-preset-env": "^1.6.1",
+ "clean-webpack-plugin": "^0.1.15",
+ "copy-webpack-plugin": "^4.2.0",
+ "cypress": "^1.0.3",
+ "eslint": "^4.11.0",
+ "eslint-config-standard": "^10.2.1",
+ "eslint-config-vue": "^2.0.2",
+ "eslint-loader": "^1.6.3",
+ "eslint-plugin-babel": "^4.0.1",
+ "eslint-plugin-html": "^4.0.0",
+ "eslint-plugin-import": "^2.8.0",
+ "eslint-plugin-node": "^5.2.1",
+ "eslint-plugin-promise": "^3.6.0",
+ "eslint-plugin-standard": "^3.0.1",
+ "eslint-plugin-vue": "^2.1.0",
+ "extract-text-webpack-plugin": "^3.0.2",
+ "favicons-webpack-plugin": "0.0.7",
+ "file-loader": "^1.1.5",
+ "html-critical-webpack-plugin": "^1.0.1",
+ "html-webpack-plugin": "^2.28.0",
+ "http-server": "^0.10.0",
+ "json-loader": "^0.5.4",
+ "jszip": "^3.1.5",
+ "lodash-webpack-plugin": "^0.11.0",
+ "node-sass": "^4.6.1",
+ "null-loader": "^0.1.1",
+ "nw": "^0.26.6",
+ "raw-loader": "^0.5.1",
+ "sass-loader": "^6.0.2",
+ "style-loader": "^0.19.0",
+ "uglifyjs-webpack-plugin": "^1.1.2",
+ "url-loader": "^0.6.2",
+ "vue-template-compiler": "^2.5.3",
+ "webpack-bundle-analyzer": "^2.9.1",
+ "webpack-dev-server": "^2.9.3"
+ },
+ "scripts": {
+ "preversion": "npm run lint",
+ "postversion": "git push && git push --tags",
+ "postinstall": "npm run dist",
+ "start": "nw dist",
+ "lint": "node node_modules/eslint/bin/eslint src --ext js,vue",
+ "watch": "webpack --config ./conf/webpack.prod.js --progress --watch",
+ "build": "npm run lint && webpack --config ./conf/webpack.prod.js --progress && http-server ./dist -o",
+ "dist": "npm run lint && webpack --config ./conf/webpack.prod.js --progress",
+ "dev": "webpack-dev-server --config ./conf/webpack.dev.js",
+ "analyze": "webpack --config ./conf/webpack.dev.js --profile --json > ./dist/stats.json && webpack-bundle-analyzer ./dist/stats.json ./dist -m static -r ./dist/report.html",
+ "test": "cypress run -s tests/integration/main_spec.js",
+ "cypress": "cypress open"
+ },
+ "author": "Axel Meinhardt ",
+ "license": "EPLv2",
+ "window": {
+ "toolbar": false,
+ "icon": "./icons/android-chrome-128x128.png",
+ "width": 680,
+ "height": 720
+ },
+ "engines": {
+ "node": ">=8.0",
+ "npm": ">=5.5.1"
+ }
+}
diff --git a/clients/binsa/sandbox.html b/clients/binsa/sandbox.html
new file mode 100644
index 0000000..2ca75cc
--- /dev/null
+++ b/clients/binsa/sandbox.html
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/app.vue b/clients/binsa/src/app.vue
new file mode 100644
index 0000000..3420366
--- /dev/null
+++ b/clients/binsa/src/app.vue
@@ -0,0 +1,205 @@
+
+
+
+
+ Home
+
+
+ PPMP
+
+
+ bar
+
+
+ CI helper
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/background.js b/clients/binsa/src/background.js
new file mode 100644
index 0000000..ccdd444
--- /dev/null
+++ b/clients/binsa/src/background.js
@@ -0,0 +1,19 @@
+if(chrome && chrome.app) {
+ chrome.app.runtime.onLaunched.addListener(function() {
+ chrome.app.window.create('index.html', {
+ outerBounds: {
+ width: 680,
+ height: 720
+ }
+ });
+ });
+} else if(browser) {
+ browser.browserAction.onClicked.addListener(() => {
+ browser.windows.create({
+ url: 'index.html',
+ width: 680,
+ height: 820,
+ type: 'panel'
+ });
+ });
+}
diff --git a/clients/binsa/src/components/collapsibleCard.vue b/clients/binsa/src/components/collapsibleCard.vue
new file mode 100644
index 0000000..0d8900c
--- /dev/null
+++ b/clients/binsa/src/components/collapsibleCard.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/components/dataConcent.vue b/clients/binsa/src/components/dataConcent.vue
new file mode 100644
index 0000000..837ea70
--- /dev/null
+++ b/clients/binsa/src/components/dataConcent.vue
@@ -0,0 +1,42 @@
+
+
+ {{ $t(`dataConcent.title`) }}
+ {{ $t(`dataConcent.titleAccepted`) }}
+
+
{{ $t(`dataConcent.information`) }}
+
{{ $t(`dataConcent.requirement`) }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clients/binsa/src/components/login.vue b/clients/binsa/src/components/login.vue
new file mode 100644
index 0000000..a6dbd37
--- /dev/null
+++ b/clients/binsa/src/components/login.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+ {{ $t('login.user.label') }}
+
+
+
+
+
+
+
+
{{ errors.first('user') }}
+
+
+
+ {{ $t('login.password.label') }}
+
+
+
+
+
+
+
+
{{ errors.first('password') }}
+
+
+
+
+
+
+ {{ $t('login.remember') }}
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/components/messageForm.vue b/clients/binsa/src/components/messageForm.vue
new file mode 100644
index 0000000..22ebdfb
--- /dev/null
+++ b/clients/binsa/src/components/messageForm.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/components/navbar.vue b/clients/binsa/src/components/navbar.vue
new file mode 100644
index 0000000..c862b8e
--- /dev/null
+++ b/clients/binsa/src/components/navbar.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+
diff --git a/clients/binsa/src/components/qrField.vue b/clients/binsa/src/components/qrField.vue
new file mode 100644
index 0000000..270fe45
--- /dev/null
+++ b/clients/binsa/src/components/qrField.vue
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/components/selectLang.vue b/clients/binsa/src/components/selectLang.vue
new file mode 100644
index 0000000..88c7b3b
--- /dev/null
+++ b/clients/binsa/src/components/selectLang.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/components/url.vue b/clients/binsa/src/components/url.vue
new file mode 100644
index 0000000..66b3de5
--- /dev/null
+++ b/clients/binsa/src/components/url.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+ http
+ https
+
+
+
+
+
+ ://
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/i18n/de.json b/clients/binsa/src/i18n/de.json
new file mode 100644
index 0000000..a31af0a
--- /dev/null
+++ b/clients/binsa/src/i18n/de.json
@@ -0,0 +1,139 @@
+{
+ "currentLang": "Aktuelle Sprache",
+ "notFound": "Die Seite '{path}' wurde nicht gefunden",
+ "add": "Zufügen",
+ "edit": "Ändern",
+ "save": "Speichern",
+ "delete": "Löschen",
+ "cancel": "Abbrechen",
+ "send": "Senden",
+ "notSupported": "Dieses Feature ist nicht supported in ihrem Browser. Bitte updaten Sie oder nutzen Sie einen anderen Browser.",
+ "login": {
+ "title": "Anmeldung",
+ "user": {
+ "label": "Benutzer",
+ "placeholder": "Geben Sie ihren Namen ein"
+ },
+ "password": {
+ "label": "Passwort",
+ "placeholder": "Geben Sie ihr Passwort ein"
+ },
+ "remember": "Eingeloggt bleiben",
+ "login": "Anmelden",
+ "anonymous": "Anonym weiter",
+ "confirmation": {
+ "title": "Bestätigung benötigt",
+ "message": "Es gibt bereits einen Eintrag für '{name}'. Soll der überschrieben werden?",
+ "cancelText": "nein, doch nicht",
+ "ok": "ja, überschreiben",
+ "confirmed": "Eintrag '{name}' geöffnet!"
+ }
+ },
+ "about": {
+ "about": "Über die Anwendung",
+ "title": "Name",
+ "dataConcent": "Datenschutz",
+ "description": "Beschreibung",
+ "author": "Autor",
+ "version": "Version",
+ "license": "Lizenz",
+ "source": "Quellcode",
+ "repository": "Repository",
+ "licenses": "Verwendete Bibliotheken & Lizenzen"
+ },
+ "dataConcent": {
+ "title": "Information zur Datenverwaltung",
+ "titleAccepted": "Information zur Datenverwaltung (akzeptiert)",
+ "information": "Diese Webseite speichert Konfigurationsdaten für Funktions-, Komfortzwecke. Die Daten werden nur lokal in dem Browser/App gespeichert. Wenn Sie einen Benutzernamen und Passwort eintragen, dann werden die Daten verschlüsselt (AES-GCM/SHA256). Sie können die Daten jederzeit einsehen, ändern oder löschen, indem Sie auf den 'Konfiguration' Knopf klicken. Sie können die Daten komplett löschen, indem Sie den Cache der Seite/App im Browser/App Einstellungen löschen.",
+ "requirement": "Fahren Sie nur fort, wenn Sie mit dem Speichern dieser Daten einverstanden sind."
+ },
+ "home": {
+ "title": "Dies ist ein Client und Service, um PPMP Nachrichten zu validieren",
+ "subtitle": "Die folgenden Schnittstellen sind verfügbar"
+ },
+ "ppmp": {
+ "title": "PPMP Server",
+ "target": "Ziel",
+ "config": "Konfiguration",
+ "device": "Geräte Id",
+ "operationalStatus": "Betriebszustand",
+ "initSample": "Beispielkonfiguration anlegen",
+ "measurements": {
+ "title": "Messwerte",
+ "sensor": "Sensor",
+ "sensors": "Sensoren",
+ "value": "Wert",
+ "alias": "Alias Name",
+ "assign": "Zuweisen",
+ "deleted": "Gelöscht",
+ "notDeleted": "Löschen fehlgeschlagen",
+ "saved": "Gespeichert",
+ "notSaved": "Speichern fehlgeschlagen",
+ "translate": "Weise '{name}' einen Namen zu",
+ "sensorNames": {
+ "motion": "Bewegung",
+ "orientation": "Ausrichtung",
+ "battery": "Batterie",
+ "position": "Position",
+ "cpu": "Prozessor",
+ "mem": "Arbeitsspeicher"
+ },
+ "selected": "{0} ausgewählt",
+ "sendingFrequency": {
+ "title": "Sende mit einer Frequenz von (ms)",
+ "placeholder": "Zeit in Millisekunden"
+ },
+ "samplingFrequency": {
+ "title": "Sampling Frequenz von (ms)",
+ "placeholder": "Zeit in Millisekunden"
+ }
+ },
+ "processes": {
+ "title": "Prozesse",
+ "measurements": "Gesamtanzahl Messwerte",
+ "phases": "Phasen",
+ "startTime": "Gestartet am",
+ "duration": "Zeitspanne",
+ "details": "Details"
+ },
+ "messages": {
+ "title": "Maschinennachrichten",
+ "manual": "Manuell erstellen"
+ },
+ "optional": "optional",
+ "noCameras": "Keine Kameras gefunden",
+ "scanQrCode": "QR code scannen",
+ "connectionError": "Verbindungsproblem"
+ },
+ "configuration": {
+ "title": "Einstellungen",
+ "language": "Sprache",
+ "sections": {
+ "preferences": "Persönliche Einstellungen",
+ "im3": "Identity Management 3",
+ "ppm": "Production Performance Manager",
+ "ppmp": "PPMP Server"
+ },
+ "login": {
+ "title": "Login"
+ },
+ "user": {
+ "placeholder": "Benutzer"
+ },
+ "password": {
+ "placeholder": "Passwort"
+ },
+ "name": {
+ "title": "Name",
+ "placeholder": "Geben Sie den Namen ein",
+ "description": "Der Name dieses Konfigurationssatzes."
+ },
+ "url": {
+ "title": "URL",
+ "description": "Das Protocol, Host und der Port des Servers."
+ },
+ "appendType": "Nachrichtentyp als REST Pfad /v2/... anhängen?",
+ "filter": "Filter",
+ "messages": "Vorbereitetete Nachrichten"
+ }
+}
diff --git a/clients/binsa/src/i18n/en.json b/clients/binsa/src/i18n/en.json
new file mode 100644
index 0000000..a836e7b
--- /dev/null
+++ b/clients/binsa/src/i18n/en.json
@@ -0,0 +1,139 @@
+{
+ "currentLang": "Current language",
+ "notFound": "Page '{path}' not found",
+ "add": "Add",
+ "edit": "Edit",
+ "save": "Save",
+ "delete": "Delete",
+ "cancel": "Cancel",
+ "send": "Send",
+ "notSupported": "This feature is not supported by your browser. Please update or use a different browser.",
+ "login": {
+ "title": "Login",
+ "user": {
+ "label": "User",
+ "placeholder": "Enter your user"
+ },
+ "password": {
+ "label": "Password",
+ "placeholder": "Enter your password"
+ },
+ "remember": "Remember me",
+ "login": "Login",
+ "anonymous": "Continue anonymously",
+ "confirmation": {
+ "title": "Confirmation required",
+ "message": "There is already an entry for '{name}'. Should it be overwritten?",
+ "cancelText": "no, please don't",
+ "ok": "ok, overwrite",
+ "confirmed": "Opened entry '{name}'!"
+ }
+ },
+ "about": {
+ "about": "About the application",
+ "title": "Name",
+ "dataConcent": "Data Protection",
+ "description": "Description",
+ "author": "Author",
+ "version": "Version",
+ "license": "License",
+ "source": "Sourcecode",
+ "repository": "Repository",
+ "licenses": "3rd party licenses"
+ },
+ "dataConcent": {
+ "title": "Data management information",
+ "titleAccepted": "Data management information (accepted)",
+ "information": "This app stores configuration data for reasons of functionality and convenience. The data is only stored locally on your browser/app. If you provide a username and password, it is encrypted (AES-GCM/SHA256). You can see, change and delete these configurations at any time by clicking on the 'settings' icon. You can completely remove the data from your local device by deleting the cache of the site/app in your browser/app settings.",
+ "requirement": "Only proceed, if you consent to this storing of configuration data."
+ },
+ "home": {
+ "title": "This is a client and service for validating PPMP-messages",
+ "subtitle": "The following endpoints are available"
+ },
+ "ppmp": {
+ "title": "PPMP Server",
+ "target": "Target",
+ "config": "Configuration",
+ "device": "Device Id",
+ "operationalStatus": "Op. Status",
+ "initSample": "Create sample config",
+ "measurements": {
+ "title": "Measurements",
+ "sensor": "Sensor",
+ "sensors": "Sensors",
+ "value": "Value",
+ "alias": "Given name",
+ "assign": "Assign",
+ "deleted": "Deleted",
+ "notDeleted": "Deleting failed",
+ "saved": "Saved",
+ "notSaved": "Saving failed",
+ "translate": "Assign a name to '{name}'",
+ "sensorNames": {
+ "motion": "Motion",
+ "orientation": "Orientation",
+ "battery": "Battery",
+ "position": "Position",
+ "cpu": "Processor",
+ "mem": "RAM"
+ },
+ "selected": "{0} selected",
+ "sendingFrequency": {
+ "title": "Send with a frequency of (ms)",
+ "placeholder": "time in milliseconds"
+ },
+ "samplingFrequency": {
+ "title": "Sampling frequency of (ms)",
+ "placeholder": "time in milliseconds"
+ }
+ },
+ "processes": {
+ "title": "Processes",
+ "measurements": "Total Measurements",
+ "phases": "Phases",
+ "startTime": "Start Time",
+ "duration": "Duration",
+ "details": "Details"
+ },
+ "messages": {
+ "title": "Machine Messages",
+ "manual": "Create manually"
+ },
+ "optional": "optional",
+ "noCameras": "No cameras found",
+ "scanQrCode": "Scan QR code",
+ "connectionError": "Connection Error"
+ },
+ "configuration": {
+ "title": "Configurations",
+ "language": "Language",
+ "sections": {
+ "preferences": "Preferences",
+ "im3": "Identity Management 3",
+ "ppm": "Production Performance Manager",
+ "ppmp": "PPMP Server"
+ },
+ "login": {
+ "title": "Login"
+ },
+ "user": {
+ "placeholder": "User"
+ },
+ "password": {
+ "placeholder": "Password"
+ },
+ "name": {
+ "title": "Name",
+ "placeholder": "enter configuration name",
+ "description": "The name of this configuration set."
+ },
+ "url": {
+ "title": "URL",
+ "description": "The protocol, host and port of the server."
+ },
+ "appendType": "Append message type as REST path /v2/...?",
+ "filter": "Filter",
+ "messages": "Preconfigured messages"
+ }
+}
diff --git a/clients/binsa/src/i18n/es.json b/clients/binsa/src/i18n/es.json
new file mode 100644
index 0000000..8623502
--- /dev/null
+++ b/clients/binsa/src/i18n/es.json
@@ -0,0 +1,144 @@
+{
+ "currentLang": "Idioma seleccionada",
+ "notFound": "Página '{path}' no encontrada",
+ "add": "Añadir",
+ "edit": "Modificar",
+ "save": "Guardar",
+ "delete": "Borrar",
+ "cancel": "Cancelar",
+ "send": "Enviar",
+ "notSupported": "Este función no esta disponible.",
+ "login": {
+ "title": "Login",
+ "user": {
+ "label": "Usuario",
+ "placeholder": "Ingrese su usario"
+ },
+ "password": {
+ "label": "Contraseña",
+ "placeholder": "Ingrese su contraseña"
+ },
+ "remember": "Recordar mi registro",
+ "login": "Iniciar sesión",
+ "anonymous": "Continuar anónimamente",
+ "confirmation": {
+ "title": "Confirmación necesaria",
+ "message": "Ya existe una entrada para '{name}'. ¿Debería sobrescribirlo?",
+ "cancelText": "no, por favor no!",
+ "ok": "si, subrescribirlo",
+ "confirmed": "Entrada '{name}' se sobrescribió!"
+ }
+ },
+ "about": {
+ "about": "Sobre la application",
+ "title": "Nombre",
+ "dataConcent": "Protección de datos",
+ "description": "Descripción",
+ "author": "Autor",
+ "version": "Versión",
+ "license": "Licencia",
+ "source": "Código fuente",
+ "repository": "Repositorio",
+ "licenses": "Librarias & licencias usadas"
+ },
+ "dataConcent": {
+ "title": "Información de gestión de datos",
+ "titleAccepted": "Información de gestión de datos (aceptada)",
+ "information": "Esta aplicación almacena datos de configuración por razones de funcionalidad y conveniencia. Los datos solo se almacenan localmente en su navegador / aplicación. Si proporciona un nombre de usuario y contraseña, está encriptado (AES-GCM / SHA256). Puede ver, cambiar y eliminar estas configuraciones en cualquier momento haciendo clic en el ícono 'configuración'. Puede eliminar completamente los datos de su dispositivo local al eliminar la memoria caché del sitio / aplicación en la configuración de su navegador / aplicación.",
+ "requirement": "Solo proceda, si acepta este almacenamiento de datos de configuración."
+ },
+ "home": {
+ "title": "Eso es un cliente y servicio para validar mensajes de PPMP",
+ "subtitle": "Las interfaces siguientes estan disponible"
+ },
+ "ppmp": {
+ "title": "PPMP Server",
+ "target": "Destino",
+ "config": "Configuracion",
+ "device": "Id del Equipo",
+ "operationalStatus": "Funcionamiento",
+ "initSample": "Crear configuración de muestra",
+ "measurements": {
+ "title": "Valores de medición",
+ "sensor": "Sensor",
+ "sensors": "Sensores",
+ "value": "Dato",
+ "alias": "Nombre",
+ "assign": "Asignar",
+ "deleted": "Borrado",
+ "notDeleted": "El borrado fallo",
+ "saved": "Guardado",
+ "notSaved": "El guardmiento fallo",
+ "translate": "Assigna un nombre a '{name}'",
+ "sensorNames": {
+ "motion": "Movimiento",
+ "orientation": "Alineamiento",
+ "battery": "Pila",
+ "position": "Posición",
+ "cpu": "Procesador",
+ "mem": "Memoria RAM"
+ },
+ "selected": "{0} seleccionado",
+ "sendingFrequency": {
+ "title": "Enviar con frecuencia en (ms)",
+ "placeholder": "tiempo en milisegundos"
+ },
+ "samplingFrequency": {
+ "title": "Frecuencia de muestreo en (ms)",
+ "placeholder": "tiempo en milisegundos"
+ }
+ },
+ "processes": {
+ "title": "Procesos",
+ "measurements": "Número de valores",
+ "phases": "Fase",
+ "startTime": "Hora de despeque",
+ "duration": "Periodo",
+ "details": "Detalles"
+ },
+ "messages": {
+ "title": "Mensajes del equipo",
+ "manual": "Crear a mano"
+ },
+ "optional": "opcional",
+ "noCameras": "No camera encontrado",
+ "scanQrCode": "Esccanea código QR",
+ "connectionError": "Error conexión de red"
+ },
+ "configuration": {
+ "title": "Configuraciones",
+ "language": "Idioma",
+ "sections": {
+ "preferences": "Configurationes preferidas",
+ "im3": "Identity Management 3",
+ "ppm": "Production Performance Manager",
+ "ppmp": "PPMP Server"
+ },
+ "login": {
+ "title": "Login"
+ },
+ "user": {
+ "placeholder": "Usuario"
+ },
+ "password": {
+ "placeholder": "Contraseña"
+ },
+ "name": {
+ "title": "Nombre",
+ "placeholder": "Ingrese el nombre",
+ "description": "El nombre de este configuracion."
+ },
+ "host": {
+ "title": "Host",
+ "placeholder": "Ingrese el host",
+ "description": "El host del servidor."
+ },
+ "url": {
+ "title": "URL",
+ "description": "El protocolo, host y puerto del serveridor."
+ },
+ "appendType": "Añadir el tipo del mensaje a la ruta /v2/...?",
+ "filter": "Filtro",
+ "messages": "Mensajes preparados"
+ }
+}
diff --git a/clients/binsa/src/i18n/index.js b/clients/binsa/src/i18n/index.js
new file mode 100644
index 0000000..78d7f17
--- /dev/null
+++ b/clients/binsa/src/i18n/index.js
@@ -0,0 +1,67 @@
+import Vue from 'vue';
+import store from '../store';
+import VueI18n from 'vue-i18n';
+import { Validator } from 'vee-validate';
+import get from 'lodash/get';
+import {
+ mapState
+} from 'vuex';
+
+Vue.use(VueI18n);
+
+VueI18n.prototype._initVM = function(data) {
+ const i18n = this;
+ data.loading = null;
+ this._vm = new Vue({
+ data,
+ store,
+ watch: {
+ 'configuration.preferences.lang': function() {
+ const lang = this.configuration ? this.configuration.preferences.lang : null,
+ me = this;
+ if(!lang) {
+ return;
+ }
+ if(process.env.LANGS.indexOf(lang) === -1) {
+ throw Error("unknown language '" + lang + "'.");
+ }
+ if(!(this.messages[lang] && Validator.dictionary[lang])) {
+ const p = Promise.all([
+ import(/* webpackChunkName:"i18n-" */ './' + lang + '.json'),
+ import(/* webpackChunkName:"vee-validate-i18n-" */ 'vee-validate/dist/locale/' + lang + '.js')
+ ])
+ .then(([custom, locale]) => {
+ // if I'm the last update
+ if(p === me.loading) {
+ // i18n.setLocaleMessage(lang, custom);
+ i18n._vm.$set(i18n._vm.messages, lang, custom);
+ i18n.locale = lang;
+ Validator.addLocale(locale.default || locale);
+ Validator.setLocale(lang);
+ // = me.$set(me, 'locale', lang);
+ me.$set(me, 'loading', null);
+ }
+ return me.loading || p;
+ })
+ .catch(err => {
+ console.error(err);
+ });
+ this.$set(this, 'loading', p);
+ } else {
+ i18n.locale = lang;
+ Validator.setLocale(lang);
+ this.$set(me, 'loading', null);
+ }
+ }
+ },
+ computed: mapState({
+ configuration: state => state.configuration.configuration
+ })
+ });
+};
+
+export default new VueI18n({
+ locale: get(store, 'state.configuration.preferences.lang', ((navigator.languages && navigator.languages[0]) || navigator.language || navigator.userLanguage).toLowerCase().split(/[_-]+/)[0]),
+ fallbackLocale: 'en',
+ messages: {}
+});
diff --git a/clients/binsa/src/img/icons/android-chrome-144x144.png b/clients/binsa/src/img/icons/android-chrome-144x144.png
new file mode 100644
index 0000000..36d4240
Binary files /dev/null and b/clients/binsa/src/img/icons/android-chrome-144x144.png differ
diff --git a/clients/binsa/src/img/icons/android-chrome-192x192.png b/clients/binsa/src/img/icons/android-chrome-192x192.png
new file mode 100644
index 0000000..a9d4c3c
Binary files /dev/null and b/clients/binsa/src/img/icons/android-chrome-192x192.png differ
diff --git a/clients/binsa/src/img/icons/android-chrome-256x256.png b/clients/binsa/src/img/icons/android-chrome-256x256.png
new file mode 100644
index 0000000..f771420
Binary files /dev/null and b/clients/binsa/src/img/icons/android-chrome-256x256.png differ
diff --git a/clients/binsa/src/img/icons/android-chrome-36x36.png b/clients/binsa/src/img/icons/android-chrome-36x36.png
new file mode 100644
index 0000000..b5bf645
Binary files /dev/null and b/clients/binsa/src/img/icons/android-chrome-36x36.png differ
diff --git a/clients/binsa/src/img/icons/android-chrome-384x384.png b/clients/binsa/src/img/icons/android-chrome-384x384.png
new file mode 100644
index 0000000..e38269f
Binary files /dev/null and b/clients/binsa/src/img/icons/android-chrome-384x384.png differ
diff --git a/clients/binsa/src/img/icons/android-chrome-48x48.png b/clients/binsa/src/img/icons/android-chrome-48x48.png
new file mode 100644
index 0000000..db448e2
Binary files /dev/null and b/clients/binsa/src/img/icons/android-chrome-48x48.png differ
diff --git a/clients/binsa/src/img/icons/android-chrome-512x512.png b/clients/binsa/src/img/icons/android-chrome-512x512.png
new file mode 100644
index 0000000..2500c81
Binary files /dev/null and b/clients/binsa/src/img/icons/android-chrome-512x512.png differ
diff --git a/clients/binsa/src/img/icons/android-chrome-72x72.png b/clients/binsa/src/img/icons/android-chrome-72x72.png
new file mode 100644
index 0000000..4506df6
Binary files /dev/null and b/clients/binsa/src/img/icons/android-chrome-72x72.png differ
diff --git a/clients/binsa/src/img/icons/android-chrome-96x96.png b/clients/binsa/src/img/icons/android-chrome-96x96.png
new file mode 100644
index 0000000..5d05b1c
Binary files /dev/null and b/clients/binsa/src/img/icons/android-chrome-96x96.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-114x114.png b/clients/binsa/src/img/icons/apple-touch-icon-114x114.png
new file mode 100644
index 0000000..78898f0
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-114x114.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-120x120.png b/clients/binsa/src/img/icons/apple-touch-icon-120x120.png
new file mode 100644
index 0000000..0da2882
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-120x120.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-144x144.png b/clients/binsa/src/img/icons/apple-touch-icon-144x144.png
new file mode 100644
index 0000000..80ccace
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-144x144.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-152x152.png b/clients/binsa/src/img/icons/apple-touch-icon-152x152.png
new file mode 100644
index 0000000..a6a313e
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-152x152.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-167x167.png b/clients/binsa/src/img/icons/apple-touch-icon-167x167.png
new file mode 100644
index 0000000..9d843c6
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-167x167.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-180x180.png b/clients/binsa/src/img/icons/apple-touch-icon-180x180.png
new file mode 100644
index 0000000..ac4386e
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-180x180.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-57x57.png b/clients/binsa/src/img/icons/apple-touch-icon-57x57.png
new file mode 100644
index 0000000..80d7566
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-57x57.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-60x60.png b/clients/binsa/src/img/icons/apple-touch-icon-60x60.png
new file mode 100644
index 0000000..37cce6f
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-60x60.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-72x72.png b/clients/binsa/src/img/icons/apple-touch-icon-72x72.png
new file mode 100644
index 0000000..4e5fe99
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-72x72.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-76x76.png b/clients/binsa/src/img/icons/apple-touch-icon-76x76.png
new file mode 100644
index 0000000..aa407e8
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-76x76.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon-precomposed.png b/clients/binsa/src/img/icons/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000..ac4386e
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon-precomposed.png differ
diff --git a/clients/binsa/src/img/icons/apple-touch-icon.png b/clients/binsa/src/img/icons/apple-touch-icon.png
new file mode 100644
index 0000000..ac4386e
Binary files /dev/null and b/clients/binsa/src/img/icons/apple-touch-icon.png differ
diff --git a/clients/binsa/src/img/icons/favicon-16x16.png b/clients/binsa/src/img/icons/favicon-16x16.png
new file mode 100644
index 0000000..9202898
Binary files /dev/null and b/clients/binsa/src/img/icons/favicon-16x16.png differ
diff --git a/clients/binsa/src/img/icons/favicon-230x230.png b/clients/binsa/src/img/icons/favicon-230x230.png
new file mode 100644
index 0000000..00bd0ef
Binary files /dev/null and b/clients/binsa/src/img/icons/favicon-230x230.png differ
diff --git a/clients/binsa/src/img/icons/favicon-32x32.png b/clients/binsa/src/img/icons/favicon-32x32.png
new file mode 100644
index 0000000..cff6727
Binary files /dev/null and b/clients/binsa/src/img/icons/favicon-32x32.png differ
diff --git a/clients/binsa/src/img/icons/favicon-96x96.png b/clients/binsa/src/img/icons/favicon-96x96.png
new file mode 100644
index 0000000..5d05b1c
Binary files /dev/null and b/clients/binsa/src/img/icons/favicon-96x96.png differ
diff --git a/clients/binsa/src/img/icons/favicon.ico b/clients/binsa/src/img/icons/favicon.ico
new file mode 100644
index 0000000..dddbd59
Binary files /dev/null and b/clients/binsa/src/img/icons/favicon.ico differ
diff --git a/clients/binsa/src/img/icons/firefox_app_128x128.png b/clients/binsa/src/img/icons/firefox_app_128x128.png
new file mode 100644
index 0000000..1f721fb
Binary files /dev/null and b/clients/binsa/src/img/icons/firefox_app_128x128.png differ
diff --git a/clients/binsa/src/img/icons/firefox_app_512x512.png b/clients/binsa/src/img/icons/firefox_app_512x512.png
new file mode 100644
index 0000000..3d76515
Binary files /dev/null and b/clients/binsa/src/img/icons/firefox_app_512x512.png differ
diff --git a/clients/binsa/src/img/icons/firefox_app_60x60.png b/clients/binsa/src/img/icons/firefox_app_60x60.png
new file mode 100644
index 0000000..bc5cdd6
Binary files /dev/null and b/clients/binsa/src/img/icons/firefox_app_60x60.png differ
diff --git a/clients/binsa/src/img/icons/mstile-144x144.png b/clients/binsa/src/img/icons/mstile-144x144.png
new file mode 100644
index 0000000..36d4240
Binary files /dev/null and b/clients/binsa/src/img/icons/mstile-144x144.png differ
diff --git a/clients/binsa/src/img/icons/mstile-150x150.png b/clients/binsa/src/img/icons/mstile-150x150.png
new file mode 100644
index 0000000..9f5a64b
Binary files /dev/null and b/clients/binsa/src/img/icons/mstile-150x150.png differ
diff --git a/clients/binsa/src/img/icons/mstile-310x150.png b/clients/binsa/src/img/icons/mstile-310x150.png
new file mode 100644
index 0000000..aea458a
Binary files /dev/null and b/clients/binsa/src/img/icons/mstile-310x150.png differ
diff --git a/clients/binsa/src/img/icons/mstile-310x310.png b/clients/binsa/src/img/icons/mstile-310x310.png
new file mode 100644
index 0000000..f5bda7e
Binary files /dev/null and b/clients/binsa/src/img/icons/mstile-310x310.png differ
diff --git a/clients/binsa/src/img/icons/mstile-70x70.png b/clients/binsa/src/img/icons/mstile-70x70.png
new file mode 100644
index 0000000..841d498
Binary files /dev/null and b/clients/binsa/src/img/icons/mstile-70x70.png differ
diff --git a/clients/binsa/src/img/icons/unide.png b/clients/binsa/src/img/icons/unide.png
new file mode 100644
index 0000000..4c71656
Binary files /dev/null and b/clients/binsa/src/img/icons/unide.png differ
diff --git a/clients/binsa/src/img/icons/unide.svg b/clients/binsa/src/img/icons/unide.svg
new file mode 100644
index 0000000..2e8e68e
--- /dev/null
+++ b/clients/binsa/src/img/icons/unide.svg
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/img/logo.svg b/clients/binsa/src/img/logo.svg
new file mode 100644
index 0000000..713a62c
--- /dev/null
+++ b/clients/binsa/src/img/logo.svg
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/index.js b/clients/binsa/src/index.js
new file mode 100644
index 0000000..2912576
--- /dev/null
+++ b/clients/binsa/src/index.js
@@ -0,0 +1,38 @@
+import Vue from 'vue';
+import App from './app';
+import 'es6-promise/auto'; // needed for webpack dynamic module loading
+import Sw from 'offline-plugin/runtime'; // mapped to null-loader in development
+
+if(process.env.NODE_ENV !== 'development') {
+ const idle = function() {};
+ Sw.install({
+ // the new sw should take control immediately
+ onUpdateReady: () => {
+ Sw.applyUpdate();
+ },
+ onUpdating: idle,
+ // reload the page to make use of new sw version
+ // window.location.reload();
+ onUpdated: idle,
+ onUpdateFailed: idle,
+ onInstalled: idle,
+ onError: idle
+ });
+}
+
+new Vue(App).$mount('#main');
+
+// if started in nw.js, allow/fake 'multiple instances'
+if(window.nw) {
+ nw.App.on('open', function(cmdline) {
+ const win = nw.Window.get();
+ nw.Window.open(location.href, {
+ /* eslint camelcase: 0 */
+ new_instance: true,
+ width: win.width,
+ height: win.height
+ }, newWin => {
+
+ });
+ });
+}
diff --git a/clients/binsa/src/manifests/browserconfig.xml b/clients/binsa/src/manifests/browserconfig.xml
new file mode 100644
index 0000000..f64f581
--- /dev/null
+++ b/clients/binsa/src/manifests/browserconfig.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+ #2d89ef
+
+
+
diff --git a/clients/binsa/src/manifests/manifest.json b/clients/binsa/src/manifests/manifest.json
new file mode 100644
index 0000000..636ba0f
--- /dev/null
+++ b/clients/binsa/src/manifests/manifest.json
@@ -0,0 +1,34 @@
+{
+ "name": "<%= htmlWebpackPlugin.options.packageJson.title || 'Webpack App' %>",
+ "short_name": "<%= htmlWebpackPlugin.options.packageJson.name || 'webpack-app' %>",
+ "description": "<%= htmlWebpackPlugin.options.packageJson.description || 'A Webpack App' %>",
+ "version": "<%= htmlWebpackPlugin.options.packageJson.version || '1.0.0' %>",
+ "manifest_version": 2,
+ "app": {
+ "background": {
+ "scripts": ["<%= process.env.BASEPATH %>background.js"]
+ }
+ },
+ "icons": {
+ "36": "<%= process.env.BASEPATH %>icons/android-chrome-36x36.png",
+ "48": "<%= process.env.BASEPATH %>icons/android-chrome-48x48.png",
+ "60": "<%= process.env.BASEPATH %>icons/firefox_app_60x60.png",
+ "72": "<%= process.env.BASEPATH %>icons/android-chrome-72x72.png",
+ "96": "<%= process.env.BASEPATH %>icons/android-chrome-96x96.png",
+ "128": "<%= process.env.BASEPATH %>icons/firefox_app_128x128.png",
+ "144": "<%= process.env.BASEPATH %>icons/android-chrome-144x144.png",
+ "192": "<%= process.env.BASEPATH %>icons/android-chrome-192x192.png",
+ "256": "<%= process.env.BASEPATH %>icons/android-chrome-256x256.png",
+ "384": "<%= process.env.BASEPATH %>icons/android-chrome-384x384.png",
+ "512": "<%= process.env.BASEPATH %>icons/android-chrome-512x512.png"
+ },
+ "sockets": {
+ "tcp": {
+ "connect": ""
+ }
+ },
+ "permissions": ["system.cpu", "system.memory", "notifications", "storage", "geolocation", "*://*/*"],
+ "sandbox": {
+ "pages": ["sandbox.html"]
+ }
+}
diff --git a/clients/binsa/src/manifests/manifest.webapp b/clients/binsa/src/manifests/manifest.webapp
new file mode 100644
index 0000000..4078269
--- /dev/null
+++ b/clients/binsa/src/manifests/manifest.webapp
@@ -0,0 +1,23 @@
+{
+ "name": "<%= htmlWebpackPlugin.options.packageJson.name || 'webpack-app' %>",
+ "description": "<%= htmlWebpackPlugin.options.packageJson.description || 'A Webpack App' %>",
+ "version": "<%= htmlWebpackPlugin.options.packageJson.version || '1.0.0' %>",
+ "icons": {
+ "36": "<%= process.env.BASEPATH %>icons/android-chrome-36x36.png",
+ "48": "<%= process.env.BASEPATH %>icons/android-chrome-48x48.png",
+ "60": "<%= process.env.BASEPATH %>icons/firefox_app_60x60.png",
+ "72": "<%= process.env.BASEPATH %>icons/android-chrome-72x72.png",
+ "96": "<%= process.env.BASEPATH %>icons/android-chrome-96x96.png",
+ "128": "<%= process.env.BASEPATH %>icons/firefox_app_128x128.png",
+ "144": "<%= process.env.BASEPATH %>icons/android-chrome-144x144.png",
+ "192": "<%= process.env.BASEPATH %>icons/android-chrome-192x192.png",
+ "256": "<%= process.env.BASEPATH %>icons/android-chrome-256x256.png",
+ "384": "<%= process.env.BASEPATH %>icons/android-chrome-384x384.png",
+ "512": "<%= process.env.BASEPATH %>icons/firefox_app_512x512.png"
+ },
+ "developer": {
+ "name": "<%= htmlWebpackPlugin.options.packageJson.author %>",
+ "url": null
+ }
+}
+
diff --git a/clients/binsa/src/manifests/web-manifest.json b/clients/binsa/src/manifests/web-manifest.json
new file mode 100644
index 0000000..8f38c32
--- /dev/null
+++ b/clients/binsa/src/manifests/web-manifest.json
@@ -0,0 +1,61 @@
+{
+ "name": "<%= htmlWebpackPlugin.options.packageJson.title || 'Webpack App' %>",
+ "short_name": "<%= htmlWebpackPlugin.options.packageJson.name || 'webpack-app' %>",
+ "description": "<%= htmlWebpackPlugin.options.packageJson.description || 'A Webpack App' %>",
+ "version": "<%= htmlWebpackPlugin.options.packageJson.version || '1.0.0' %>",
+ "manifest_version": 2,
+ "dir": "auto",
+ "lang": "en-US",
+ "display": "fullscreen",
+ "orientation": "any",
+ "background_color": "#f9f9f9",
+ "theme_color": "#3d5165",
+ "start_url": "<%= process.env.BASEPATH %>",
+ "icons": [
+ {
+ "src": "<%= process.env.BASEPATH %>icons/android-chrome-36x36.png",
+ "sizes": "36x36",
+ "type": "image/png"
+ },
+ {
+ "src": "<%= process.env.BASEPATH %>icons/android-chrome-48x48.png",
+ "sizes": "48x48",
+ "type": "image/png"
+ },
+ {
+ "src": "<%= process.env.BASEPATH %>icons/android-chrome-72x72.png",
+ "sizes": "72x72",
+ "type": "image/png"
+ },
+ {
+ "src": "<%= process.env.BASEPATH %>icons/android-chrome-96x96.png",
+ "sizes": "96x96",
+ "type": "image/png"
+ },
+ {
+ "src": "<%= process.env.BASEPATH %>icons/android-chrome-144x144.png",
+ "sizes": "144x144",
+ "type": "image/png"
+ },
+ {
+ "src": "<%= process.env.BASEPATH %>icons/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "<%= process.env.BASEPATH %>icons/android-chrome-256x256.png",
+ "sizes": "256x256",
+ "type": "image/png"
+ },
+ {
+ "src": "<%= process.env.BASEPATH %>icons/android-chrome-384x384.png",
+ "sizes": "384x384",
+ "type": "image/png"
+ },
+ {
+ "src": "<%= process.env.BASEPATH %>icons/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ]
+}
diff --git a/clients/binsa/src/pages/about.vue b/clients/binsa/src/pages/about.vue
new file mode 100644
index 0000000..0e697c0
--- /dev/null
+++ b/clients/binsa/src/pages/about.vue
@@ -0,0 +1,452 @@
+
+
+
+
{{ $t('about.about') }}
+
+
+
+
+
+ {{ $t(`about.${field}`) }}:
+
+
+ {{ packageJson[field]}}
+
+
+
+
+
+ {{ $t(`about.dataConcent`) }}:
+
+
+
+
+
+
+
+
+ {{ $t(`about.license`) }}:
+
+
+
+ Eclipse Public License - v 2.0
+
+
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+
1. DEFINITIONS
+
“Contribution” means:
+
+ a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+
+
+ b) in the case of each subsequent Contributor:
+
+ i) changes to the Program, and
+ ii) additions to the Program;
+
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ “originates” from a Contributor if it was added to the Program by such
+ Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
+
+
+
“Contributor” means any person or entity that Distributes the Program.
+
“Licensed Patents” mean patent claims licensable by a Contributor which
+ are necessarily infringed by the use or sale of its Contribution alone
+ or when combined with the Program.
+
+
“Program” means the Contributions Distributed in accordance with this
+ Agreement.
+
+
“Recipient” means anyone who receives the Program under this Agreement
+ or any Secondary License (as applicable), including Contributors.
+
+
“Derivative Works” shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+
+
“Modified Works” shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations, interfaces,
+ types, classes, structures, or files of the Program solely in each case
+ in order to link to, bind by name, or subclass the Program or Modified
+ Works thereof.
+
+
“Distribute” means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+
+
“Source Code” means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+
+
“Secondary License” means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+
+
2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
+
+ b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if,
+ at the time the Contribution is added by the Contributor, such
+ addition of the Contribution causes such combination to be covered
+ by the Licensed Patents. The patent license shall not apply to any
+ other combinations which include the Contribution. No hardware per
+ se is licensed hereunder.
+
+ c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the rights
+ and licenses granted hereunder, each Recipient hereby assumes sole
+ responsibility to secure any other intellectual property rights needed,
+ if any. For example, if a third party patent license is required to
+ allow Recipient to Distribute the Program, it is Recipient's
+ responsibility to acquire that license before distributing the Program.
+
+ d) Each Contributor represents that to its knowledge it has sufficient
+ copyright rights in its Contribution, if any, to grant the copyright
+ license set forth in this Agreement.
+
+ e) Notwithstanding the terms of any Secondary License, no Contributor
+ makes additional grants to any Recipient (other than those set forth
+ in this Agreement) as a result of such Recipient's receipt of the
+ Program under the terms of a Secondary License (if permitted under
+ the terms of Section 3).
+
+
+
3. REQUIREMENTS
+
3.1 If a Contributor Distributes the Program in any form, then:
+
+ a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+
+
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+
+ i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including warranties
+ or conditions of title and non-infringement, and implied warranties
+ or conditions of merchantability and fitness for a particular purpose;
+
+ ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special, incidental
+ and consequential damages, such as lost profits;
+
+ iii) does not attempt to limit or alter the recipients' rights in the
+ Source Code under section 3.2; and
+
+ iv) requires any subsequent distribution of the Program by any party
+ to be under a license that satisfies the requirements of this section 3.
+
+
+
+
+
3.2 When the Program is Distributed as Source Code:
+
+ a) it must be made available under this Agreement, or if the Program (i)
+ is combined with other material in a separate file or files made available
+ under a Secondary License, and (ii) the initial Contributor attached to
+ the Source Code the notice described in Exhibit A of this Agreement,
+ then the Program may be made available under the terms of such
+ Secondary Licenses, and
+
+ b) a copy of this Agreement must be included with each copy of the Program.
+
+
3.3 Contributors may not remove or alter any copyright, patent, trademark,
+ attribution notices, disclaimers of warranty, or limitations of liability
+ (‘notices’) contained within the Program from any copy of the Program which
+ they Distribute, provided that Contributors may add their own appropriate
+ notices.
+
+
4. COMMERCIAL DISTRIBUTION
+
Commercial distributors of software may accept certain responsibilities
+ with respect to end users, business partners and the like. While this
+ license is intended to facilitate the commercial use of the Program, the
+ Contributor who includes the Program in a commercial product offering should
+ do so in a manner which does not create potential liability for other
+ Contributors. Therefore, if a Contributor includes the Program in a
+ commercial product offering, such Contributor (“Commercial Contributor”)
+ hereby agrees to defend and indemnify every other Contributor
+ (“Indemnified Contributor”) against any losses, damages and costs
+ (collectively “Losses”) arising from claims, lawsuits and other legal actions
+ brought by a third party against the Indemnified Contributor to the extent
+ caused by the acts or omissions of such Commercial Contributor in connection
+ with its distribution of the Program in a commercial product offering.
+ The obligations in this section do not apply to any claims or Losses relating
+ to any actual or alleged intellectual property infringement. In order to
+ qualify, an Indemnified Contributor must: a) promptly notify the
+ Commercial Contributor in writing of such claim, and b) allow the Commercial
+ Contributor to control, and cooperate with the Commercial Contributor in,
+ the defense and any related settlement negotiations. The Indemnified
+ Contributor may participate in any such claim at its own expense.
+
+
For example, a Contributor might include the Program
+ in a commercial product offering, Product X. That Contributor is then a
+ Commercial Contributor. If that Commercial Contributor then makes performance
+ claims, or offers warranties related to Product X, those performance claims
+ and warranties are such Commercial Contributor's responsibility alone.
+ Under this section, the Commercial Contributor would have to defend claims
+ against the other Contributors related to those performance claims and
+ warranties, and if a court requires any other Contributor to pay any damages
+ as a result, the Commercial Contributor must pay those damages.
+
+
5. NO WARRANTY
+
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+ WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+ MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+ solely responsible for determining the appropriateness of using and
+ distributing the Program and assumes all risks associated with its
+ exercise of rights under this Agreement, including but not limited to the
+ risks and costs of program errors, compliance with applicable laws, damage
+ to or loss of data, programs or equipment, and unavailability or
+ interruption of operations.
+
+
6. DISCLAIMER OF LIABILITY
+
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+ BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+ LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+ GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
7. GENERAL
+
If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of the
+ remainder of the terms of this Agreement, and without further action by the
+ parties hereto, such provision shall be reformed to the minimum extent
+ necessary to make such provision valid and enforceable.
+
+
If Recipient institutes patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+ (excluding combinations of the Program with other software or hardware)
+ infringes such Recipient's patent(s), then such Recipient's rights granted
+ under Section 2(b) shall terminate as of the date such litigation is filed.
+
+
All Recipient's rights under this Agreement shall terminate if it fails to
+ comply with any of the material terms or conditions of this Agreement and
+ does not cure such failure in a reasonable period of time after becoming
+ aware of such noncompliance. If all Recipient's rights under this Agreement
+ terminate, Recipient agrees to cease use and distribution of the Program
+ as soon as reasonably practicable. However, Recipient's obligations under
+ this Agreement and any licenses granted by Recipient relating to the
+ Program shall continue and survive.
+
+
Everyone is permitted to copy and distribute copies of this Agreement,
+ but in order to avoid inconsistency the Agreement is copyrighted and may
+ only be modified in the following manner. The Agreement Steward reserves
+ the right to publish new versions (including revisions) of this Agreement
+ from time to time. No one other than the Agreement Steward has the right
+ to modify this Agreement. The Eclipse Foundation is the initial Agreement
+ Steward. The Eclipse Foundation may assign the responsibility to serve as
+ the Agreement Steward to a suitable separate entity. Each new version of
+ the Agreement will be given a distinguishing version number. The Program
+ (including Contributions) may always be Distributed subject to the version
+ of the Agreement under which it was received. In addition, after a new
+ version of the Agreement is published, Contributor may elect to Distribute
+ the Program (including its Contributions) under the new version.
+
+
Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+ receives no rights or licenses to the intellectual property of any
+ Contributor under this Agreement, whether expressly, by implication,
+ estoppel or otherwise. All rights in the Program not expressly granted
+ under this Agreement are reserved. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+
+
Exhibit A – Form of Secondary Licenses Notice
+
“This Source Code may also be made available under the following
+ Secondary Licenses when the conditions for such availability set forth
+ in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+ version(s), and exceptions or additional permissions here}.”
+
+
+ Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+
+ If it is not possible or desirable to put the notice in a particular file,
+ then You may include the notice in a location (such as a LICENSE file in a
+ relevant directory) where a recipient would be likely to look for
+ such a notice.
+
+ You may add additional accurate notices of copyright ownership.
+
+
+
+
+
+
+
+
+
+
{{ $t('about.licenses') }}
+
+
+
+
+
+
+ {{ $t('about.title') }}
+ {{ $t('about.version') }}
+ {{ $t('about.description') }}
+ {{ $t('about.license') }}
+ {{ $t('about.source') }}
+ {{ $t('about.repository') }}
+
+
+
+
+
+
+ {{ pkg.name }}
+
+
+ {{ pkg.version }}
+ {{ pkg.description }}
+
+ MIT*
+
+ {{ pkg.licenses }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ * The WTFPL License allows for relicensing the work under any other license. As a result, the Eclipse Foundation elects to distribute WTFPL licensed content under the MIT license.
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/ciHelp.vue b/clients/binsa/src/pages/ciHelp.vue
new file mode 100644
index 0000000..d6b81b2
--- /dev/null
+++ b/clients/binsa/src/pages/ciHelp.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/configuration/index.vue b/clients/binsa/src/pages/configuration/index.vue
new file mode 100644
index 0000000..2928e99
--- /dev/null
+++ b/clients/binsa/src/pages/configuration/index.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+ PPMP Server
+ PPM Server
+
+
+ {{ $t("configuration.title") }}
+
+ ({{ credentials.user }})
+
+
+ (
+ anonymous
+
+
+
+ )
+
+
+
+
+ {{ $t(`configuration.sections.${type==='singleton'?id:type}`) }} (#{{ id+(localConf[id]?'*':'') }})
+ {{ $t(`configuration.sections.${type==='singleton'?id:type}`) }}
+ new
+ changed
+ error
+
+ { localConf[id] = conf }">
+
+ {{ localConf[id]?$t("cancel"):$t("delete") }}
+ {{ $t("save") }}
+ {{ $t("edit") }}
+ {{ messages[id] }}
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/configuration/ppm.vue b/clients/binsa/src/pages/configuration/ppm.vue
new file mode 100644
index 0000000..29c770d
--- /dev/null
+++ b/clients/binsa/src/pages/configuration/ppm.vue
@@ -0,0 +1,127 @@
+
+
+
+
+ {{ $t('configuration.name.title') }}:
+
+
+
+
+
+
{{ errors.first('name') }}
+
+
+
+
+
+
+ {{ $t('configuration.login.title') }}:
+
+
+
+
+
+ {{ $t('configuration.url.title') }}:
+
+
+
+
+
{{ errors.first('url') }}
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/configuration/ppmp.vue b/clients/binsa/src/pages/configuration/ppmp.vue
new file mode 100644
index 0000000..c7b3468
--- /dev/null
+++ b/clients/binsa/src/pages/configuration/ppmp.vue
@@ -0,0 +1,314 @@
+
+
+
+
+ {{ $t('configuration.name.title') }}:
+
+
+
+
+
+
{{ errors.first('name') }}
+
+
+
+
+
+
+ {{ $t('configuration.url.title') }}:
+
+
+
+
+
{{ errors.first('url') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('configuration.appendType') }}
+
+
+
+
+
+
+ {{ $t('login.user.label') }}:
+
+
+
+
+
+
+
+
+
+
{{ errors.first('user') }}
+
+
+
+
+
+ {{ $t('login.password.label') }}:
+
+
+
+
+
+
+
+
+
+
{{ errors.first('password') }}
+
+
+
+
+
+ {{ $t('configuration.messages') }}
+
+
+
+
+
+
+
+
+ {{ $t('delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/configuration/preferences.vue b/clients/binsa/src/pages/configuration/preferences.vue
new file mode 100644
index 0000000..2d1fe71
--- /dev/null
+++ b/clients/binsa/src/pages/configuration/preferences.vue
@@ -0,0 +1,74 @@
+
+
+
+
+ {{ $t('configuration.language') }}:
+
+
+
+
+
+ {{ option }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/home.vue b/clients/binsa/src/pages/home.vue
new file mode 100644
index 0000000..3c4e6ac
--- /dev/null
+++ b/clients/binsa/src/pages/home.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+ {{ $t('home.title') }}
+
+
+ {{ $t('home.subtitle') }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clients/binsa/src/pages/notFound.vue b/clients/binsa/src/pages/notFound.vue
new file mode 100644
index 0000000..22705d5
--- /dev/null
+++ b/clients/binsa/src/pages/notFound.vue
@@ -0,0 +1,31 @@
+
+
+
+
{{ $t('notFound', {path: $route.path} ) }}
+
+
+
+
diff --git a/clients/binsa/src/pages/ppm/index.vue b/clients/binsa/src/pages/ppm/index.vue
new file mode 100644
index 0000000..50ea68b
--- /dev/null
+++ b/clients/binsa/src/pages/ppm/index.vue
@@ -0,0 +1,220 @@
+
+
+
{{ $t("ppm.title") }}
+
+
+ {{ $t('ppm.target') }} ({{ configId ? filteredConfigurations[configId].name : '?' }} / {{ deviceId? devices[deviceId].name : '?' }})
+
+
+ {{ $t('ppm.target') }}
+
+
+
+ {{ $t('ppm.config') }}:
+
+
+
+
+
+
+
+ {{ config.name }}
+
+
+
+
{{ $t('ppm.connectionError') }}
+
+
+
+
+
+ {{ $t('ppm.device') }}:
+
+
+
+
+
+
+ {{ device.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Processes
+
+
+ Messages
+
+
+ Admin
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/ppm/measurements.vue b/clients/binsa/src/pages/ppm/measurements.vue
new file mode 100644
index 0000000..d8bea40
--- /dev/null
+++ b/clients/binsa/src/pages/ppm/measurements.vue
@@ -0,0 +1,132 @@
+
+
+
+
+ {{ $t('ppm.measurements.sensors') }}:
+
+
+
+
+
+
+ {{ $t('ppm.measurements.noResults') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/ppmp/index.vue b/clients/binsa/src/pages/ppmp/index.vue
new file mode 100644
index 0000000..651242a
--- /dev/null
+++ b/clients/binsa/src/pages/ppmp/index.vue
@@ -0,0 +1,224 @@
+
+
+
{{ $t("ppmp.title") }}
+
+
+ {{ $t('ppmp.target') }} ({{ (configId && filteredConfigurations[configId]) ? filteredConfigurations[configId].name : '?' }})
+
+
+ {{ $t('ppmp.target') }}
+
+
+
+ {{ $t('ppmp.config') }}* :
+
+
+
+
+
{{ $t('ppmp.connectionError') }}
+
+
+
+
+
+ {{ $t('ppmp.device') }}* :
+
+
+
+
+
+ {{ $t('ppmp.operationalStatus') }}:
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/ppmp/measurements.vue b/clients/binsa/src/pages/ppmp/measurements.vue
new file mode 100644
index 0000000..9fbdfe8
--- /dev/null
+++ b/clients/binsa/src/pages/ppmp/measurements.vue
@@ -0,0 +1,383 @@
+
+
+
+
+
+
+
+
+
+ {{ $t(`ppmp.measurements.sensorNames.${type}`) }}
+ {{ $t('ppmp.measurements.selected', [countTranslations[type]]) }}
+
+
+
+
+
+ {{ $t(`ppmp.measurements.sensorNames.${type}`) }}
+
+
+
+
+ {{ $t('ppmp.measurements.sensor') }}
+ {{ $t('ppmp.measurements.value') }}
+ {{ $t('ppmp.measurements.alias') }}
+
+
+
+
+ {{ k }}
+ {{ (measurementPoints[type][k] || 0).toFixed(2) }}
+
+
+ {{ getTranslation(type, k) }}
+
+
+
+ {{ $t('ppmp.measurements.assign') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('ppmp.measurements.sendingFrequency.title') }}
+
+
+
+
+
{{ errors.first('sendingFrequency') }}
+
+
+
+ {{ $t('ppmp.measurements.samplingFrequency.title') }}
+
+
+
+
+
{{ errors.first('samplingFrequency') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/ppmp/messages.vue b/clients/binsa/src/pages/ppmp/messages.vue
new file mode 100644
index 0000000..45470a2
--- /dev/null
+++ b/clients/binsa/src/pages/ppmp/messages.vue
@@ -0,0 +1,196 @@
+
+
+
+
+ {{ message.code }}
+
+
+
+
+ {{ $t('ppmp.messages.manual') }}
+
+
+
+
+
+
+
+
+
+ {{ $t("send") }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/ppmp/processes.vue b/clients/binsa/src/pages/ppmp/processes.vue
new file mode 100644
index 0000000..a540820
--- /dev/null
+++ b/clients/binsa/src/pages/ppmp/processes.vue
@@ -0,0 +1,433 @@
+
+
+
+
+
+
+
+
+
+
+
{{ $t('ppmp.processes.startTime') }}:
+
{{ startTime | timeStamp($i18n.locale) }}
+
+
+
+
+
{{ $t('ppmp.processes.duration') }}:
+
{{ processDuration | duration }}
+
+
+
+
+
+
+
+
+
{{ $t('ppmp.processes.measurements') }}:
+
{{ measurementCount }}
+
+
+
+
+
{{ $t('ppmp.processes.phases') }}:
+
{{ phases }}
+
+
+
+
+
+
+ {{ $t('ppmp.processes.details') }}
+
+
+
+
+ externalProcessId:
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clients/binsa/src/pages/ppmp/sendingDaemon.js b/clients/binsa/src/pages/ppmp/sendingDaemon.js
new file mode 100644
index 0000000..35e7913
--- /dev/null
+++ b/clients/binsa/src/pages/ppmp/sendingDaemon.js
@@ -0,0 +1,221 @@
+import EventEmitter from 'events';
+import store from '../../store';
+import sensorBus from '../../sensorBus';
+import isEqual from 'lodash/isEqual';
+import cloneDeep from 'lodash/cloneDeep';
+
+const sensorsNeedPolling = {
+ cpu: () => sensorBus.getCpu(),
+ mem: () => sensorBus.getMem()
+};
+
+// jobs Object and methods are outsourced from vuex store because this is too volatile
+export class RecordingJob extends EventEmitter {
+ constructor(configId, deviceId) {
+ super();
+ if(configId === undefined || deviceId === undefined) {
+ throw new Error('RecordingJob: configId & deviceId are mandatory!');
+ }
+ this.stop();
+ Object.assign(this, {
+ configId: configId,
+ deviceId: deviceId,
+ running: false
+ });
+ }
+
+ flushCache() {
+ const returnValue = this.cache;
+ if(this.cache) {
+ this.cache = {};
+ }
+ return returnValue;
+ }
+
+ createSubscriptions(samplingFrequency) {
+ if(this.subscriptions) {
+ this.subscriptions.forEach(([name, subscription]) => {
+ if(typeof subscription === 'function') {
+ sensorBus.removeListener(name, subscription);
+ } else if(typeof subscription === 'number') {
+ clearInterval(subscription);
+ }
+ });
+ }
+ const translation = (store.state.configuration.configuration[this.configId].translate || {})[this.deviceId] || {};
+ this.subscriptions = Object.entries(translation).map(([sensor, measurementPoints]) => {
+ const subscription = value => {
+ if(!this.running) {
+ return;
+ }
+ const ts = Date.now();
+ Object.entries(measurementPoints).forEach(([measurementPoint, alias]) => {
+ if(!value[measurementPoint] && value[measurementPoint] !== 0) {
+ return;
+ }
+ this.cache[alias] = this.cache[alias] || [];
+ this.cache[alias].push([ts, value[measurementPoint]]);
+ this.count++;
+ });
+ };
+ if(sensorsNeedPolling[sensor]) {
+ // eslint-disable-next-line space-before-function-paren
+ return [sensor, setInterval(async () =>
+ subscription(await sensorsNeedPolling[sensor]()),
+ samplingFrequency)];
+ }
+ sensorBus.on(sensor, subscription);
+ return [sensor, subscription];
+ });
+ return this.subscriptions;
+ }
+
+ start(samplingFrequency = 100) {
+ if(this.running) {
+ return this;
+ }
+ if(this.startTime) {
+ // resume only
+ this.running = true;
+ return this;
+ }
+ this.createSubscriptions(samplingFrequency);
+ Object.assign(this, {
+ running: true,
+ startTime: new Date(),
+ cache: {},
+ unwatch: store.watch((state, getters) =>
+ cloneDeep((store.state.configuration.configuration[this.configId].translate || {})[this.deviceId] || {}),
+ /* eslint-disable indent */
+ (newTranslation, oldTranslation) => {
+ if(store.getters['configuration/ppmp/getTotalTranslationsFor'](this.configId, this.deviceId) === 0) {
+ this.stop();
+ return;
+ }
+ if(!isEqual(oldTranslation, newTranslation)) {
+ this.createSubscriptions(samplingFrequency);
+ }
+ }, {
+ deep: true
+ }
+ /* eslint-enable indent */
+ )
+ });
+ this.emit('runningChanged', this.running);
+ return this;
+ }
+
+ pause() {
+ if(!this.running) {
+ return this;
+ }
+ this.running = false;
+ this.emit('runningChanged', this.running);
+ return this;
+ }
+
+ stop() {
+ this.running = false;
+ if(this.subscriptions) {
+ this.subscriptions.forEach(([name, subscription]) => {
+ if(typeof subscription === 'function') {
+ sensorBus.removeListener(name, subscription);
+ } else if(typeof subscription === 'number') {
+ clearInterval(subscription);
+ }
+ });
+ }
+ if(this.unwatch) {
+ this.unwatch();
+ }
+ Object.assign(this, {
+ cache: null,
+ count: 0,
+ startTime: null,
+ subscriptions: null,
+ unwatch: null
+ });
+ this.emit('runningChanged', this.running);
+ return this;
+ }
+}
+
+export class AggregationJob extends RecordingJob {
+ constructor(...args) {
+ super(...args);
+ this.aggregatedCache = null;
+ }
+
+ aggregate() {
+ Object.entries(this.flushCache()).forEach(([name, series]) => {
+ if(!series.length) {
+ return;
+ }
+ this.aggregatedCache[name] = this.aggregatedCache[name] || [];
+ // time offset has to be an integer
+ this.aggregatedCache[name].push([Math.round((series[0][0] + series[series.length - 1][0]) / 2), series.reduce((l, [t, v]) => l + v, 0) / series.length]);
+ });
+ }
+
+ start(samplingFrequency, sendingFrequency, callback) {
+ if(!sendingFrequency || !samplingFrequency) {
+ throw new Error('AggregationJob needs sending interval and samplingFrequency to start');
+ }
+ this.aggregatedCache = {};
+ // aggregate flushCache return value to aggregatedCache
+ if(!this.aggregationInterval) {
+ this.aggregationInterval = setInterval(() => this.aggregate(), samplingFrequency);
+ }
+ if(!this.sendingInterval) {
+ this.sendingInterval = setInterval(() => {
+ if(Object.keys(this.aggregatedCache).length && this.running) {
+ if(callback && callback instanceof Function) {
+ callback(this.aggregatedCache);
+ }
+ this.aggregatedCache = {};
+ };
+ }, sendingFrequency);
+ }
+ return super.start(samplingFrequency);
+ }
+
+ stop(...args) {
+ clearInterval(this.aggregationInterval);
+ clearInterval(this.sendingInterval);
+ this.aggregatedCache = null;
+ return super.stop(...args);
+ }
+}
+
+export class PhaseJob extends RecordingJob {
+ constructor(...args) {
+ super(...args);
+ this.phases = null;
+ }
+
+ flushCache() {
+ const returnValue = this.phases;
+ if(this.phases && this.cache) {
+ this.phases.push(super.flushCache());
+ this.phases = [];
+ }
+ return returnValue;
+ }
+
+ phaseBreak() {
+ if(this.phases) {
+ this.phases.push(super.flushCache());
+ }
+ return this.phases;
+ }
+
+ start(...args) {
+ this.phases = [];
+ return super.start(...args);
+ }
+
+ stop(...args) {
+ this.phases = null;
+ return super.stop(...args);
+ }
+}
diff --git a/clients/binsa/src/router.js b/clients/binsa/src/router.js
new file mode 100644
index 0000000..5398a9e
--- /dev/null
+++ b/clients/binsa/src/router.js
@@ -0,0 +1,66 @@
+import Vue from 'vue';
+import Router from 'vue-router';
+import Home from 'pages/home';
+/*
+import PPMP from 'pages/ppmp';
+import Configuration from 'pages/configuration';
+import About from 'pages/about';
+*/
+
+Vue.use(Router);
+
+const routes = [{
+ path: '/',
+ component: Home
+}, {
+ path: '/index.html',
+ component: Home
+}, {
+ path: '/ppmp/:configId?/:deviceId?',
+ component: () => import(/* webpackChunkName:"ppmp" */ 'pages/ppmp'),
+ children: [{
+ path: '/ppmp/:configId/:deviceId/measurements',
+ component: () => import(/* webpackChunkName:"ppmp" */ 'pages/ppmp/measurements'),
+ props: true
+ }, {
+ path: '/ppmp/:configId/:deviceId/processes',
+ component: () => import(/* webpackChunkName:"ppmp" */ 'pages/ppmp/processes'),
+ props: true
+ }, {
+ path: '/ppmp/:configId/:deviceId/messages',
+ component: () => import(/* webpackChunkName:"ppmp" */ 'pages/ppmp/messages'),
+ props: true
+ }, {
+ path: '*',
+ component: function() {
+ return import(/* webpackChunkName:"notFound" */'./pages/notFound.vue');
+ }
+ }]
+}, {
+ path: '/about',
+ component: () => import(/* webpackChunkName:"about" */ 'pages/about')
+}, {
+ path: '/configuration',
+ component: () => import(/* webpackChunkName:"configuration" */ 'pages/configuration')
+}];
+
+if(process.env.NODE_ENV === 'development') {
+ routes.push({
+ path: '/ciHelp',
+ component: () => import(/* webpackChunkName:"ciHelper" */ 'pages/ciHelp')
+ });
+}
+
+routes.push({
+ path: '*',
+ component: function() {
+ return import(/* webpackChunkName:"notFound" */'./pages/notFound.vue');
+ }
+});
+
+export default new Router({
+ // mode: 'hash',
+ mode: 'history',
+ base: process.env.BASEPATH || '/',
+ routes
+});
diff --git a/clients/binsa/src/sandbox.js b/clients/binsa/src/sandbox.js
new file mode 100644
index 0000000..e0b886e
--- /dev/null
+++ b/clients/binsa/src/sandbox.js
@@ -0,0 +1,29 @@
+window.addEventListener('message', function(ev) {
+ const id = ev.data.id;
+ try {
+ const testdata = event.data || {},
+ tasks = [],
+ render = function(tpl, data) {
+ return Promise.resolve(data);
+ };
+ if(typeof testdata.data === 'string') {
+ /* eslint no-eval: 0 */
+ eval("'use scrict;'; testdata.data=" + testdata.data);
+ }
+ testdata.times = testdata.times || 1;
+
+ for(let i = 0; i < testdata.times; i++) {
+ tasks.push(render(testdata.tpl, testdata.data));
+ }
+ Promise.all(tasks)
+ .then(function(result) {
+ ev.source.postMessage({ id: id, result: result }, '*');
+ return result;
+ })
+ .catch(function(err) {
+ ev.source.postMessage({ id: id, error: err.toString() }, '*');
+ });
+ } catch(err) {
+ ev.source.postMessage({ id: id, error: err.toString() }, '*');
+ }
+});
diff --git a/clients/binsa/src/sensorBus.js b/clients/binsa/src/sensorBus.js
new file mode 100644
index 0000000..10ae9bf
--- /dev/null
+++ b/clients/binsa/src/sensorBus.js
@@ -0,0 +1,257 @@
+import EventEmitter from 'events';
+
+class SensorBus extends EventEmitter {
+ constructor() {
+ super();
+
+ const eventTypes = ['motion', 'orientation', 'position', 'battery'],
+ fns = [],
+ eventRegex = /^on[A-Z]/;
+
+ // make sure that all event handlers are running in this context
+ let proto = this;
+ while(proto) {
+ fns.push(...Object.getOwnPropertyNames(proto));
+ proto = Object.getPrototypeOf(proto);
+ }
+ fns
+ .filter(fn => (this[fn] instanceof Function) && (fn.match(eventRegex)))
+ .forEach(fn => {
+ this[fn] = this[fn].bind(this);
+ });
+
+ if(window.nwDispatcher || (window.chrome && window.chrome.system)) {
+ this.lastCpu = null;
+ this.pollingInterval = setInterval(this.onPollingTrigger, 1000);
+ this.onPollingTrigger();
+ }
+
+ this.measurementPoints = {};
+
+ eventTypes.forEach(ev => {
+ this.measurementPoints[ev] = null;
+ this.on(ev, v => {
+ this.measurementPoints[ev] = v;
+ });
+ });
+
+ if(window.DeviceMotionEvent) {
+ window.addEventListener('devicemotion', this.onDeviceMotionEvent);
+ }
+
+ if(window.DeviceOrientationEvent) {
+ window.addEventListener('deviceorientation', this.onDeviceOrientationEvent);
+ }
+
+ // eslint-disable-next-line one-var
+ const me = this,
+ getBatteryInfo = function(b) {
+ me.emit('battery', SensorBus.fixBattery(b));
+ b.addEventListener('levelchange', me.onBatteryLevelChangeEvent);
+ b.addEventListener('chargingchange', me.onBatteryChargingChangeEvent);
+ b.addEventListener('chargingtime', me.onBatteryChargingTimeChangeEvent);
+ b.addEventListener('dischargingtime', me.onBatteryDischargingTimeChangeEvent);
+ },
+ bat = navigator.battery || navigator.webkitBattery || navigator.mozBattery;
+
+ if(navigator.getBattery) {
+ navigator.getBattery()
+ .then(getBatteryInfo)
+ .catch(err => {
+ console.error(err);
+ });
+ } else if(bat) {
+ getBatteryInfo(bat);
+ }
+
+ // eslint-disable-next-line one-var
+ /*
+ const a = document.createElement('a');
+ a.onclick = this.activateGeolocation;
+ a.click();
+ */
+ this.activateGeolocation();
+ }
+
+ async onPollingTrigger() {
+ if(window.nwDispatcher || (window.chrome && window.chrome.system)) {
+ const [cpu, mem] = await Promise.all([
+ this.getCpu(),
+ this.getMem()
+ ]);
+ Object.assign(this.measurementPoints, { cpu, mem });
+ } else {
+ throw new Error('Cannot poll on the current platform');
+ }
+ }
+
+ /*
+ * singleton will not really ever be destroyed
+ */
+ destroyed() {
+ if(window.DeviceMotionEvent) {
+ window.removeEventListener('devicemotion', this.onDeviceMotionEvent);
+ }
+
+ if(window.DeviceOrientationEvent) {
+ window.removeEventListener('deviceorientation', this.onDeviceOrientationEvent);
+ }
+
+ const me = this,
+ removeBatteryInfo = function(b) {
+ b.removeEventListener('levelchange', me.onBatteryLevelChangeEvent);
+ b.removeEventListener('chargingchange', me.onBatteryChargingChangeEvent);
+ b.removeEventListener('chargingtime', me.onBatteryChargingTimeChangeEvent);
+ b.removeEventListener('dischargingtime', me.onBatteryDischargingTimeChangeEvent);
+ },
+ bat = navigator.battery || navigator.webkitBattery || navigator.mozBattery;
+
+ if(navigator.getBattery) {
+ navigator.getBattery()
+ .then(removeBatteryInfo)
+ .catch(err => {
+ console.error(err);
+ });
+ } else if(bat) {
+ removeBatteryInfo(bat);
+ }
+
+ if(navigator.geolocation) {
+ navigator.geolocation.clearWatch(this.geolocationChangeId);
+ }
+
+ if(this.pollingInterval) {
+ clearInterval(this.pollingInterval);
+ }
+ }
+
+ async getCpu() {
+ let p,
+ keys;
+ if(window.nwDispatcher) {
+ const os = require('os');
+ keys = ['idle', 'user', 'total', 'irq', 'nice', 'sys'];
+ p = os.cpus().map(cpu => cpu.times);
+ } else if(window.chrome && window.chrome.system) {
+ keys = ['idle', 'user', 'total', 'kernel'];
+ const cpuInfo = await (new Promise(resolve => chrome.system.cpu.getInfo(resolve)));
+ p = cpuInfo.processors.map(cpu => cpu.usage);
+ } else {
+ throw new Error('getCpu(): unknown platform');
+ }
+ const current = p.reduce((l, v, idx, a) => {
+ if(!v.total) { // for all the cpus that have times
+ v.total = Object.values(v).reduce((s, i) => s + i, 0);
+ }
+ keys.forEach(k => {
+ l[k] = (l[k] || 0) + (v[k] || 0) / a.length; // average over all cpus
+ });
+ return l;
+ });
+ if(this.lastCpu && current.total !== this.lastCpu.total) {
+ current.percent = 100 - 100 * (current.idle - this.lastCpu.idle) / (current.total - this.lastCpu.total);
+ } else {
+ // can't determin percentage
+ current.percent = null;
+ }
+ this.lastCpu = current;
+ return current;
+ }
+
+ async getMem() {
+ if(window.nwDispatcher) {
+ const os = require('os');
+ return os.totalmem() - os.freemem();
+ } else if(window.chrome && window.chrome.system) {
+ const info = await (new Promise(resolve => chrome.system.memory.getInfo(resolve)));
+ info.percent = 100 * info.capacity / info.availableCapacity;
+ return info;
+ // return info.capacity - info.availableCapacity;
+ }
+ throw new Error('getMem(): unknown platform');
+ }
+
+ activateGeolocation() {
+ if(navigator.geolocation) {
+ this.geolocationChangeId = navigator.geolocation.watchPosition(this.onGeolocationChangeEvent, err => {
+ console.error(err);
+ navigator.geolocation.clearWatch(this.geolocationChangeId);
+ }, {
+ timeout: 5000,
+ enableHighAccuracy: true,
+ maximumAge: Infinity
+ });
+ }
+ }
+
+ onDeviceMotionEvent(event) {
+ this.emit('motion', {
+ ax: event.acceleration.x,
+ ay: event.acceleration.y,
+ az: event.acceleration.z,
+
+ agx: event.accelerationIncludingGravity.x,
+ agy: event.accelerationIncludingGravity.y,
+ agz: event.accelerationIncludingGravity.z,
+
+ ra: event.rotationRate.alpha,
+ rb: event.rotationRate.beta,
+ rg: event.rotationRate.gamma
+ });
+ }
+
+ onDeviceOrientationEvent(event) {
+ // left/right
+ if(event.gamma === null && event.beta === null && event.alpha === null) {
+ return;
+ }
+ this.emit('orientation', {
+ lr: event.gamma,
+ fb: event.beta,
+ dir: event.alpha
+ });
+ }
+
+ onBatteryLevelChangeEvent({ target }) {
+ this.emit('battery', SensorBus.fixBattery(target));
+ }
+
+ onBatteryChargingChangeEvent({ target }) {
+ this.emit('battery', SensorBus.fixBattery(target));
+ }
+
+ onBatteryChargingTimeChangeEvent({ target }) {
+ this.emit('battery', SensorBus.fixBattery(target));
+ }
+
+ onBatteryDischargingTimeChangeEvent({ target }) {
+ this.emit('battery', SensorBus.fixBattery(target));
+ }
+
+ onGeolocationChangeEvent({ coords }) {
+ const pos = this.measurementPoints.position;
+ if(pos && !Object.keys(pos).find(k => pos[k] !== coords[k])) {
+ return;
+ }
+ this.emit('position', {
+ latitude: coords.latitude,
+ longitude: coords.longitude,
+ altitude: coords.altitude,
+ accuracy: coords.accuracy,
+ altitudeAccuracy: coords.altitudeAccuracy,
+ heading: coords.heading,
+ speed: coords.speed
+ });
+ }
+
+ static fixBattery(b) {
+ return {
+ level: b.level,
+ charging: b.charging ? 1 : 0,
+ chargingTime: b.chargingTime,
+ dischargingTime: b.dischargingTime
+ };
+ }
+}
+
+export default new SensorBus();
diff --git a/clients/binsa/src/store/configuration/index.js b/clients/binsa/src/store/configuration/index.js
new file mode 100644
index 0000000..e257177
--- /dev/null
+++ b/clients/binsa/src/store/configuration/index.js
@@ -0,0 +1,264 @@
+import Vue from 'vue';
+import PouchDB from 'pouchdb-core';
+import { uuid } from 'pouchdb-utils';
+import isEqual from 'lodash/isEqual';
+import idbAdapter from 'pouchdb-adapter-idb';
+import websqlAdapter from 'pouchdb-adapter-websql';
+import cryptoPouch from 'crypto-pouch';
+import ppmp from './ppmp';
+
+PouchDB
+ .plugin(idbAdapter)
+ .plugin(websqlAdapter)
+ .plugin(cryptoPouch);
+
+/*
+if(process.env.NODE_ENV === 'development') {
+ PouchDB.debug.enable('*');
+} else {
+ PouchDB.debug.disable();
+}
+*/
+// PouchDB.plugin(require('pouchdb-replication')); //enable syncing
+// PouchDB.plugin(require('pouchdb-adapter-http')); //enable syncing over http
+
+// default 'anonymous' db:
+
+function createDb(prefix = '') {
+ return new PouchDB(prefix + 'configurations', {
+// don't force idb to allow websql fallback for iOS
+// adapter: 'idb'
+ });
+}
+
+function createCryptoDb({ user, password, force }) {
+ const newDb = createDb(`${user}-`);
+ return (new Promise(function(resolve, reject) {
+ newDb.crypto(password, {
+ cb: (err, key) => {
+ if(err) {
+ reject(err);
+ }
+ resolve(key);
+ }
+ });
+ }))
+ // test, if provided password can be used
+ .then((/* key */) =>
+ newDb.get('preferences')
+ .then(() => newDb)
+ // catch first to reuse the following 'then'
+ .catch(err => {
+ // it shall not be an error, if preferences wasn't found. Only if decryption fails
+ // TODO: also check for err.constructor.name !== 'PouchError' but uglify-save
+ if(err.name !== 'not_found') {
+ // is an deletion intented?
+ if(force) {
+ // destroy and try again
+ return newDb.destroy()
+ .then(() => createCryptoDb({ user, password }));
+ }
+ // otherwise it's an actual problem
+ return newDb.close()
+ .then(() => Promise.reject(err));
+ }
+ return newDb;
+ })
+ );
+}
+
+export default store => {
+ let db = null;
+ const namespace = 'configuration';
+
+ store.registerModule(namespace, {
+ namespaced: true,
+ state: {
+ // null indicates that it hasn't been loaded yet. {...} === is loaded
+ credentials: null,
+ configuration: null,
+ expandedCardId: null
+ },
+ mutations: {
+ setExpandedCardId(state, id) {
+ state.expandedCardId = id;
+ },
+ saveConfiguration(state, config) {
+ if(!config) {
+ throw Error('no config with _id defined');
+ }
+ if(!(config instanceof Array)) {
+ config = [config];
+ }
+ if(!state.configuration) {
+ Vue.set(state, 'configuration', {});
+ }
+ config.forEach(c => Vue.set(state.configuration, c._id, c));
+ },
+ deleteConfiguration(state, id) {
+ Vue.delete(state.configuration, id);
+ },
+ resetConfiguration(state) {
+ Vue.set(state, 'configuration', null);
+ Vue.set(state, 'credentials', null);
+ },
+ saveCredentials(state, credentials) {
+ Vue.set(state, 'credentials', credentials ? {
+ user: credentials.user || null
+ // , password: credentials.user || null,
+ } : null);
+ }
+ },
+ actions: {
+ async saveConfiguration({ commit, state }, config) {
+ if(config._id && isEqual(config, state.configuration[config._id])) {
+ return state.configuration[config._id];
+ }
+ const res = await db.put(Object.assign({}, config, {
+ _id: (!config._id || !config._rev) ? uuid() : config._id
+ }));
+ commit('saveConfiguration', Object.assign({}, config, {
+ _id: res.id,
+ _rev: res.rev
+ }));
+ return state.configuration[res.id];
+ },
+ async deleteConfiguration({ commit, state }, id) {
+ const conf = db.remove(id, state.configuration[id]._rev);
+ commit('deleteConfiguration', id);
+ return conf;
+ },
+ async loadConfigurations(nsStore, credentials) {
+ // reset any configuration object to null
+ const anonymous = !(credentials && credentials.user && credentials.password);
+ if(nsStore.state.configuration) {
+ nsStore.commit('resetConfiguration');
+ }
+ try {
+ // close any open db synchronously and set to null
+ if(db) {
+ try {
+ await db.close();
+ } catch(e) {
+ console.error("Coulnd't close db", e);
+ }
+ db = null;
+ }
+ // now start opening with the new given credentials
+ if(!anonymous) {
+ db = await createCryptoDb(credentials);
+ nsStore.commit('saveCredentials', credentials);
+ } else {
+ // fallback anonymous
+ db = createDb();
+ nsStore.commit('saveCredentials', credentials);
+ }
+ // load actual configuration content
+ return nsStore.dispatch('afterConfigurations', credentials);
+ } catch(err) {
+ console.error("couldn't load db:", err);
+ // fallback anonymous
+ if(credentials) {
+ return nsStore.dispatch('loadConfigurations')
+ .then(configurations => {
+ if(!credentials.force) {
+ throw err;
+ }
+ return configurations;
+ });
+ }
+ // otherwise, there's a real problem
+ throw err;
+ }
+ },
+ async afterConfigurations(nsStore, credentials) {
+ if(!db) {
+ throw new Error('initialize db first');
+ }
+ // db object should be refreshed, now populate the configuration object
+ const checkSingletons = () => {
+ const singletons = {
+ preferences: {
+ lang: ((navigator.languages && navigator.languages[0]) || navigator.language || navigator.userLanguage).toLowerCase().split(/[_-]+/)[0]
+ }
+ };
+ // first login should not have credential popup
+ if(!(credentials && credentials.user && credentials.password)) {
+ singletons.preferences.fallbackLoginIsAnonymous = false;
+ }
+
+ return Promise.all(Object.keys(singletons)
+ // potentially no configuration exists (ever) yet
+ .filter(s => !(nsStore.state.configuration && nsStore.state.configuration[s]))
+ .map(function(_id) {
+ const obj = Object.assign({
+ _id,
+ type: 'singleton'
+ }, singletons[_id]);
+ // TODO: optimize for batch
+ return db.put(obj)
+ .then(res => nsStore.commit('saveConfiguration', Object.assign({
+ _id: res.id,
+ _rev: res.rev
+ }, obj)));
+ })
+ )
+ .then(() => {
+ // should fallback configuration (credentials = null) be regarded as explicit anonymous (credentials = {}) ?
+ if(nsStore.state.configuration.preferences.fallbackLoginIsAnonymous && !nsStore.state.credentials) {
+ nsStore.commit('saveCredentials', credentials || {});
+ }
+ // logout sets fallbackLoginIsAnonymous explicitly to false, see signOut()
+ if(credentials && credentials.remember && !nsStore.state.configuration.preferences.fallbackLoginIsAnonymous) {
+ return nsStore.dispatch('saveConfiguration', Object.assign({}, nsStore.state.configuration.preferences, {
+ fallbackLoginIsAnonymous: true
+ }))
+ .then(() => nsStore.state.configuration);
+ }
+ return nsStore.state.configuration;
+ });
+ },
+ res = await db.allDocs({
+ /* eslint camelcase: 0,indent: 0 */
+ include_docs: true
+ }),
+ docs = res.rows.map(doc => doc.doc),
+ listener = db.changes({
+ since: 'now',
+ live: true,
+ include_docs: true
+ })
+ .on('change', function(change) {
+ if(change.deleted) {
+ nsStore.commit('deleteConfiguration', change.id);
+ } else if(!isEqual(nsStore.state.configuration[change.doc._id], change.doc)) {
+ nsStore.commit('saveConfiguration', change.doc);
+ }
+ return checkSingletons();
+ });
+ if(docs.length) {
+ nsStore.commit('saveConfiguration', docs);
+ }
+ db.on('closed', function() {
+ listener.cancel();
+ });
+ return checkSingletons();
+ },
+ async signOut(nsStore) {
+ const prefs = nsStore.state.configuration.preferences;
+ if(prefs && prefs.fallbackLoginIsAnonymous) {
+ await nsStore.dispatch('saveConfiguration', Object.assign({}, prefs, {
+ fallbackLoginIsAnonymous: false
+ }));
+ }
+ await nsStore.dispatch('loadConfigurations', null);
+ }
+ }
+ });
+
+ // register further modules
+ ppmp(store, namespace);
+
+ // load default db
+ store.dispatch(`${namespace}/loadConfigurations`);
+};
diff --git a/clients/binsa/src/store/configuration/ppmp.js b/clients/binsa/src/store/configuration/ppmp.js
new file mode 100644
index 0000000..150baac
--- /dev/null
+++ b/clients/binsa/src/store/configuration/ppmp.js
@@ -0,0 +1,78 @@
+import Vue from 'vue';
+
+export default (store, prefix = []) => {
+ if(!(prefix instanceof Array)) {
+ prefix = [prefix];
+ }
+
+ store.registerModule(prefix.concat('ppmp'), {
+ namespaced: true,
+ state: {
+ registry: {},
+ translationCounts: {}
+ },
+ mutations: {
+ setTranslationCountsForConfigId(state, { id, counts }) {
+ if(state.translationCounts[id]) {
+ Vue.set(state.translationCounts, id, {});
+ }
+ Vue.set(state.translationCounts, id, counts);
+ },
+ register(state, { key, configId, deviceId, daemon }) {
+ if(daemon) {
+ if(!state.registry[key]) {
+ Vue.set(state.registry, key, {});
+ }
+ if(!state.registry[key][configId]) {
+ Vue.set(state.registry[key], configId, {});
+ }
+ Vue.set(state.registry[key][configId], deviceId, () => daemon);
+ } else {
+ if(state.registry[key] && state.registry[key][configId] && state.registry[key][configId][deviceId]) {
+ Vue.delete(state.registry[key][configId], deviceId);
+ if(!Object.keys(state.registry[key][configId] || {}).length) {
+ Vue.delete(state.registry[key], configId);
+ }
+ }
+ }
+ }
+ },
+ getters: {
+ getRegistry: (state) =>
+ (key, configId, deviceId) => {
+ let s = state.registry[key];
+ s = s ? s[configId] : null;
+ return s && s[deviceId] ? s[deviceId]() : null;
+ },
+ getTranslationsFor: (state, getters, rootState) =>
+ (configId, deviceId) => {
+ return (state.translationCounts[configId] || {})[deviceId] || {};
+ },
+ getTotalTranslationsFor: (state, getters) =>
+ (configId, deviceId) =>
+ Object.values(getters.getTranslationsFor(configId, deviceId)).reduce((l, v) => l + v, 0)
+ }
+ });
+
+ // sync local translation count cache with every commit
+ store.subscribe(mutation => {
+ if(mutation.type === 'configuration/saveConfiguration') {
+ let configs = mutation.payload;
+ configs = (configs instanceof Array) ? configs : [configs];
+ configs.filter(config => config.type === 'ppmp' || config.type === 'ppm')
+ .forEach(config => {
+ var counts = Object.entries(config.translate || {}).reduce((o, [deviceId, t]) => {
+ o[deviceId] = Object.keys(t || {}).reduce((l, v) => {
+ l[v] = Object.keys(t[v]).length;
+ return l;
+ }, {});
+ return o;
+ }, {});
+ store.commit(prefix.concat('ppmp', 'setTranslationCountsForConfigId').join('/'), {
+ id: config._id,
+ counts
+ });
+ });
+ }
+ });
+};
diff --git a/clients/binsa/src/store/index.js b/clients/binsa/src/store/index.js
new file mode 100644
index 0000000..b72cbd5
--- /dev/null
+++ b/clients/binsa/src/store/index.js
@@ -0,0 +1,14 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import configuration from './configuration';
+
+Vue.use(Vuex);
+
+export default new Vuex.Store({
+ strict: (process.env.NODE_ENV !== 'production'),
+ plugins: [configuration],
+ state: {},
+ mutations: {},
+ modules: {
+ }
+});
diff --git a/clients/binsa/src/styles/variables.scss b/clients/binsa/src/styles/variables.scss
new file mode 100644
index 0000000..b04cd7a
--- /dev/null
+++ b/clients/binsa/src/styles/variables.scss
@@ -0,0 +1,96 @@
+// https://www.w3.org/WAI/ER/WD-AERT/#q100
+@function brightness($color) {
+ @return ((red($color) * .299) + (green($color) * .587) + (blue($color) * .114)) / 255 * 100%;
+}
+@function findColorInvert($color) {
+ @if (abs(brightness($color)) > 50) {
+ @return black;
+ }
+ @return white;
+}
+
+$fa-font-path: "~font-awesome/fonts";
+
+// Bosch
+$bosch-prussianblue: rgb(0, 50, 100);
+$bosch-matisse: rgb(58, 90, 130);
+$bosch-wildblueyonder: rgb(110, 140, 178);
+$bosch-spindle: rgb(168, 186, 210);
+$bosch-red: rgb(226, 0, 21);
+$bosch-aluminium: rgb(128, 130, 133);
+$bosch-darkgray: rgb(167, 167, 167);
+$bosch-gainsboro: rgb(221, 221, 221);
+
+/*
+rgb(168, 1, 99)
+rgb(63, 19, 108)
+rgb(8, 66, 126)
+rgb(14, 120, 197)
+rgb(19, 153, 160)
+rgb(103, 180, 25)
+rgb(10, 81, 57)
+rgb(66, 76, 88)
+*/
+
+//New CD colors:
+$bosch-eggplant: rgb(185, 2, 118);
+$bosch-windsor: rgb(80, 35, 127);
+$bosch-cobalt: rgb(0, 86, 145);
+$bosch-pacificblue: rgb(0, 142, 207);
+$bosch-bondiblue: rgb(0, 168, 176);
+$bosch-lima: rgb(120, 190, 32);
+$bosch-watercourse: rgb(0, 98, 73);
+$bosch-fiord: rgb(82, 95, 107);
+
+$bosch-prussianblue-invert: findColorInvert($bosch-prussianblue);
+$bosch-matisse-invert: findColorInvert($bosch-matisse);
+$bosch-wildblueyonder-invert: findColorInvert($bosch-wildblueyonder);
+$bosch-spindle-invert: findColorInvert($bosch-spindle);
+$bosch-red-invert: findColorInvert($bosch-red);
+$bosch-aluminium-invert: findColorInvert($bosch-aluminium);
+$bosch-darkgray-invert: findColorInvert($bosch-darkgray);
+$bosch-gainsboro-invert: findColorInvert($bosch-gainsboro);
+$bosch-eggplant-invert: findColorInvert($bosch-eggplant);
+$bosch-windsor-invert: findColorInvert($bosch-windsor);
+$bosch-cobalt-invert: findColorInvert($bosch-cobalt);
+$bosch-pacificblue-invert: findColorInvert($bosch-pacificblue);
+$bosch-bondiblue-invert: findColorInvert($bosch-bondiblue);
+$bosch-lima-invert: findColorInvert($bosch-lima);
+$bosch-watercourse-invert: findColorInvert($bosch-watercourse);
+$bosch-fiord-invert: findColorInvert($bosch-fiord);
+
+$bosch-colors: (
+ "bosch-prussianblue": ($bosch-prussianblue, $bosch-prussianblue-invert),
+ "bosch-matisse": ($bosch-matisse, $bosch-matisse-invert),
+ "bosch-wildblueyonder": ($bosch-wildblueyonder, $bosch-wildblueyonder-invert),
+ "bosch-spindle": ($bosch-spindle, $bosch-spindle-invert),
+ "bosch-red": ($bosch-red, $bosch-red-invert),
+ "bosch-aluminium": ($bosch-aluminium, $bosch-aluminium-invert),
+ "bosch-darkgray": ($bosch-darkgray, $bosch-darkgray-invert),
+ "bosch-gainsboro": ($bosch-gainsboro, $bosch-gainsboro-invert),
+ "bosch-eggplant": ($bosch-eggplant, $bosch-eggplant-invert),
+ "bosch-windsor": ($bosch-windsor, $bosch-windsor-invert),
+ "bosch-cobalt": ($bosch-cobalt, $bosch-cobalt-invert),
+ "bosch-pacificblue": ($bosch-pacificblue, $bosch-pacificblue-invert),
+ "bosch-bondiblue": ($bosch-bondiblue, $bosch-bondiblue-invert),
+ "bosch-lima": ($bosch-lima, $bosch-lima-invert),
+ "bosch-watercourse": ($bosch-watercourse, $bosch-watercourse-invert),
+ "bosch-fiord": ($bosch-fiord, $bosch-fiord-invert)
+);
+
+$primary: $bosch-windsor;
+$success: $bosch-lima;
+$info: $bosch-pacificblue;
+$warning: $bosch-eggplant;
+$danger: $bosch-red;
+
+$primary-invert: findColorInvert($primary);
+$success-invert: white;
+$info-invert: findColorInvert($info);
+$warning-invert: findColorInvert($warning);
+$danger-invert: findColorInvert($danger);
+
+$link-hover: $bosch-lima;
+// $card-cap-bg: $gray-lightest;
+
+@import "bulma/sass/utilities/_all.sass";
diff --git a/clients/binsa/src/sw.js b/clients/binsa/src/sw.js
new file mode 100644
index 0000000..16fff62
--- /dev/null
+++ b/clients/binsa/src/sw.js
@@ -0,0 +1,37 @@
+// console.log('own sw.js', self);
+
+const API_CACHE_NAME = 'ppm-api-cache';
+
+/*
+function useFallback() {
+ return Promise.resolve(new Response('errortext', {
+ headers: {
+ 'Content-Type': 'image/svg+xml'
+ }
+ }));
+}
+*/
+
+self.addEventListener('fetch', event => {
+ // cache PPM REST API
+ if(event.request.method === 'GET' && event.request.url.search(/INL_CY/) !== -1) {
+ event.respondWith(caches.open(API_CACHE_NAME).then(function(cache) {
+ return fetch(event.request)
+ .then(function(response) {
+ if(!response.ok) {
+ return Promise.reject(response);
+ }
+ return cache.put(event.request, response.clone())
+ .then(function() {
+ return response;
+ });
+ })
+ .catch(function(err) {
+ return cache.match(event.request)
+ .then(function(matching) {
+ return matching || Promise.reject(err);
+ });
+ });
+ }));
+ }
+});
diff --git a/clients/binsa/tests/integration/main_spec.js b/clients/binsa/tests/integration/main_spec.js
new file mode 100644
index 0000000..c7fbde2
--- /dev/null
+++ b/clients/binsa/tests/integration/main_spec.js
@@ -0,0 +1,144 @@
+const pkg = require('../../package.json'),
+ i18n = {
+ en: require('../../src/i18n/en.json'),
+ de: require('../../src/i18n/de.json')
+ };
+
+function deleteDB(prefix = '') {
+ return new Promise((res, rej) => {
+ let req = indexedDB.deleteDatabase(`_pouch_${prefix}configurations`);
+ req.onsuccess = res;
+ req.onerror = rej;
+ });
+}
+
+function resetPage(prefix) {
+ Promise.all([
+ window.navigator.serviceWorker.getRegistrations()
+ .then(registrations =>
+ Promise.all(registrations.map(registration =>
+ registration.unregister()
+ ))
+ ),
+ window.caches.keys().then(cacheNames =>
+ Promise.all(
+ cacheNames.map(cacheName =>
+ window.caches.delete(cacheName)
+ )
+ )
+ ),
+ deleteDB()
+ ])
+ .then(arg => {
+ console.log(prefix);
+ if(prefix) {
+ return deleteDB(prefix);
+ }
+ return arg;
+ })
+ .catch(err => console.error(err));
+ cy.visit('http://localhost:8080/binsa/');
+ // cy.get('.home').should('exist');
+ // cy.get('#navMenu > div.navbar-end > div.navbar-item.signOut').click({ force: true });
+}
+
+describe('General', () => {
+ it('correct title', () => {
+ cy.visit('http://localhost:8080/binsa/')
+ cy.title().should('equal', pkg.title);
+ });
+});
+
+describe('Login', () => {
+ before(() => resetPage());
+
+ // clearing service worker
+ describe('display', () => {
+ it('login modal', () => {
+ cy.get('.login.modal.is-active').within(() => {
+ cy.get('.modal-background');
+ cy.get('.animation-content').within(() => {
+ cy.get('header').within(() => {
+ cy.get('.modal-card-title').should('contain', i18n.en.login.title);
+ cy.get('.dropdown > .dropdown-trigger > i.fa-globe');
+ });
+ cy.get('.modal-card-body').within(() => {
+ cy.get('.field input').not('[disabled]').should('have.length', 2);
+ cy.get('.checkbox input').should('have.length', 1);
+ });
+ cy.get('footer button').should('have.length', 2);
+ });
+ })
+ });
+ });
+
+ describe('functionality', () => {
+
+ describe('remember', () => {
+ it('should disable credentials', () => {
+ cy.get('.login.modal.is-active .animation-content').within(() => {
+ cy.get('.modal-card-body .checkbox input').check();
+ cy.get('.modal-card-body .field input').should('be.disabled');
+ cy.get('footer button.is-primary').should('be.disabled');
+ });
+ });
+ it('should enable credentials again', () => {
+ cy.get('.login.modal.is-active .animation-content').within(() => {
+ cy.get('.modal-card-body .checkbox input').uncheck();
+ cy.get('.modal-card-body .field input').should('not.be.disabled');
+ cy.get('footer button.is-primary').should('not.be.disabled');
+ });
+ });
+ });
+
+ describe('i18n', () => {
+ before(() => resetPage());
+
+ it('globe should change language', () => {
+ cy.get('.login.modal.is-active .animation-content header').within(() => {
+ cy.get('.dropdown').as('dropdown').within(() => {
+ cy.get('.dropdown-trigger > i.fa-globe').click();
+ cy.get('@dropdown');
+ cy.should('have.class', 'is-active');
+ cy.get('.background');
+ cy.get('.dropdown-menu .dropdown-item').contains('de').click({ force: true });
+ });
+ cy.get('.modal-card-title').should('contain', i18n.de.login.title);
+ });
+ });
+
+ it('and have persisted it', () => {
+ cy.get('.login.modal.is-active .animation-content header .modal-card-title').should('contain', i18n.de.login.title);
+ });
+ });
+
+ describe('general logins', () => {
+ before(() => resetPage());
+
+ it('should be possible to continue anonymously', () => {
+ cy.get('.login.modal.is-active .animation-content footer button.is-warning').click()
+ cy.get('.home').should('exist');
+ });
+
+ it('should be possible to log out again', () => {
+ cy.get('#navMenu > div.navbar-end > div.navbar-item.signOut').click({ force: true });
+ cy.get('.login.modal');
+ });
+ });
+
+ describe('named account', () => {
+ before(() => resetPage("mickey-"));
+
+ it('should be possible to create a new account', () => {
+ cy.get('.login.modal.is-active .animation-content').within(() => {
+ cy.get('.modal-card-body').within(() => {
+ cy.get('.field:nth-child(1) .input').type("mickey");
+ cy.get('.field:nth-child(2) .input').type("house");
+ });
+ cy.get('footer button.is-primary').click();
+ });
+ cy.get('.home').should('exist');
+ });
+ });
+ });
+});
diff --git a/clients/binsa/tests/support/commands.js b/clients/binsa/tests/support/commands.js
new file mode 100644
index 0000000..c1f5a77
--- /dev/null
+++ b/clients/binsa/tests/support/commands.js
@@ -0,0 +1,25 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add("login", (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This is will overwrite an existing command --
+// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
diff --git a/clients/binsa/tests/support/index.js b/clients/binsa/tests/support/index.js
new file mode 100644
index 0000000..d68db96
--- /dev/null
+++ b/clients/binsa/tests/support/index.js
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import './commands'
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
diff --git a/images/collaborators.png b/images/collaborators.png
deleted file mode 100644
index c984d3d..0000000
Binary files a/images/collaborators.png and /dev/null differ
diff --git a/images/measurementPayload.png b/images/measurementPayload.png
deleted file mode 100644
index 3bd1cb2..0000000
Binary files a/images/measurementPayload.png and /dev/null differ
diff --git a/images/messagePayload.png b/images/messagePayload.png
deleted file mode 100644
index 5a064eb..0000000
Binary files a/images/messagePayload.png and /dev/null differ
diff --git a/pom.xml b/pom.xml
index 1d453a3..4ec68c7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,12 +1,12 @@
@@ -14,43 +14,42 @@
4.0.0
org.eclipse.iot.unide.ppmp
unide-parent
- 0.0.1
+ 0.3.0-SNAPSHOT
pom
-
+
Unide
Unide provides simple and easy to use server, client and binding implementations for using the I4.0 standard Production Performance Management Protocol (PPMP).
https://www.eclipse.org/unide/
2016
-
-
-
- Eclipse Public License - Version 1.0
- http://www.eclipse.org/org/documents/epl-v10.php
-
-
-
-
- Eclipse Foundation
- http://www.eclipse.org/
+
+
+
+ Eclipse Public License - Version 1.0
+ http://www.eclipse.org/org/documents/epl-v10.php
+
+
+
+
+ Eclipse Foundation
+ http://www.eclipse.org/
-
+
- bindings/ppmp-java-binding
- servers
-
-
-
-
-
-
- maven-compiler-plugin
- 3.5.1
-
- 1.8
- 1.8
-
-
-
-
-
-
\ No newline at end of file
+ ppmp/ppmp-schema
+ servers
+
+
+
+
+
+ maven-compiler-plugin
+ 3.5.1
+
+ 1.8
+ 1.8
+
+
+
+
+
+
diff --git a/bindings/ppmp-java-binding/.gitignore b/ppmp/ppmp-schema/.gitignore
similarity index 90%
rename from bindings/ppmp-java-binding/.gitignore
rename to ppmp/ppmp-schema/.gitignore
index b83d222..24d6437 100644
--- a/bindings/ppmp-java-binding/.gitignore
+++ b/ppmp/ppmp-schema/.gitignore
@@ -1 +1 @@
-/target/
+/target/
diff --git a/ppmp/ppmp-schema/pom.xml b/ppmp/ppmp-schema/pom.xml
new file mode 100644
index 0000000..e6979ec
--- /dev/null
+++ b/ppmp/ppmp-schema/pom.xml
@@ -0,0 +1,72 @@
+
+
+
+ 4.0.0
+
+ org.eclipse.iot.unide.ppmp
+ ppmp-schema
+ 3.0.0-SNAPSHOT
+
+
+
+ repo.eclipse.org
+ Unide Repository - Releases
+ https://repo.eclipse.org/content/repositories/unide-releases/
+
+
+ repo.eclipse.org
+ Unide Repository - Snapshots
+ https://repo.eclipse.org/content/repositories/unide-snapshots/
+
+
+
+
+
+
+ eclipse_jar_signing
+
+ false
+
+ enableEclipseJarSigner
+
+
+
+
+ eclipse-repo
+ Eclipse CBI Repository
+
+ true
+
+
+ false
+
+ https://repo.eclipse.org/content/repositories/cbi-releases/
+
+
+
+
+
+ org.eclipse.cbi.maven.plugins
+ eclipse-jarsigner-plugin
+ 1.1.4
+
+ true
+
+
+
+ sign-jars
+ verify
+
+ sign
+
+
+
+
+
+
+
+
+
diff --git a/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v2/measurement_schema.json b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v2/measurement_schema.json
new file mode 100644
index 0000000..024c0d7
--- /dev/null
+++ b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v2/measurement_schema.json
@@ -0,0 +1,172 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/measurement-message#v2",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "type": "object",
+ "description": "Contains information about the device",
+ "properties": {
+ "deviceID": {
+ "type": "string",
+ "description": "The unique ID of the device. As this is used to identify a device independently from time or location the ID itself must be stable and unique. The recommendation is to use a universally unique identifier (UUID).",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "operationalStatus": {
+ "type": "string",
+ "description": "The operationalStatus describes the status of a device. It is a string matching a definition in the Production Performance Manager"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "deviceID"
+ ]
+ },
+ "part": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "partID": {
+ "type": "string",
+ "description": "Identifies a part. This ID comes from a 3rd party system and thus we have no guarantees if this is unique or not.",
+ "maxLength": 256
+ },
+ "partTypeID": {
+ "type": "string",
+ "description": "Identifies a part type",
+ "maxLength": 256
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ }
+ },
+ "additionalProperties": false,
+ "required": []
+ },
+ "measurements": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 36
+ },
+ "limits": {
+ "type": "object",
+ "description": "Provides information about limits for data provided in the series element.",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "object",
+ "description": "The key shall be the name of a measurement point (element of series element). The value is a structure of different upper/lower limits.",
+ "properties": {
+ "lowerError": {
+ "type": "number",
+ "description": "Indicates an error if this limit is underrun"
+ },
+ "lowerWarn": {
+ "type": "number",
+ "description": "Indicates a warning if this limit is underrun"
+ },
+ "target": {
+ "type": "number",
+ "description": "Indicates the intented target value of the measurement"
+ },
+ "upperError": {
+ "type": "number",
+ "description": "Indicates an error if this limit is exceeded"
+ },
+ "upperWarn": {
+ "type": "number",
+ "description": "Indicates a warning if this limit is exceeded"
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": []
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ },
+ "series": {
+ "type": "object",
+ "description": "The series data collected for the measurements. Every entry matches a Measurement Point of the Device Type. In the case of a time series, one column contains the time offsets.",
+ "properties": {
+ "$_time": {
+ "type": "array",
+ "description": "The time offset in milliseconds (positive values in ascending order starting with 0) to the 'ts' field of the measurement",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "required": [
+ "$_time"
+ ],
+ "minProperties": 2,
+ "additionalProperties": false
+ },
+ "ts": {
+ "format": "date-time",
+ "type": "string",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ }
+ },
+ "required": [
+ "ts",
+ "series"
+ ]
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "content-spec",
+ "device",
+ "measurements"
+ ]
+}
diff --git a/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v2/message_schema.json b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v2/message_schema.json
new file mode 100644
index 0000000..39d9cf2
--- /dev/null
+++ b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v2/message_schema.json
@@ -0,0 +1,110 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/measurement-message#v2",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "type": "object",
+ "description": "Contains information about the device",
+ "properties": {
+ "deviceID": {
+ "type": "string",
+ "description": "The unique ID of the device. As this is used to identify a device independently from time or location the ID itself must be stable and unique. The recommendation is to use a universally unique identifier (UUID).",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "operationalStatus": {
+ "type": "string",
+ "description": "The operationalStatus describes the status of a device. It is a string matching a definition in the Production Performance Manager"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "deviceID"
+ ]
+ },
+ "messages": {
+ "minItems": 1,
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Collection of messages",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Code identifying the problem described in the message. The value often stems from the machine e.g. a PLC code. Is similar to code in measurement interface.",
+ "maxLength": 36
+ },
+ "description": {
+ "type": "string",
+ "description": "The description is used to describe the purpose of the message, e.g. the problem",
+ "maxLength": 2000
+ },
+ "hint": {
+ "type": "string",
+ "description": "In case a problem is reported, the hint can be used to point out a possible solution",
+ "maxLength": 2000
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "origin": {
+ "type": "string",
+ "description": "The origin of the message if not the device identified by deviceID in the header element. Could be used to identify a subsystem or a particular sensor/part of the device where the message actually relates to."
+ },
+ "severity": {
+ "type": "string",
+ "description": "Severity of the message",
+ "enum": [
+ "HIGH",
+ "MEDIUM",
+ "LOW",
+ "UNKNOWN"
+ ],
+ "default": "UNKNOWN"
+ },
+ "title": {
+ "type": "string",
+ "description": "Title of the message. If title not set the code will be stored as fallback",
+ "maxLength": 1000
+ },
+ "ts": {
+ "format": "date-time",
+ "type": "string",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of message. Default is DEVICE but can be set to TECHNICAL_INFO indicating a problem with the integration of the actual device. Allowed values: DEVICE, TECHNICAL_INFO",
+ "enum": [
+ "DEVICE",
+ "TECHNICAL_INFO"
+ ],
+ "default": "DEVICE"
+ }
+ },
+ "required": [
+ "ts",
+ "code"
+ ]
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "content-spec",
+ "device",
+ "messages"
+ ]
+}
diff --git a/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v2/process_schema.json b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v2/process_schema.json
new file mode 100644
index 0000000..3c68074
--- /dev/null
+++ b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v2/process_schema.json
@@ -0,0 +1,376 @@
+{
+ "definitions": {
+ "device": {
+ "type": "object",
+ "description": "Contains information about the device",
+ "properties": {
+ "deviceID": {
+ "type": "string",
+ "description": "The unique ID of the device. As this is used to identify a device independently from time or location the ID itself must be stable and unique. The recommendation is to use a universally unique identifier (UUID).",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "operationalStatus": {
+ "type": "string",
+ "description": "The operationalStatus describes the status of a device. It is a string matching a definition in the Production Performance Manager"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "deviceID"
+ ]
+ },
+ "limit": {
+ "description": "Provides information about limits for data provided in the series element. The limits is an JSON object where the key is the name of a Measurement Point (see also series element) and the value is a structure of upper/lower limits",
+ "type": "object",
+ "patternProperties": {
+ "^[^$]+": {
+ "oneOf": [{
+ "type": "object",
+ "description": "A constant limit for all corresponding measurements",
+ "properties": {
+ "lowerError": {
+ "description": "Indicates an error if this limit is underrun",
+ "type": "number"
+ },
+ "lowerWarn": {
+ "description": "Indicates a warning if this limit is underrun",
+ "type": "number"
+ },
+ "target": {
+ "description": "Indicates the intented target value of the measurement",
+ "type": "number"
+ },
+ "upperError": {
+ "description": "Indicates an error if this limit is exceeded",
+ "type": "number"
+ },
+ "upperWarn": {
+ "description": "Indicates a warning if this limit is exceeded",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ }, {
+ "type": "object",
+ "description": "An array of limit values. The items of the array correspond to the respective measurements at the same position.",
+ "properties": {
+ "lowerError": {
+ "description": "Indicates an error if these limits is underrun. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "lowerWarn": {
+ "description": "Indicates a warning if these limits is underrun. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "target": {
+ "description": "Indicates the intented target values. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "upperError": {
+ "description": "Indicates an error if these limits is exceeded. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "upperWarn": {
+ "description": "Indicates a warning if these limits is exceeded. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "additionalProperties": false
+ }]
+ }
+ }
+ }
+ },
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/process-message#v2",
+ "description": "Defines what the format version is"
+ },
+ "device": { "$ref": "#/definitions/device" },
+ "part": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "partID": {
+ "type": "string",
+ "description": "Identifies a part. This ID comes from a 3rd party system and thus we have no guarantees if this is unique or not.",
+ "maxLength": 256
+ },
+ "partTypeID": {
+ "type": "string",
+ "description": "Identifies a part type",
+ "maxLength": 256
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "SINGLE",
+ "BATCH"
+ ],
+ "description": "Describes the type of the part. Type SINGLE means a single item is processed. Type BATCH means multiple items of the same type are processed.",
+ "default": "SINGLE"
+ }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+ "process": {
+ "type": "object",
+ "description": "Contains information about the process. If the process JSON object is set, then all information in measurements are process phases",
+ "properties": {
+ "externalProcessId": {
+ "type": "string",
+ "description": "The process Id identifies the process as part of long living process. The process Id can be used to connect multiple processes in a manufacturing chain. The Id has to be set and tracked by the different devices in the chain.",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "program": {
+ "type": "object",
+ "description": "Contains information about the program that was used in the process.",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The ID of the program",
+ "maxLength": 36
+ },
+ "lastChangedDate": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date when the program was last changed"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the program",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "id"
+ ]
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ },
+ "shutoffPhase": {
+ "type": "string",
+ "description": "The ID of the phase that led to stop the process. The shutOffPhase is the phase of the process in which either pre-defined parameters are met to successfully finish the process or an error that stopped the process. That is not necessarily the last phase. The shutOffPhase should be sent when the last process phase is sent."
+ },
+ "shutoffValues": {
+ "type": "object",
+ "description": "The shutoff values contain the values of the process that stopped the process. The shutoffValues is a JSON object where the key is the name of a Measurement Point (see also series element) and the value is a structure of different upper/lower limits and the actual value as described below.",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "object",
+ "properties": {
+ "lowerError": {
+ "type": "number",
+ "description": "Indicates an error if this limit is underrun"
+ },
+ "lowerWarn": {
+ "type": "number",
+ "description": "Indicates a warning if this limit is underrun"
+ },
+ "target": {
+ "type": "number",
+ "description": "Indicates the intented target value of the measurement"
+ },
+ "ts": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Time of the measured value"
+ },
+ "upperWarn": {
+ "type": "number",
+ "description": "Indicates a warning if this limit is exceeded"
+ },
+ "upperError": {
+ "type": "number",
+ "description": "Indicates an error if this limit is exceeded"
+ },
+ "value": {
+ "type": "number",
+ "description": "The final value of the process"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "value"
+ ]
+ }
+ }
+ },
+ "ts": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Start time of the process"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ts"
+ ]
+ },
+ "measurements": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Contains the different phases of the process. Each phase represents an execution step in the process and contains information about that specific execution step. All phases should be sorted by the timestamp of the phase.",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 36
+ },
+ "limits": {
+ "$ref": "#/definitions/limit"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the process phase",
+ "maxLength": 256
+ },
+ "phase": {
+ "type": "string",
+ "description": "The id of the process phase",
+ "maxLength": 256
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ },
+ "specialValues": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Provides information about special or interesting values during the process phase.",
+ "properties": {
+ "$_time": {
+ "type": "integer",
+ "description": "The time offset in milliseconds to the 'ts' field of the measurement"
+ },
+ "name": {
+ "type": "string",
+ "description": "indicates the type of the specialValue (e.g. 'endanzug', 'turningPoint' etc.)"
+ },
+ "value": {
+ "type": "object",
+ "description": "Contains the actual (multidimensional) value of interest. Similarly to series, every entry matches a Measurement Point of the device",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "number"
+ }
+ },
+ "minProperties": 1
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "value"
+ ]
+ }
+ },
+ "series": {
+ "type": "object",
+ "description": "The series data collected for the measurements. Every entry matches a Measurement Point of the device. In the case of a time series, one column contains the time offset in milliseconds (positive values in ascending order starting with 0). In this case the value is the keyword $_time. The maximum size for the measurement value is 10 positions before the decimal point. The decimal places are truncated to 2 in the historical data.",
+ "properties": {
+ "$_time": {
+ "type": "array",
+ "description": "The time offset in milliseconds (positive values in ascending order starting with 0) to the 'ts' field of the measurement",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "ts": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ts",
+ "series"
+ ]
+ }
+ }
+ },
+ "required": [
+ "content-spec",
+ "device",
+ "process",
+ "measurements"
+ ]
+}
diff --git a/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/definitions.json b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/definitions.json
new file mode 100644
index 0000000..5ad9a9c
--- /dev/null
+++ b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/definitions.json
@@ -0,0 +1,260 @@
+{
+ "definitions": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 128
+ },
+ "device": {
+ "type": "object",
+ "description": "Contains information about the device",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The unique identification of the device. As this is used to identify a device independently from time or location the id itself must be stable and unique. Recommended is to use a universally unique identifier (UUID).",
+ "maxLength": 36
+ },
+ "mode": {
+ "type": "string",
+ "description": "The operational mode indicates the functional state of the device. This is not restrictected to enum, since it is dependent on the machine, process or use case. Examples are 'auto', 'manual', 'test', 'wait', 'maintenance', 'run', 'stop', 'other' or 'unknown'"
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "INFO",
+ "WARN",
+ "ERROR",
+ "UNKNOWN"
+ ],
+ "default": "UNKNOWN",
+ "description": "The state describes the technical condition of a device."
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
+ "measurements": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "$ref": "#/definitions/code"
+ },
+ "context": {
+ "type": "object",
+ "description": "Provides additional information about the data provided in the series element. An entry in the context applies to the element in the series with the same key.",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "object",
+ "description": "The key shall be the name of a measurement point (element of series element). The value is a structure of additional context information.",
+ "properties": {
+ "accuracy": {
+ "oneOf": [
+ {
+ "type": "number",
+ "description": "A constant that describes the accuracy of the corresponding measurement as absolute value"
+ },
+ {
+ "type": "array",
+ "description": "An array of accuracy values. The items of the array correspond to the respective measurements at the same position.",
+ "items": {
+ "type": "number"
+ }
+ }
+ ]
+ },
+ "limits": {
+ "description": "Provides information about the limit for data provided in the series element. The limit corresponds to the measurement point (see also series element) with the same key. The value is a structure of upper/lower limits and applies to numeric values only.",
+ "type": "object",
+ "oneOf": [
+ {
+ "type": "object",
+ "description": "A constant limit for all corresponding measurements",
+ "properties": {
+ "lowerError": {
+ "description": "Indicates an error if this limit is underrun",
+ "type": "number"
+ },
+ "lowerWarn": {
+ "description": "Indicates a warning if this limit is underrun",
+ "type": "number"
+ },
+ "target": {
+ "description": "Indicates the intented target value of the measurement",
+ "type": "number"
+ },
+ "upperError": {
+ "description": "Indicates an error if this limit is exceeded",
+ "type": "number"
+ },
+ "upperWarn": {
+ "description": "Indicates a warning if this limit is exceeded",
+ "type": "number"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "description": "An array of limit values. The items of the array correspond to the respective measurements at the same position.",
+ "properties": {
+ "lowerError": {
+ "description": "Indicates an error if these limits is underrun. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "lowerWarn": {
+ "description": "Indicates a warning if these limits is underrun. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "target": {
+ "description": "Indicates the intented target values. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "upperError": {
+ "description": "Indicates an error if these limits is exceeded. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "upperWarn": {
+ "description": "Indicates a warning if these limits is exceeded. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "offset": {
+ "description": "The offset applies to numeric data type only.",
+ "oneOf": [
+ {
+ "type": "number",
+ "description": "Describes the offset of the corresponding measurement as absolute value"
+ },
+ {
+ "type": "array",
+ "description": "An array of offset values. The items of the array correspond to the respective measurements at the same position.",
+ "items": {
+ "type": "number"
+ }
+ }
+ ]
+ },
+ "type": {
+ "type": "string",
+ "description": "The data type of the corresponding measurement value.",
+ "enum": ["BASE64", "BOOLEAN", "NUMBER", "OTHER", "REF", "STRING"],
+ "default": "NUMBER"
+ },
+ "unit": {
+ "type": "string",
+ "description": "Describes the unit of the corresponding measurement. It is recommended to use symbols as defined in https://tools.ietf.org/html/draft-ietf-core-senml-14#section-12.1"
+ }
+ },
+ "minProperties": 1
+ }
+ },
+ "required": []
+ },
+ "result": {
+ "$ref": "#/definitions/result"
+ },
+ "series": {
+ "type": "object",
+ "description": "The series data collected for the measurements. Every entry matches a Measurement Point of the Device Type. In the case of a time series, one column contains the time offsets.",
+ "properties": {
+ "time": {
+ "type": "array",
+ "description": "The time offset in milliseconds (positive values in ascending order starting with 0) to the 'ts' field of the measurement",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "array",
+ "items": {
+ "type": ["boolean", "number", "string"],
+ "description": "The type of this measurement series is dependendant on the context.type. It defaults to number"
+ }
+ }
+ },
+ "required": [
+ "time"
+ ],
+ "minProperties": 2
+ },
+ "ts": {
+ "format": "date-time",
+ "type": "string",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ }
+ },
+ "required": [
+ "ts",
+ "series"
+ ]
+ }
+ },
+ "part": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "$ref": "#/definitions/code"
+ },
+ "id": {
+ "type": "string",
+ "description": "Identifies a part. This id comes from a 3rd party system and thus we have no guarantees if this is unique or not.",
+ "maxLength": 256
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "SINGLE",
+ "BATCH"
+ ],
+ "description": "Describes the type of the part. Type SINGLE means a single item is processed. Type BATCH means multiple items of the same type are processed.",
+ "default": "SINGLE"
+ },
+ "typeId": {
+ "type": "string",
+ "description": "Identifies a part type",
+ "maxLength": 256
+ },
+ "result": {
+ "$ref": "#/definitions/result"
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ }
+ }
+}
\ No newline at end of file
diff --git a/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/measurement_schema.json b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/measurement_schema.json
new file mode 100644
index 0000000..d529616
--- /dev/null
+++ b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/measurement_schema.json
@@ -0,0 +1,24 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/machine-message#v3",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "$ref": "definitions.json#/definitions/device"
+ },
+ "part": {
+ "$ref": "definitions.json#/definitions/part"
+ },
+ "measurements": {
+ "$ref": "definitions.json#/definitions/measurements"
+ }
+ },
+ "required": [
+ "content-spec",
+ "device",
+ "measurements"
+ ]
+}
\ No newline at end of file
diff --git a/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/message_schema.json b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/message_schema.json
new file mode 100644
index 0000000..f472f9b
--- /dev/null
+++ b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/message_schema.json
@@ -0,0 +1,79 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/machine-message#v3",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "$ref": "definitions.json#/definitions/device"
+ },
+ "messages": {
+ "minItems": 1,
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Collection of messages",
+ "properties": {
+ "code": {
+ "$ref": "definitions.json#/definitions/code"
+ },
+ "description": {
+ "type": "string",
+ "description": "The description is used to describe the purpose of the message, e.g. the problem",
+ "maxLength": 2000
+ },
+ "hint": {
+ "type": "string",
+ "description": "In case a problem is reported, the hint can be used to point out a possible solution",
+ "maxLength": 2000
+ },
+ "origin": {
+ "type": "string",
+ "description": "The origin of the message if not the device identified by deviceID in the header element. Could be used to identify a subsystem or a particular sensor/part of the device where the message actually relates to."
+ },
+ "severity": {
+ "type": "string",
+ "description": "Severity of the message",
+ "enum": [
+ "HIGH",
+ "MEDIUM",
+ "LOW",
+ "UNKNOWN"
+ ],
+ "default": "UNKNOWN"
+ },
+ "title": {
+ "type": "string",
+ "description": "Title of the message. If title not set the code will be stored as fallback",
+ "maxLength": 1000
+ },
+ "ts": {
+ "format": "date-time",
+ "type": "string",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of message. Default is DEVICE but can be set to TECHNICAL_INFO indicating a problem with the integration of the actual device. Allowed values: DEVICE, TECHNICAL_INFO",
+ "enum": [
+ "DEVICE",
+ "TECHNICAL_INFO"
+ ],
+ "default": "DEVICE"
+ }
+ },
+ "required": [
+ "ts",
+ "code"
+ ]
+ }
+ }
+ },
+ "required": [
+ "content-spec",
+ "device",
+ "messages"
+ ]
+}
\ No newline at end of file
diff --git a/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/process_schema.json b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/process_schema.json
new file mode 100644
index 0000000..4e5945f
--- /dev/null
+++ b/ppmp/ppmp-schema/src/main/resources/org/eclipse/iot/unide/ppmp/v3/process_schema.json
@@ -0,0 +1,127 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/process-message#v3",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "$ref": "definitions.json#/definitions/device"
+ },
+ "part": {
+ "$ref": "definitions.json#/definitions/part"
+ },
+ "process": {
+ "type": "object",
+ "description": "Contains information about the process. If the process JSON object is set, then all information in measurements are process phases",
+ "properties": {
+ "externalId": {
+ "type": "string",
+ "description": "The process id identifies the process as part of long living process. The process id can be used to connect multiple processes in a manufacturing chain. The id has to be set and tracked by the different devices in the chain.",
+ "maxLength": 36
+ },
+ "program": {
+ "type": "object",
+ "description": "Contains information about the program that was used in the process.",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The program identifier",
+ "maxLength": 36
+ },
+ "lastChangedDate": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date when the program was last changed"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the program",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
+ "result": {
+ "$ref": "definitions.json#/definitions/result"
+ },
+ "shutoffPhase": {
+ "type": "string",
+ "description": "The id of the phase that led to stop the process. The shutOffPhase is the phase of the process in which either pre-defined parameters are met to successfully finish the process or an error that stopped the process. That is not necessarily the last phase. The shutOffPhase should be sent when the last process phase is sent."
+ },
+ "ts": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Start time of the process"
+ }
+ },
+ "required": [
+ "ts"
+ ]
+ },
+ "measurements": {
+ "allOf": [
+ {
+ "$ref": "definitions.json#/definitions/measurements"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the process phase",
+ "maxLength": 256
+ },
+ "phase": {
+ "type": "string",
+ "description": "The id of the process phase",
+ "maxLength": 256
+ },
+ "specialValues": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Provides information about special or interesting values during the process phase.",
+ "properties": {
+ "time": {
+ "type": "integer",
+ "description": "The time offset in milliseconds to the 'ts' field of the measurement"
+ },
+ "name": {
+ "type": "string",
+ "description": "Indicates the type of the specialValue (e.g. 'shutoff', endanzug', 'turningPoint' etc.)"
+ },
+ "value": {
+ "type": "object",
+ "description": "Contains the actual (multidimensional) value of interest. Similarly to series, every entry matches a Measurement Point of the device",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "number"
+ }
+ },
+ "minProperties": 1
+ }
+ },
+ "required": [
+ "value"
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "required": [
+ "content-spec",
+ "device",
+ "process",
+ "measurements"
+ ]
+}
\ No newline at end of file
diff --git a/servers/README.md b/servers/README.md
index c4e7bf4..c83013f 100644
--- a/servers/README.md
+++ b/servers/README.md
@@ -1,17 +1,3 @@
-# Unide Server
-
-The server helps to implement PPMP to your system by providing endpoints for validating and storing PPMP-messages to an influxDB. Using these stored data, you can visualize measurements and process messages of your system.
-
-# Getting started
-
-## Installation
-
-Run `mvn clean install`
-
-## Configuring
-
-Open `src\main\application_conf.json` and set database- and http-settings
-
-## Running
-
-run `java -jar ppmp-server-0.0.1-fat.jar -conf application_conf.json`
\ No newline at end of file
+Parent for PPMP Protocol compatible servers.
+
+See server README for purpose and setup instructions.
diff --git a/servers/pom.xml b/servers/pom.xml
index 26b612e..ef862cf 100644
--- a/servers/pom.xml
+++ b/servers/pom.xml
@@ -1,6 +1,6 @@
-
\ No newline at end of file
diff --git a/servers/rest/WebContent/index.html b/servers/rest/WebContent/index.html
deleted file mode 100644
index 768d228..0000000
--- a/servers/rest/WebContent/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-Unide REST-Server
-
-
-This is your text!
-
-
\ No newline at end of file
diff --git a/servers/rest/assets/grafana/grafana_influxdb_dashboard.json b/servers/rest/assets/grafana/grafana_influxdb_dashboard.json
new file mode 100644
index 0000000..3c0cfdb
--- /dev/null
+++ b/servers/rest/assets/grafana/grafana_influxdb_dashboard.json
@@ -0,0 +1,554 @@
+{
+ "__inputs": [
+ {
+ "name": "DS_PPMP_MEASUREMENTS",
+ "label": "PPMP_MEASUREMENTS",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "influxdb",
+ "pluginName": "InfluxDB"
+ }
+ ],
+ "__requires": [
+ {
+ "type": "grafana",
+ "id": "grafana",
+ "name": "Grafana",
+ "version": "4.6.2"
+ },
+ {
+ "type": "panel",
+ "id": "graph",
+ "name": "Graph",
+ "version": ""
+ },
+ {
+ "type": "datasource",
+ "id": "influxdb",
+ "name": "InfluxDB",
+ "version": "1.0.0"
+ },
+ {
+ "type": "panel",
+ "id": "table",
+ "name": "Table",
+ "version": ""
+ }
+ ],
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "gnetId": null,
+ "graphTooltip": 0,
+ "hideControls": false,
+ "id": null,
+ "links": [],
+ "refresh": "5s",
+ "rows": [
+ {
+ "collapse": false,
+ "height": 258,
+ "panels": [
+ {
+ "columns": [],
+ "datasource": "${DS_PPMP_MEASUREMENTS}",
+ "fontSize": "100%",
+ "id": 1,
+ "links": [],
+ "pageSize": null,
+ "scroll": true,
+ "showHeader": true,
+ "sort": {
+ "col": 0,
+ "desc": true
+ },
+ "span": 12,
+ "styles": [
+ {
+ "alias": "Time",
+ "dateFormat": "YYYY-MM-DD HH:mm:ss",
+ "pattern": "Time",
+ "type": "date"
+ },
+ {
+ "alias": "",
+ "colorMode": null,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "decimals": 2,
+ "pattern": "/.*/",
+ "thresholds": [],
+ "type": "number",
+ "unit": "short"
+ }
+ ],
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$__interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "orderByTime": "ASC",
+ "policy": "default",
+ "query": "SELECT * FROM \"ppmp_measurements\" WHERE \"deviceId\"='33a58b-8350-4592-23121-755194497d' AND \"measurementPoint\"='temprature'",
+ "rawQuery": true,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": []
+ }
+ ],
+ "title": "Panel Title",
+ "transform": "timeseries_to_columns",
+ "type": "table"
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": false,
+ "title": "Dashboard Row",
+ "titleSize": "h6"
+ },
+ {
+ "collapse": false,
+ "height": 212,
+ "panels": [
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PPMP_MEASUREMENTS}",
+ "fill": 1,
+ "id": 3,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$__interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "orderByTime": "ASC",
+ "policy": "default",
+ "query": "SELECT * FROM \"ppmp_measurements\" WHERE \"deviceId\"='33a58b-8350-4592-23121-755194497d' AND \"measurementPoint\"='temprature'",
+ "rawQuery": true,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": []
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Tempreature",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": false,
+ "title": "Dashboard Row",
+ "titleSize": "h6"
+ },
+ {
+ "collapse": false,
+ "height": 229,
+ "panels": [
+ {
+ "columns": [],
+ "datasource": "${DS_PPMP_MEASUREMENTS}",
+ "fontSize": "100%",
+ "id": 6,
+ "pageSize": null,
+ "scroll": true,
+ "showHeader": true,
+ "sort": {
+ "col": 0,
+ "desc": true
+ },
+ "span": 12,
+ "styles": [
+ {
+ "alias": "Time",
+ "dateFormat": "YYYY-MM-DD HH:mm:ss",
+ "pattern": "Time",
+ "type": "date"
+ },
+ {
+ "alias": "",
+ "colorMode": null,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "decimals": 2,
+ "pattern": "/.*/",
+ "thresholds": [],
+ "type": "number",
+ "unit": "short"
+ }
+ ],
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$__interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "orderByTime": "ASC",
+ "policy": "default",
+ "query": "SELECT * FROM \"ppmp_measurements\" WHERE \"deviceId\"='33a58b-8350-4592-23121-755194497d' AND \"measurementPoint\"='pressure'",
+ "rawQuery": true,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": []
+ }
+ ],
+ "title": "Panel Title",
+ "transform": "timeseries_to_columns",
+ "type": "table"
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": false,
+ "title": "Dashboard Row",
+ "titleSize": "h6"
+ },
+ {
+ "collapse": false,
+ "height": 250,
+ "panels": [
+ {
+ "aliasColors": {
+ "ppmp_measurements": "#c15c17",
+ "ppmp_measurements.pressure": "#890f02"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "${DS_PPMP_MEASUREMENTS}",
+ "fill": 0,
+ "id": 4,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [],
+ "hide": false,
+ "measurement": "ppmp_measurements",
+ "orderByTime": "ASC",
+ "policy": "autogen",
+ "query": "SELECT mean(\"value\") FROM \"ppmp_measurements\" WHERE (\"measurementPoint\" = 'temperature') AND $timeFilter GROUP BY time($__interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [
+ "tempreature"
+ ],
+ "type": "alias"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "measurementPoint",
+ "operator": "=",
+ "value": "temprature"
+ }
+ ]
+ },
+ {
+ "dsType": "influxdb",
+ "groupBy": [],
+ "hide": false,
+ "measurement": "ppmp_measurements",
+ "orderByTime": "ASC",
+ "policy": "autogen",
+ "query": "SELECT mean(\"value\") FROM \"ppmp_measurements\" WHERE (\"measurementPoint\" = 'temperature') AND $timeFilter GROUP BY time($__interval) fill(null)",
+ "rawQuery": false,
+ "refId": "B",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [
+ "pressure"
+ ],
+ "type": "alias"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "measurementPoint",
+ "operator": "=",
+ "value": "pressure"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Tempreature & Pressure",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "transparent": false,
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": null,
+ "format": "short",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": false,
+ "title": "Dashboard Row",
+ "titleSize": "h6"
+ }
+ ],
+ "schemaVersion": 14,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": []
+ },
+ "time": {
+ "from": "now-5m",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ]
+ },
+ "timezone": "",
+ "title": "PPMP_MEASURMENT_DASHBOARD",
+ "version": 20
+}
\ No newline at end of file
diff --git a/servers/rest/assets/postman/unide.postman_collection.json b/servers/rest/assets/postman/unide.postman_collection.json
new file mode 100644
index 0000000..a72b7b4
--- /dev/null
+++ b/servers/rest/assets/postman/unide.postman_collection.json
@@ -0,0 +1,223 @@
+{
+ "info": {
+ "name": "Unide",
+ "_postman_id": "868488cf-584c-47e6-d3a3-93be2d8376d0",
+ "description": "",
+ "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json"
+ },
+ "item": [
+ {
+ "name": "InfluxDB",
+ "description": "",
+ "item": [
+ {
+ "name": "Ping",
+ "request": {
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "url": "{{influxurl}}/ping",
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "Show Databases",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/x-www-form-urlencoded"
+ }
+ ],
+ "body": {
+ "mode": "urlencoded",
+ "urlencoded": [
+ {
+ "key": "q",
+ "value": "SHOW DATABASES",
+ "description": "",
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "http://localhost:8086/query?q=\"SHOW DATABASES\"",
+ "protocol": "http",
+ "host": [
+ "localhost"
+ ],
+ "port": "8086",
+ "path": [
+ "query"
+ ],
+ "query": [
+ {
+ "key": "q",
+ "value": "\"SHOW DATABASES\"",
+ "equals": true
+ }
+ ]
+ },
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "Messages DB: Select from Messages",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/x-www-form-urlencoded"
+ }
+ ],
+ "body": {
+ "mode": "urlencoded",
+ "urlencoded": [
+ {
+ "key": "q",
+ "value": "SELECT * FROM \"ppmp_message\"",
+ "description": "",
+ "type": "text"
+ },
+ {
+ "key": "db",
+ "value": "Messages",
+ "description": "",
+ "type": "text"
+ }
+ ]
+ },
+ "url": "http://localhost:8086/query",
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "Messages DB: Select from Measurements",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/x-www-form-urlencoded"
+ }
+ ],
+ "body": {
+ "mode": "urlencoded",
+ "urlencoded": [
+ {
+ "key": "q",
+ "value": "SELECT * FROM \"ppmp_measurements\" WHERE \"deviceId\"='33a58b-8350-4592-23121-755194497d'",
+ "description": "",
+ "type": "text"
+ },
+ {
+ "key": "db",
+ "value": "Measurements",
+ "description": "",
+ "type": "text"
+ }
+ ]
+ },
+ "url": "http://localhost:8086/query",
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "Messages DB: Select from Processes",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/x-www-form-urlencoded"
+ }
+ ],
+ "body": {
+ "mode": "urlencoded",
+ "urlencoded": [
+ {
+ "key": "q",
+ "value": "SELECT * FROM \"ppmp_processes\"",
+ "description": "",
+ "type": "text"
+ },
+ {
+ "key": "db",
+ "value": "Processes",
+ "description": "",
+ "type": "text"
+ }
+ ]
+ },
+ "url": "http://localhost:8086/query",
+ "description": ""
+ },
+ "response": []
+ }
+ ]
+ },
+ {
+ "name": "Send Machine message",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\r\n\t\"content-spec\": \"urn:spec://eclipse.org/unide/machine-message#v2\",\r\n\t\"device\": \r\n\t{\r\n\t\t\"deviceID\": \"2ca5158b-8350-4592-23121-755194497d\"\r\n\t},\r\n\t\"messages\": \r\n\t[\r\n\t\t{\r\n\t\t\t\"origin\": \"sensor-id-992.2393.22\",\r\n\t\t\t\"ts\": \"2002-05-30T09:30:10.123+02:00\",\r\n\t\t\t\"type\": \"DEVICE\",\r\n\t\t\t\"severity\": \"LOW\",\r\n\t\t\t\"code\": \"190ABT\",\r\n\t\t\t\"title\": \"control board damaged\",\r\n\t\t\t\"description\": \"Electronic control board or its electrical connections are damaged\",\r\n\t\t\t\"hint\": \"Check the control board\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"origin\": \"sensor-id-992.2393.22\",\r\n\t\t\t\"ts\": \"2002-05-30T09:30:10.123+02:00\",\r\n\t\t\t\"type\": \"DEVICE\",\r\n\t\t\t\"severity\": \"HIGH\",\r\n\t\t\t\"code\": \"190ABA\",\r\n\t\t\t\"title\": \"control board damaged\",\r\n\t\t\t\"description\": \"Electronic control damage\",\r\n\t\t\t\"hint\": \"Check the control board\"\r\n\t\t}\r\n\t]\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n"
+ },
+ "url": "{{url}}/rest/v2/",
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "Send Measurement message",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\r\n\t\"content-spec\": \"urn:spec://eclipse.org/unide/measurement-message#v2\",\r\n\t\"device\": \r\n\t{\r\n\t\t\"deviceID\": \"a4927dad-58d4-4580-b460-79cefd56775b\"\r\n\t},\r\n\t\"measurements\": \r\n\t[\r\n\t\t{\r\n\t\t\t\"ts\": \"2002-05-30T09:30:10.123+02:00\",\r\n\t\t\t\"result\": \"NOK\",\r\n\t\t\t\"code\": \"0000 EE01\",\r\n\t\t\t\"series\": \r\n\t\t\t{\r\n\t\t\t\t\"$_time\": \r\n\t\t\t\t[\r\n\t\t\t\t\t0,\r\n\t\t\t\t\t23,\r\n\t\t\t\t\t24\r\n\t\t\t\t],\r\n\t\t\t\t\"temperature\": \r\n\t\t\t\t[\r\n\t\t\t\t\t45.4243,\r\n\t\t\t\t\t461.42342,\r\n\t\t\t\t\t44.2432\r\n\t\t\t\t],\r\n\t\t\t\t\"pressure\": \r\n\t\t\t\t[\r\n\t\t\t\t\t25.4243,\r\n\t\t\t\t\t26.42342,\r\n\t\t\t\t\t24.2432\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t}\r\n\t]\r\n}\r\n\r\n\r\n\r\n"
+ },
+ "url": "{{url}}/rest/v2/",
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "Send Process message",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\r\n \"content-spec\" : \"urn:spec://eclipse.org/unide/process-message#v2\",\r\n \"device\" : {\r\n \"deviceID\" : \"a4927dad-58d4-4580-b460-79cefd56775b\",\r\n \"operationalStatus\" : \"normal\",\r\n \"metaData\" : {\r\n \"swVersion\" : \"2.0.3.13\",\r\n \"swBuildId\" : \"41535\" \r\n }\r\n },\r\n \"part\" : {\r\n \"type\" : \"SINGLE\",\r\n \"partTypeID\" : \"F00VH07328\",\r\n \"partID\" : \"420003844\",\r\n \"result\" : \"NOK\",\r\n \"code\" : \"HUH289\",\r\n \"metaData\" : {\r\n \"toolId\" : \"32324-432143\"\r\n }\r\n },\r\n \"process\" : {\r\n \"externalProcessId\" : \"b4927dad-58d4-4580-b460-79cefd56775b\",\r\n \"ts\" : \"2002-05-30T09:30:10.123+02:00\",\r\n \"result\" : \"NOK\",\r\n \"shutoffPhase\" : \"phase 1\",\r\n \"program\" : {\r\n \"id\" : \"1\",\r\n \"name\" : \"Program 1\",\r\n \"lastChangedDate\" : \"2002-05-30T09:30:10.123+02:00\"\r\n },\r\n \"shutoffValues\" : {\r\n \"force\" : {\r\n \"ts\" : \"2002-05-30T09:30:11.123+02:00\",\r\n \"value\" : 24,\r\n \"upperError\" : 26,\r\n \"lowerError\" : 22\r\n },\r\n \"pressure\" : { \r\n \"value\" : 50,\r\n \"upperError\" : 52,\r\n \"lowerError\" : 48\r\n }\r\n },\r\n \"metaData\" : {\r\n \"name\" : \"Getriebedeckel verschrauben\"\r\n }\r\n },\r\n \"measurements\" : [\r\n {\r\n \"ts\" : \"2002-05-30T09:30:10.123+02:00\",\r\n \"phase\" : \"phasen name 2\",\r\n \"name\" : \"500 Grad links drehen\",\r\n \"result\" : \"NOK\",\r\n \"code\" : \"0000 EE01\",\r\n \"limits\" : {\r\n \"temperature\" : {\r\n \"upperError\" : 4444,\r\n \"lowerError\" : 44,\r\n \"upperWarn\" : 2222,\r\n \"lowerWarn\" : 46\r\n }\r\n },\r\n \"series\" : {\r\n \"time\" : [0, 23, 24],\r\n \"force\" : [26, 23, 24],\r\n \"pressure\" : [52.4, 46.32, 44.2432],\r\n \"temperature\" : [45.4243, 46.42342, 44.2432] \r\n }\r\n }\r\n ]\r\n}"
+ },
+ "url": "{{url}}/rest/v2/",
+ "description": ""
+ },
+ "response": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/servers/rest/assets/postman/unide.postman_environment.json b/servers/rest/assets/postman/unide.postman_environment.json
new file mode 100644
index 0000000..445fbe6
--- /dev/null
+++ b/servers/rest/assets/postman/unide.postman_environment.json
@@ -0,0 +1,22 @@
+{
+ "id": "e50cdb37-0599-3b44-7626-199a7461c9b1",
+ "name": "Unide DEV",
+ "values": [
+ {
+ "enabled": true,
+ "key": "url",
+ "value": "http://localhost:8090",
+ "type": "text"
+ },
+ {
+ "enabled": true,
+ "key": "influxurl",
+ "value": "http://localhost:8086",
+ "type": "text"
+ }
+ ],
+ "timestamp": 1513678751733,
+ "_postman_variable_scope": "environment",
+ "_postman_exported_at": "2018-01-05T13:50:26.508Z",
+ "_postman_exported_using": "Postman/5.5.0"
+}
\ No newline at end of file
diff --git a/servers/rest/pom.xml b/servers/rest/pom.xml
index 17f6dd9..180dbd2 100644
--- a/servers/rest/pom.xml
+++ b/servers/rest/pom.xml
@@ -1,148 +1,339 @@
-
-
- 4.0.0
- ppmp-server
- jar
-
-
-
- Eclipse Public License - Version 1.0
- http://www.eclipse.org/org/documents/epl-v10.php
-
-
-
- unide-server
-
-
-
- org.influxdb
- influxdb-java
- 2.5
-
-
- com.networknt
- json-schema-validator
- 0.1.7
-
-
- com.fasterxml.jackson.core
- jackson-core
- 2.8.6
-
-
- com.fasterxml.jackson.core
- jackson-databind
- 2.8.6
-
-
+
+
+ 4.0.0
+ ppmp-server
+ jar
+
+
+ unide-servers
+ org.eclipse.iot.unide.ppmp
+ 0.3.0-SNAPSHOT
+ ../
+
+
+
+
+ Eclipse Public License - Version 1.0
+ http://www.eclipse.org/org/documents/epl-v10.php
+
+
+
+
+ UTF-8
+
+ ${project.build.directory}/classes/webroot
+ 3.5.0
+ 2.7
+ 0.1.7
+ 2.8.6
+ 0.3.0-SNAPSHOT
+ 3.0.0-SNAPSHOT
+ 1.2.17
+ 42.1.4
+ 2.3.0
+
+
+ unide-server
+
+
+
+ repo.eclipse.org
+ Unide Repository - Releases
+ https://repo.eclipse.org/content/repositories/unide-releases/
+
+
+ repo.eclipse.org
+ Unide Repository - Snapshots
+ https://repo.eclipse.org/content/repositories/unide-snapshots/
+
+
+
+
+
org.eclipse.iot.unide.ppmp
ppmp-java-binding
- 1.0.0-SNAPSHOT
+ ${ppmpjavabinding.version}
+
+
+ org.eclipse.iot.unide.ppmp
+ ppmp-schema
+ ${ppmpschema.version}
+
+
+ org.influxdb
+ influxdb-java
+ ${influxdb.version}
- log4j
- log4j
- 1.2.17
+ com.networknt
+ json-schema-validator
+ ${jsonvaldiator.version}
- io.vertx
- vertx-web
- 3.4.1
-
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+
- com.googlecode.json-simple
- json-simple
- 1.1.1
-
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+ log4j
+ log4j
+ ${log4j.version}
+
- io.vertx
- vertx-unit
- 3.4.1
- test
-
+ io.vertx
+ vertx-web
+ ${vertx.version}
+
+
+ org.flywaydb
+ flyway-core
+ 5.0.7
+
+
+ org.apache.commons
+ commons-dbcp2
+ 2.2.0
+
+
+ org.postgresql
+ postgresql
+ ${postgres.version}
+
+
+ javax.xml.bind
+ jaxb-api
+ ${jaxb.version}
+
+
+ com.sun.xml.bind
+ jaxb-core
+ ${jaxb.version}
+
- commons-io
- commons-io
- 2.5
- test
-
+ com.sun.xml.bind
+ jaxb-impl
+ ${jaxb.version}
+
+
+
+
+ io.vertx
+ vertx-unit
+ ${vertx.version}
+ test
+
+
+ commons-io
+ commons-io
+ 2.5
+ test
+
junit
junit
4.12
test
-
-
-
-
-
- src/main/resources
-
- **/*.json
- **/*.properties
-
-
-
- src/test/resources
-
- **/*.json
-
-
-
-
-
- maven-compiler-plugin
- 3.5.1
-
- 1.8
- 1.8
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
- 2.3
-
-
- package
-
- shade
-
-
-
-
-
- io.vertx.core.Starter
- server.endpoints.RestEndpoints
-
-
-
- META-INF/services/io.vertx.core.spi.VerticleFactory
-
-
-
- ${project.build.directory}/${project.artifactId}-${project.version}-fat.jar
-
-
-
-
-
-
-
-
- unide-servers
- org.eclipse.iot.unide.ppmp
- 0.0.1
- ../
-
-
\ No newline at end of file
+
+ com.github.tomakehurst
+ wiremock
+ 2.11.0
+ test
+
+
+ com.jayway.restassured
+ rest-assured
+ 2.9.0
+ test
+
+
+ com.mockrunner
+ mockrunner-jdbc
+ 1.1.2
+ test
+
+
+ org.mockito
+ mockito-core
+ 2.13.0
+ test
+
+
+
+
+
+
+ eclipse_jar_signing
+
+ false
+
+ enableEclipseJarSigner
+
+
+
+
+ eclipse-repo
+ Eclipse CBI Repository
+
+ true
+
+
+ false
+
+ https://repo.eclipse.org/content/repositories/cbi-releases/
+
+
+
+
+
+ org.eclipse.cbi.maven.plugins
+ eclipse-jarsigner-plugin
+ 1.1.4
+
+ true
+
+
+
+ sign-jars
+ verify
+
+ sign
+
+
+
+
+
+
+
+
+
+
+
+
+ src/main/resources
+
+ **/*.json
+ **/*.properties
+ **/*.sql
+
+
+
+ src/test/resources
+
+ **/*.json
+
+
+
+ true
+ ${project.basedir}/src/main/resources
+ ${project.build.directory}
+
+ application_conf.json
+
+
+
+
+
+ maven-compiler-plugin
+ 3.5.1
+
+ 1.8
+ 1.8
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.1.0
+
+
+ package
+
+ shade
+
+
+
+
+
+ io.vertx.core.Launcher
+ org.eclipse.iot.unide.server.MainVerticle
+
+
+
+ META-INF/services/io.vertx.core.spi.VerticleFactory
+
+
+
+
+ false
+
+
+
+
+
+ org.asciidoctor
+ asciidoctor-maven-plugin
+ 1.5.6
+
+
+ org.asciidoctor
+ asciidoctorj-diagram
+ 1.5.4.1
+
+
+ org.asciidoctor
+ asciidoctorj-pdf
+ 1.5.0-alpha.16
+
+
+
+ src/main/docs/asciidoc
+ html5
+
+ asciidoctor-diagram
+
+
+
+
+ output-html
+ generate-resources
+
+ process-asciidoc
+
+
+ ${project.build.directory}/generated-docs/images
+ true
+ ${webroot}
+
+
+
+ generate-pdf-doc
+ generate-resources
+
+ process-asciidoc
+
+
+ pdf
+ ${project.build.directory}/generated-docs/images
+ true
+ ${webroot}
+
+
+
+
+
+
+
diff --git a/servers/rest/src/main/docs/asciidoc/diagramms/ppmp_message_proccessing.puml b/servers/rest/src/main/docs/asciidoc/diagramms/ppmp_message_proccessing.puml
new file mode 100644
index 0000000..280cbd3
--- /dev/null
+++ b/servers/rest/src/main/docs/asciidoc/diagramms/ppmp_message_proccessing.puml
@@ -0,0 +1,31 @@
+@startuml
+skinparam classFontColor red
+skinparam classFontSize 10
+skinparam classFontName Aapex
+
+participant "Client" as Client
+participant "RestVerticle" as RestVerticle
+participant "PpmpValidator" as PpmpValidator
+participant "EventBus" as EventBus
+participant "ReceiverVerticle" as ReceiverVerticle
+participant "Receiver" as Receiver
+participant "Database" as Database
+
+Client -> RestVerticle : POST: /rest/v2/
+RestVerticle -> PpmpValidator: ppmp json
+note left: if vallidation error then throw Exception
+
+RestVerticle <- PpmpValidator : PpmpEvent
+RestVerticle -> EventBus :PpmpEvent
+
+EventBus -> ReceiverVerticle : PpmpEvent
+ReceiverVerticle -> Receiver : PpmpEvent
+Receiver -> Database : write/...
+Receiver <- Database : success / failed
+ReceiverVerticle <- Receiver : success / failed
+EventBus <- ReceiverVerticle : success / failed
+RestVerticle <- EventBus : success / failed
+
+Client <- RestVerticle : success / failed
+
+@enduml
\ No newline at end of file
diff --git a/servers/rest/src/main/docs/asciidoc/documentation.adoc b/servers/rest/src/main/docs/asciidoc/documentation.adoc
new file mode 100644
index 0000000..bd46591
--- /dev/null
+++ b/servers/rest/src/main/docs/asciidoc/documentation.adoc
@@ -0,0 +1,566 @@
+= Unide PPMP Test Server
+:description: Documentation for the Unide REST Server
+:library: Asciidoctor
+:cip: Unide
+:api: API Specification
+ifdef::asciidoctor[]
+:source-highlighter: highlight.js
+endif::asciidoctor[]
+:idprefix:
+:toc: macro
+:data-uri:
+:icons: font
+:nofooter:
+:docinfo1:
+:stylesheet: ./styles.css
+:imagesdir: ./images
+
+[IMPORTANT]
+====
+For recent specification and news, go to https://eclipse.org/unide[Eclipse Unide project]
+====
+
+[[purpose]]
+.Purpose
+****
+This REST server is part of the https://eclipse.org/unide[Eclipse Unide project].
+Its main purpose is to showcase how PPMP messages can be validated against the
+schemas defined in the PPMP protocol and processed. The REST server provides an
+example use case, where PPMP protocol messages are persisted to an InfluxDB.
+Using a monitoring tool like Grafana the persisted data can be visualized
+afterwards.
+
+This document guides you through the architecture and the persistency functionality of the REST server.
+****
+
+== Getting started
+
+=== Download
+
+You'll find the latest builds of this server on the
+https://repo.eclipse.org/content/repositories/unide/org/eclipse/iot/unide/ppmp/ppmp-server/[Eclipse repository].
+The `ppmp-server-*.jar` can easily be downloaded and started as described below.
+
+=== Building and Running the Server
+
+To build the REST server run:
+
+[source,bash]
+mvn clean install
+
+After configuring the server as described below you can run it using
+
+[source,bash]
+java -jar ppmp-server--fat.jar -conf ./target/application_conf.json
+
+=== Configuration
+
+After building the project a configuration file is created in `./target/application.json`.
+Open this file and set `database-` and `http-` settings according to your needs.
+
+The file contains the following properties which should be overridden with the
+corresponding properties of your environment.
+
+[source,json]
+{
+ "http.port": 8090,
+ "persistence.enable" : true,
+ "persistence.system" : "sql",
+ "influxDb.url": "http://localhost:8086",
+ "influxDb.user": "root",
+ "influxDb.password": "root",
+ "sqlDB.driver": "org.postgresql.Driver", // optional, defaults to org.postgresql.Driver
+ "sqlDb.url" : "jdbc:postgresql://localhost:5432/unide_ppmp",
+ "sqlDb.user" : "postgres",
+ "sqlDb.password" : "password"
+}
+
+The following table contains detailed information about the properties.
+
+|===
+|Property | Required | Default | Description
+
+| http.port
+| Yes
+| -
+| The HTTP port on which the server will run.
+
+| persistence.enable
+| No
+| `true`
+| Enables persistence. If this property is set to `false`, only the validation endpoint can be used.
+
+| persistence.system
+| No
+| influxDb
+| The name of the database in which PPMP message type messages should be persisted.
+
+| influxDb.url
+| Yes
+| -
+| The connection URL of the InfluxDB instance.
+
+| influxDb.user
+| Yes
+| -
+| The username for InfluxDB.
+
+| influxDb.password
+| Yes
+| -
+| The password for InfluxDB.
+
+| sqlDb.url
+| Yes
+| -
+| The connection URL of the SQL DB instance.
+
+| sqlDb.user
+| Yes
+| -
+| The username for SQL DB.
+
+| sqlDb.password
+| Yes
+| -
+| The password for the SQL DB.
+|===
+
+
+== Service Overview
+
+
+=== REST Endpoints
+
+The server provides the following endpoints:
+
+|===
+|Route | Method | Description
+
+| `/rest/v2`
+| `POST`
+| Validate and save a PPMP protocol message of any type
+
+| `/rest/v2/validate`
+| `POST`
+| Validate a PPMP protocol message of any type
+
+| `/rest/v2/message`
+| `POST`
+| Validate and save a PPMP protocol message of type message
+
+| `/rest/v2/measurement`
+| `POST`
+| Validate and save a PPMP protocol message of type measurement
+
+| `/rest/v2/process`
+| `POST`
+| Validate and save a PPMP protocol message of type process
+
+|===
+
+=== Components
+
+The REST server is made up from these components:
+
+.Components
+
+|===
+|Component | Description
+
+|`RestVerticle`
+|Provides the REST endpoints for any interaction with the REST server
+
+|`PpmpValidator`
+|Validates JSON payloads against the PPMP protocol schema
+
+|Vert.x `EventBus`
+|The communication system to allow message passing between verticles.
+
+|`ReceiverVerticle`
+|Consumes events from the eventbus and delegates them to concrete receivers.
+
+|`InfluxDbReceiver`
+|Transforms PPMP messages to InfluxDB line protocol and sends them to InfluxDB over the REST API
+
+|`InfluxDB`
+|The database used to persist PPMP messages
+
+|===
+
+The interactions between those components are shown in the figure below.
+
+.Ppmp Message processing
+plantuml::./diagramms/ppmp_message_proccessing.puml["ppmp_message_proccessing",png ]
+
+
+== InfluxDB Schema Design
+
+All PPMP messages are written to the InfluxDB. The schema of the database differs for each message type.
+Each message type is persisted in its own database. The databases are created on application startup.
+The databases are:
+
+- Messages
+- Measurements
+- Processes
+
+InfluxDB tables are called `Measurement`. The `Measurement` s for the message types are:
+
+- ppmp_messages
+- ppmp_measurements
+- ppmp_processes
+
+The schemas for each message type are described below.
+
+=== PPMP Message
+
+This type is written to the `Messages` database. The Measurement name is `ppmp_message`.
+
+.PPMP Message
+|===
+|Attribute | Type | Name
+
+|`message.ts`
+|time
+|time
+
+|`device.DeviceID`
+|tag
+|deviceId
+
+|`message.messageCode`
+|tag
+|code
+
+|`message.origin`
+|field
+|origin
+
+|`message.severity`
+|field
+|severity
+
+|`message.title`
+|field
+|title
+
+|`message.description`
+|field
+|description
+
+|`message.hint`
+|field
+|hint
+
+|`message.type`
+|field
+|type
+|===
+
+=== PPMP Measurement
+
+This type is written to the `Measurements` database. The Measurement name is `ppmp_measurements`.
+
+
+.PPMP Measurement Message
+|===
+|Attribute | Type | Name
+
+|`ts + offset in series.*$_time*`
+|time
+|time
+
+|`device.DeviceID`
+|tag
+|deviceId
+
+|`series.*name_of_array*`
+|tag
+|measurement.point
+
+|`measurements.series.*name_of_array*.item`
+|field
+|value
+|===
+
+A PPMP Measurement message can contain one or more entries which will be persisted.
+
+The following example shows a measurement that contains four entries.
+
+[source,json]
+{
+ "content-spec": "urn:spec://eclipse.org/unide/measurement-message#v2",
+ "device":
+ {
+ "deviceID": "a4927dad-58d4-4580-b460-79cefd56775b"
+ },
+ "measurements":
+ [
+ {
+ "ts": "2002-05-30T09:30:10.123+02:00",
+ "result": "OK",
+ "series":
+ {
+ "$_time":
+ [
+ 0,
+ 23
+ ],
+ "temperature":
+ [
+ 52.4,
+ 46.32
+ ],
+ "pressure":
+ [
+ 26,
+ 20
+ ]
+ }
+ }
+ ]
+}
+
+
+The resulting entries of this measurement message are:
+
+|===
+|Time | Tags | Fields
+
+|2002-05-30T09:30:10.123+02:00
+|deviceId=12341231,measurementPoint=temperature
+|value=52.4
+
+|2002-05-30T09:30:10.146+02:00
+|deviceId=12341231,measurementPoint=temperature
+|value=46.32
+
+|2002-05-30T09:30:10.123+02:00
+|deviceId=12341231,measurementPoint=pressure
+|value=26
+
+|2002-05-30T09:30:10.1**46**+02:00
+|deviceId=12341231,measurementPoint=pressure
+|value=20
+
+|===
+
+Basically the following schema applies:
+.....
+ts + $_time[i] deviceId=device.deviceId,measurementPoint='value_array_name' value='value_array_name'[i]
+.....
+
+
+=== PPMP Proccess
+
+This type is written to the `Processes` database. The Measurement name is `ppmp_processes`.
+
+.PPMP Prccess
+|===
+|Attribute | Type | Name
+
+|`process.ts`
+|time
+|time
+
+|`device.DeviceID`
+|tag
+|deviceId
+
+|`process.program.id`
+|tag
+|programId
+
+|`process - payload as json`
+|field
+|payload
+|===
+
+== PostgresDB Schema Design
+
+Postgres provides the possibility to store time based data by using the Postgres timescale extension.
+
+https://www.timescale.com/[Timescale extension]
+
+The timescale extension is required for the rest server when using postgres as DB.
+The easiest way to setup Postgres with the timescale extension is using docker.
+
+http://docs.timescale.com/v0.7/getting-started/installation/linux/installation-docker[Timescale - Linux Docker]
+
+The unide rest-server does only need the connection string to a running database instance.
+All tables and timescale specific statements are created or executed on application startup of the rest-server,
+when they are not exists.
+
+All PPMP messages are written to the SQL DB.
+Each message is persisted in its own table.
+The tables are:
+
+- ppmp_messages
+- ppmp_measurements
+- ppmp_processes
+
+The schemas for each message type are described below.
+
+The raw SQL creation statements can be found in `org/eclipse/iot/unide/server/receiver/sql/migrations`
+
+=== PPMP Message
+
+This type is written to the `ppmp_messages` table.
+
+.PPMP Message
+|===
+|Attribute | Type | Name
+
+|`message.ts`
+|timestamp
+|time
+
+|`device.DeviceID`
+|text
+|deviceid
+
+|`message.messageCode`
+|text
+|code
+
+|`message.origin`
+|text
+|origin
+
+|`message.severity`
+|text
+|severity
+
+|`message.title`
+|text
+|title
+
+|`message.description`
+|text
+|description
+
+|`message.hint`
+|text
+|hint
+
+|`message.type`
+|text
+|type
+|===
+
+=== PPMP Measurement
+
+This type is written to the `ppmp_measurements` table.
+
+
+.PPMP Measurement Message
+|===
+|Attribute | Type | Name
+
+|`ts + offset in series.*$_time*`
+|timestamp
+|time
+
+|`device.DeviceID`
+|text
+|deviceId
+
+|`series.*name_of_array*`
+|text
+|measurement.point
+
+|`measurements.series.*name_of_array*.item`
+|decimal
+|value
+|===
+
+A PPMP Measurement message can contain one or more entries which will be persisted.
+
+The following example shows a measurement that contains four entries.
+
+[source,json]
+{
+ "content-spec": "urn:spec://eclipse.org/unide/measurement-message#v2",
+ "device":
+ {
+ "deviceID": "a4927dad-58d4-4580-b460-79cefd56775b"
+ },
+ "measurements":
+ [
+ {
+ "ts": "2002-05-30T09:30:10.123+02:00",
+ "result": "OK",
+ "series":
+ {
+ "$_time":
+ [
+ 0,
+ 23
+ ],
+ "temperature":
+ [
+ 52.4,
+ 46.32
+ ],
+ "pressure":
+ [
+ 26,
+ 20
+ ]
+ }
+ }
+ ]
+}
+
+
+The resulting entries of this measurement message are:
+
+|===
+|time | deviceid | measurementpoint | value
+
+|2002-05-30T09:30:10.123+02:00
+|deviceId=12341231
+|measurementPoint=temperature
+|value=52.4
+
+|2002-05-30T09:30:10.146+02:00
+|deviceId=12341231
+|measurementPoint=temperature
+|value=46.32
+
+|2002-05-30T09:30:10.123+02:00
+|deviceId=12341231
+|measurementPoint=pressure
+|value=26
+
+|2002-05-30T09:30:10.1**46**+02:00
+|deviceId=12341231
+|measurementPoint=pressure
+|value=20
+
+|===
+
+=== PPMP Proccess
+
+This type is written to the `Processes` database. The Measurement name is `ppmp_processes`.
+
+.PPMP Prccess
+|===
+|Attribute | Type | Name
+
+|`process.ts`
+|timestamp
+|time
+
+|`device.DeviceID`
+|test
+|deviceId
+
+|`process.program.id`
+|text
+|programId
+
+|`process - payload as json`
+|json
+|payload
+|===
diff --git a/servers/rest/src/main/docs/asciidoc/images/logo.svg b/servers/rest/src/main/docs/asciidoc/images/logo.svg
new file mode 100644
index 0000000..713a62c
--- /dev/null
+++ b/servers/rest/src/main/docs/asciidoc/images/logo.svg
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/servers/rest/src/main/docs/asciidoc/styles.css b/servers/rest/src/main/docs/asciidoc/styles.css
new file mode 100644
index 0000000..10446a9
--- /dev/null
+++ b/servers/rest/src/main/docs/asciidoc/styles.css
@@ -0,0 +1,128 @@
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;}
+a{background:transparent;}
+a:focus{outline:thin dotted;}
+a:active,a:hover{outline:0;}
+h1{font-size:2em;margin:.67em 0;}
+strong{font-weight:bold;}
+code,pre{font-family:monospace;font-size:1em;}
+pre{white-space:pre-wrap;}
+img{border:0;}
+table{border-collapse:collapse;border-spacing:0;}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;}
+html,body{font-size:100%;}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:Arial,Tahoma,Verdana;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;}
+a:hover{cursor:pointer;}
+img{max-width:100%;height:auto;}
+img{-ms-interpolation-mode:bicubic;}
+img{display:inline-block;vertical-align:middle;}
+.spread{width:100%;}
+.imageblock>.title,table.tableblock>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em;}
+div,ul,li,h1,h2,h3,.sidebarblock>.content>.title,pre,p,th,td{margin:0;padding:0;direction:ltr;}
+a{color:#2156a5;text-decoration:underline;line-height:inherit;}
+a:hover,a:focus{color:#1d4b8f;}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility;}
+h1,h2,h3,.sidebarblock>.content>.title{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#50237f;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em;}
+h1{font-size:2.125em;}
+h2{font-size:1.6875em;}
+h3,.sidebarblock>.content>.title{font-size:1.375em;}
+i{font-style:italic;line-height:inherit;}
+strong{font-weight:bold;line-height:inherit;}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9);}
+ul{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit;}
+ul{margin-left:1.5em;}
+@media only screen and (min-width:768px){
+h1,h2,h3,.sidebarblock>.content>.title{line-height:1.2;}
+h1{font-size:2.75em;}
+h2{font-size:2.3125em;}
+h3,.sidebarblock>.content>.title{font-size:1.6875em;}
+}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede;}
+table thead{background:#f7f8f7;font-weight:bold;}
+table thead tr th{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left;}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8);}
+table tr:nth-of-type(even){background:#f8f8f7;}
+table thead tr th,table tbody tr td,table tr td{display:table-cell;line-height:1.6;}
+h1,h2,h3,.sidebarblock>.content>.title{line-height:1.2;word-spacing:-.05em;}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word;}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed;}
+#header,#content{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em;}
+#header:before,#header:after,#content:before,#content:after{content:" ";display:table;}
+#header:after,#content:after{clear:both;}
+#content{margin-top:1.25em;}
+#content:before{content:none;}
+#header>h1{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0;background-image:url(images/logo.svg);background-repeat:no-repeat;background-position:right;border-bottom:5px solid #50237f;padding-bottom:8px;font-size:2.5rem;}
+@media screen and (max-width: 768px) {
+#header>h1:first-child{background:none;}
+}
+.sect1{padding-bottom:.625em;}
+@media only screen and (min-width:768px){
+.sect1{padding-bottom:1.25em;}
+}
+.sect1+.sect1{border-top:1px solid #efefed;}
+.imageblock,.literalblock,.listingblock{margin-bottom:1.25em;}
+.imageblock>.title,table.tableblock>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic;}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0;}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%;}
+.admonitionblock>table td.icon{text-align:center;width:80px;}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6);}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0;}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px;}
+.sidebarblock>:first-child{margin-top:0;}
+.sidebarblock>:last-child{margin-bottom:0;}
+.sidebarblock>.content>.title{color:#78be20;margin-top:0;text-align:center;}
+.sidebarblock>.content>:last-child>:last-child{margin-bottom:0;}
+.literalblock pre{background:#f7f7f8;}
+.literalblock pre,.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em;}
+@media only screen and (min-width:768px){
+.literalblock pre,.listingblock pre,.listingblock pre[class]{font-size:.90625em;}
+}
+@media only screen and (min-width:1280px){
+.literalblock pre,.listingblock pre,.listingblock pre[class]{font-size:1em;}
+}
+.listingblock pre.highlightjs{padding:0;}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px;}
+.listingblock>.content{position:relative;}
+.listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999;}
+.listingblock:hover code[data-lang]:before{display:block;}
+table.tableblock{max-width:100%;border-collapse:separate;}
+table.tableblock td>p:last-child{margin-bottom:0;}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede;}
+table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0;}
+table.grid-all>*>tr>.tableblock:last-child{border-right-width:0;}
+table.grid-all>tbody>tr:last-child>.tableblock{border-bottom-width:0;}
+table.frame-all{border-width:1px;}
+th.halign-left,td.halign-left{text-align:left;}
+th.valign-top,td.valign-top{vertical-align:top;}
+table thead th{font-weight:bold;}
+p.tableblock>code:only-child{background:none;padding:0;}
+p.tableblock{font-size:1em;}
+ul>li p{margin-bottom:.625em;}
+.imageblock>.title{margin-bottom:0;}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default;}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000;}
+th.tableblock,td.content{text-rendering:optimizeLegibility;}
+h1,h2,p,td.content{letter-spacing:-.01em;}
+p strong{letter-spacing:-.005em;}
+p,td.content{font-size:1.0625rem;}
+p{margin-bottom:1.25rem;}
+.sidebarblock p,p.tableblock{font-size:1em;}
+@media print{
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important;}
+a{color:inherit!important;text-decoration:underline!important;}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em;}
+pre,tr,img{page-break-inside:avoid;}
+thead{display:table-header-group;}
+p,td.content{font-size:1em;orphans:3;widows:3;}
+h2,h3,.sidebarblock>.content>.title{page-break-after:avoid;}
+.sidebarblock{background:none!important;}
+.sect1{padding-bottom:0!important;}
+.sect1+.sect1{border:0!important;}
+#header>h1:first-child{margin-top:1.25rem;}
+.listingblock code[data-lang]:before{display:block;}
+}
+/*! CSS Used from: https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css */
+.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}
+/*! CSS Used from: https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css */
+.hljs{display:block;overflow-x:auto;padding:0.5em;color:#333;background:#f8f8f8;}
+.hljs-number,.hljs-literal{color:#008080;}
+.hljs-string{color:#d14;}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/DependencyProvider.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/DependencyProvider.java
new file mode 100644
index 0000000..2b93ab7
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/DependencyProvider.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.function.Supplier;
+
+import javax.sql.DataSource;
+import org.apache.commons.dbcp2.BasicDataSource;
+import org.eclipse.iot.unide.server.receiver.Receiver;
+import org.eclipse.iot.unide.server.receiver.ReceiverFactory;
+
+import io.vertx.core.json.JsonObject;
+
+/**
+ * Provides methods to create needed dependencies.
+ */
+public class DependencyProvider {
+
+ private JsonObject config;
+
+ public DependencyProvider(JsonObject config) {
+ this.config = config;
+ }
+
+ public Receiver getReceiver() {
+ return createReceiver(config);
+ }
+
+ /**
+ * Creates a {@link Receiver} based on the property "persistence.system".
+ *
+ * If the property is sql - a sql receiver will returned. Default receiver
+ * is the influxDb receiver.
+ *
+ * @param config
+ * - the config object
+ * @return a receiver instance
+ */
+ private Receiver createReceiver(JsonObject config) {
+ String persistence = config.getString("persistence.system", "influxdb");
+ if (persistence.equals("sql")) {
+ return ReceiverFactory.createSqlReceiver(getDataSource());
+ }
+ return ReceiverFactory.createInfluxBbReceiver(config);
+ }
+
+ /**
+ * Returns a data source. The data source returns a Connection on every
+ * {@link DataSource#getConnection()}
+ *
+ * @return DataSource which produces a connection when
+ * {@link DataSource#getConnection()} is called.
+ */
+ public Supplier getConnection() {
+ DataSource ds = getDataSource();
+ return () -> {
+ // https://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html
+ // DataSource is the preferred way to get connections over
+ // DriverManager
+ try {
+ return ds.getConnection();
+ } catch (SQLException e) {
+ throw new RuntimeException("Failed to get connection", e);
+ }
+ };
+ }
+
+ public DataSource getDataSource() {
+ String user = config.getString("sqlDb.user");
+ String url = config.getString("sqlDb.url");
+ String driver = config.getString("sqlDb.driver");
+ String password = config.getString("sqlDb.password");
+ BasicDataSource dataSource = new BasicDataSource();
+ if (driver == null) {
+ driver = "org.postgresql.Driver";
+ }
+ try {
+ Class.forName(driver);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException("No driver for database found", e);
+ }
+ dataSource.setDriverClassName(driver);
+ dataSource.setUrl(url);
+ dataSource.setUsername(user);
+ dataSource.setPassword(password);
+ dataSource.setDefaultAutoCommit(false);
+ return dataSource;
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/MainVerticle.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/MainVerticle.java
new file mode 100644
index 0000000..6e5be57
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/MainVerticle.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server;
+
+import org.eclipse.iot.unide.server.receiver.Receiver;
+import org.eclipse.iot.unide.server.receiver.ReceiverVerticle;
+import org.eclipse.iot.unide.server.web.RestVerticle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import io.vertx.core.AbstractVerticle;
+import io.vertx.core.AsyncResult;
+import io.vertx.core.CompositeFuture;
+import io.vertx.core.DeploymentOptions;
+import io.vertx.core.Future;
+import io.vertx.core.Handler;
+
+public class MainVerticle extends AbstractVerticle {
+
+ private static final Logger LOG = LoggerFactory.getLogger( MainVerticle.class );
+
+ private DependencyProvider dependencyProvider;
+
+ public MainVerticle() {
+ }
+
+ public MainVerticle( DependencyProvider dependencyProvider ) {
+ this.dependencyProvider = dependencyProvider;
+ }
+
+ @Override
+ public void start( Future startFuture ) throws Exception {
+ if ( dependencyProvider == null ) {
+ dependencyProvider = new DependencyProvider( config() );
+ }
+
+ boolean enablePersistence = config().getBoolean( "persistence.enable", true );
+ if ( enablePersistence ) {
+ CompositeFuture deployFuture = CompositeFuture.all( deployRestVerticle(), deployReceiverVerticle() );
+ deployFuture.setHandler( deploymentHandler( startFuture ) );
+ } else {
+ Future future = deployRestVerticle();
+ future.setHandler( deploymentHandler( startFuture ) );
+ }
+ }
+
+ private Handler> deploymentHandler( Future startFuture ) {
+ return handler -> {
+ if ( handler.failed() ) {
+ LOG.error( "Failed to start application.", handler.cause() );
+ startFuture.fail( handler.cause() );
+ }
+ LOG.info( "Application started successful." );
+ startFuture.complete();
+ };
+ }
+
+ private DeploymentOptions getDeploymentOptions() {
+ return new DeploymentOptions().setConfig( config() );
+ }
+
+ private Future deployRestVerticle() {
+ Future future = Future.future();
+ vertx.deployVerticle( new RestVerticle(), getDeploymentOptions(), future.completer() );
+ return future;
+ }
+
+ private Future deployReceiverVerticle() {
+ Future future = Future.future();
+ Receiver receiver = dependencyProvider.getReceiver();
+ vertx.deployVerticle( new ReceiverVerticle( receiver ),
+ getDeploymentOptions().setWorker( true ), future.completer() );
+ return future;
+ }
+
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpEvent.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpEvent.java
new file mode 100644
index 0000000..de49492
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpEvent.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.ppmp;
+
+/**
+ * Contains the payload of a PPMP message and the type of the message.
+ *
+ * An object of this class can be send over the vert.x eventbus when the codec with {@link PpmpEventCodec} is registered.
+ */
+public class PpmpEvent {
+ private final PpmpType ppmpType;
+ private final String payload;
+
+ public PpmpEvent( PpmpType ppmpType, String payload ) {
+ this.ppmpType = ppmpType;
+ this.payload = payload;
+ }
+
+ public PpmpType getPpmpType() {
+ return ppmpType;
+ }
+
+ public String getPayload() {
+ return payload;
+ }
+
+ @Override
+ public String toString() {
+ return "PpmpEvent{" +
+ "ppmpType=" + ppmpType +
+ ", payload='" + payload + '\'' +
+ '}';
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpEventCodec.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpEventCodec.java
new file mode 100644
index 0000000..d199087
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpEventCodec.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.ppmp;
+
+import io.vertx.core.buffer.Buffer;
+import io.vertx.core.eventbus.MessageCodec;
+import io.vertx.core.json.JsonObject;
+
+/**
+ * Codec for {@code PpmpEvent}.
+ *
+ * This codec have to be registered on the vert.x eventBus to enable {@link PpmpEvent} as message types.
+ */
+public class PpmpEventCodec implements MessageCodec {
+
+ private static final String PPMP_TYPE = "ppmpType";
+ private static final String PPMP_PAYLOAD = "ppmpPayload";
+
+ @Override
+ public void encodeToWire( Buffer buffer, PpmpEvent ppmpEvent ) {
+ // Easiest ways is using JSON object
+ JsonObject jsonToEncode = new JsonObject();
+ jsonToEncode.put( PPMP_TYPE, ppmpEvent.getPpmpType().name() );
+ jsonToEncode.put( PPMP_PAYLOAD, ppmpEvent.getPayload() );
+
+ // Encode object to string
+ String jsonToStr = jsonToEncode.encode();
+
+ // Length of JSON: is NOT characters count
+ int length = jsonToStr.getBytes().length;
+
+ // Write data into given buffer
+ buffer.appendInt( length );
+ buffer.appendString( jsonToStr );
+ }
+
+ @Override
+ public PpmpEvent decodeFromWire( int position, Buffer buffer ) {
+ int pos = position;
+ int length = buffer.getInt( pos );
+ String jsonStr = buffer.getString( pos += 4, pos += length );
+ JsonObject contentJson = new JsonObject( jsonStr );
+ PpmpType ppmpType = PpmpType.valueOf( contentJson.getString( PPMP_TYPE ) );
+ String ppmpPayload = contentJson.getString( PPMP_PAYLOAD );
+ return new PpmpEvent( ppmpType, ppmpPayload );
+ }
+
+ @Override
+ public PpmpEvent transform( PpmpEvent ppmpEvent ) {
+ return ppmpEvent;
+ }
+
+ @Override
+ public String name() {
+ return this.getClass().getSimpleName();
+ }
+
+ @Override
+ public byte systemCodecID() {
+ return -1;
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpSpecDictionary.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpSpecDictionary.java
new file mode 100644
index 0000000..012603f
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpSpecDictionary.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.ppmp;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.bind.ValidationException;
+
+/**
+ * Ppmp Protocol types have to contain the type information of the message. The field content-spec contains this
+ * information.
+ *
+ * This class contains mappings to map the content-spec attribute in a ppmp - mesasge to internal {@link PpmpType}.
+ */
+class PpmpSpecDictionary {
+
+ /**
+ * Schemas are located in the ppmp-schema dependency.
+ */
+ private static final String ROOT_SCHEMA_LOCATION = "org/eclipse/iot/unide/ppmp/v2/";
+ private static final String MESSAGES_SCHEMA_LOCATION = ROOT_SCHEMA_LOCATION + "message_schema.json";
+ private static final String MEASUREMENTS_SCHEMA_LOCATION = ROOT_SCHEMA_LOCATION + "measurement_schema.json";
+ private static final String PROCESSES_SCHEMA_LOCATION = ROOT_SCHEMA_LOCATION + "process_schema.json";
+
+ private PpmpSpecDictionary() {
+ }
+
+ /**
+ * Map for content-spec and the JSON-schema to use
+ */
+ private static Map CONTENT_SPEC_MAPPING;
+
+ static {
+ Map tmp = new HashMap();
+ tmp.put( "urn:spec://eclipse.org/unide/machine-message#v2", PpmpType.MESSAGE );
+ tmp.put( "urn:spec://bosch.com/ppm/machine-message#v2", PpmpType.MESSAGE );
+ tmp.put( "urn:spec://eclipse.org/unide/measurement-message#v2", PpmpType.MEASUREMENT );
+ tmp.put( "urn:spec://bosch.com/ppm/measurement-message#v2", PpmpType.MEASUREMENT );
+ tmp.put( "urn:spec://eclipse.org/unide/process-message#v2", PpmpType.PROCESS );
+ tmp.put( "urn:spec://bosch.com/ppm/process-message#v2", PpmpType.PROCESS );
+ CONTENT_SPEC_MAPPING = tmp;
+ }
+
+ /**
+ * Returns the resource name for the given type
+ *
+ * @param ppmpType - to get the resource for
+ * @return the resource name
+ */
+ static String getResourceName( PpmpType ppmpType ) {
+ switch ( ppmpType ) {
+ case MESSAGE:
+ return MESSAGES_SCHEMA_LOCATION;
+ case MEASUREMENT:
+ return MEASUREMENTS_SCHEMA_LOCATION;
+ case PROCESS:
+ return PROCESSES_SCHEMA_LOCATION;
+ default:
+ throw new IllegalArgumentException( "Unknown type '" + ppmpType + "'" );
+ }
+ }
+
+ /**
+ * @param contentSpec - the content-spec value
+ * @return the corresponding type for given contentSpec
+ */
+ static PpmpType getPpmpType( String contentSpec ) throws ValidationException {
+ PpmpType ppmpType = CONTENT_SPEC_MAPPING.get( contentSpec );
+ if ( ppmpType == null ) {
+ throw new ValidationException( "For contentSpec '" + contentSpec + "' no type mapping exists" );
+ }
+ return ppmpType;
+ }
+
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpType.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpType.java
new file mode 100644
index 0000000..50e12a5
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpType.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.ppmp;
+
+/**
+ * Represents PPMP - Protocol types
+ */
+public enum PpmpType {
+ /**
+ * PPMP-Message type
+ */
+ MESSAGE,
+ /**
+ * PPMP-Measurement type
+ */
+ MEASUREMENT,
+ /**
+ * PPMP-Process type
+ */
+ PROCESS
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpValidator.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpValidator.java
new file mode 100644
index 0000000..199a430
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/ppmp/PpmpValidator.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.ppmp;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Set;
+
+import javax.xml.bind.ValidationException;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.networknt.schema.JsonSchema;
+import com.networknt.schema.JsonSchemaFactory;
+import com.networknt.schema.ValidationMessage;
+
+/**
+ * Validates a JSON-String to a given PPMP-JSON schema
+ */
+public class PpmpValidator {
+
+ private PpmpValidator() {
+
+ }
+
+ /**
+ * Validates the PPMP JSON string to the specific schema
+ *
+ * @param ppmpJson PPMP message as JSON string
+ * @throws ValidationException - when given json is not valid ppmp message
+ */
+ public static PpmpEvent validate( String ppmpJson ) throws ValidationException {
+ JsonNode jsonNode = toJsonNode( ppmpJson );
+ PpmpType ppmpType = getPpmpType( ppmpJson );
+ Set messages = validate( ppmpType, jsonNode );
+ if ( messages.size() == 0 ) {
+ return new PpmpEvent( ppmpType, ppmpJson );
+ }
+ throw new ValidationException( buildValidationFailedMessage( messages ) );
+ }
+
+ public static PpmpType getPpmpType( String ppmpJson ) throws ValidationException {
+ return getPpmpType( toJsonNode( ppmpJson ) );
+ }
+
+ private static JsonNode toJsonNode( String ppmpJson ) {
+ String jsonToConvert = ppmpJson.replace( "content_spec", "content-spec" );
+ try {
+ return new ObjectMapper().readTree( jsonToConvert );
+ } catch ( IOException e ) {
+ throw new RuntimeException( e );
+ }
+ }
+
+ private static PpmpType getPpmpType( JsonNode ppmpJson ) throws ValidationException {
+ JsonNode contentSpec = ppmpJson.get( "content-spec" );
+ if ( null == contentSpec ) {
+ throw new ValidationException( "Attribute content-spec is required" );
+ }
+ return PpmpSpecDictionary.getPpmpType( contentSpec.textValue() );
+ }
+
+ private static String buildValidationFailedMessage( Set messages ) {
+ ObjectNode jNode = new ObjectMapper().createObjectNode();
+ StringBuilder message = new StringBuilder();
+ for ( ValidationMessage validationMessage : messages ) {
+ jNode.put( validationMessage.getMessage().replace( "$.", "" ).split( ": " )[0],
+ validationMessage.getMessage().replace( "$.", "" ).split( ": " )[1] );
+ }
+ message.append( jNode );
+ return message.toString();
+ }
+
+ private static Set validate( PpmpType ppmpType, JsonNode jsonToValidate ) {
+ try {
+ JsonSchemaFactory jsonSchemafactory = new JsonSchemaFactory();
+ JsonSchema jsonSchema = jsonSchemafactory.getSchema( getSchemaResource( ppmpType ) );
+ return jsonSchema.validate( jsonToValidate );
+ } catch ( IOException ex ) {
+ throw new RuntimeException( ex );
+ }
+ }
+
+ private static String getSchemaResource( PpmpType ppmpType ) throws IOException {
+ String resourceName = PpmpSpecDictionary.getResourceName( ppmpType );
+ InputStream resource = PpmpValidator.class.getClassLoader()
+ .getResourceAsStream( PpmpSpecDictionary.getResourceName( ppmpType ) );
+ if ( resource == null ) {
+ throw new FileNotFoundException( "File " + resourceName + " not found." );
+ }
+ return readFromInputStream( resource );
+ }
+
+ private static String readFromInputStream( InputStream inputStream )
+ throws IOException {
+ StringBuilder resultStringBuilder = new StringBuilder();
+ try ( BufferedReader br
+ = new BufferedReader( new InputStreamReader( inputStream ) ) ) {
+ String line;
+ while ( (line = br.readLine()) != null ) {
+ resultStringBuilder.append( line ).append( "\n" );
+ }
+ }
+ return resultStringBuilder.toString();
+ }
+}
\ No newline at end of file
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/PpmpEventReceiver.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/PpmpEventReceiver.java
new file mode 100644
index 0000000..99eaead
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/PpmpEventReceiver.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver;
+
+import java.util.function.Consumer;
+
+import org.eclipse.iot.unide.ppmp.PPMPPackager;
+import org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper;
+import org.eclipse.iot.unide.ppmp.messages.MessagesWrapper;
+import org.eclipse.iot.unide.ppmp.process.ProcessWrapper;
+import org.eclipse.iot.unide.server.ppmp.PpmpEvent;
+import org.eclipse.iot.unide.server.ppmp.PpmpType;
+
+/**
+ * Base class for {@link Receiver} implementations.
+ * {@link PpmpEvent} payloads are converted and delegated to the corresponding consumers.
+ * The consumer implementations have to be provided by the implementation classes.
+ */
+public abstract class PpmpEventReceiver implements Receiver{
+
+ private PPMPPackager ppmpMapper;
+
+ public PpmpEventReceiver(PPMPPackager ppmpMapper){
+ this.ppmpMapper = ppmpMapper;
+ }
+
+ @Override
+ public void handle( PpmpEvent ppmpEvent ) throws ReceiverException {
+ try {
+ PpmpType ppmpType = ppmpEvent.getPpmpType();
+ String ppmpPayload = ppmpEvent.getPayload();
+ switch ( ppmpEvent.getPpmpType() ) {
+ case MESSAGE:
+ MessagesWrapper messagesWrapper = ppmpMapper.getMessagesBean( ppmpPayload );
+ getMessagesConsumer().accept( messagesWrapper );
+ break;
+ case MEASUREMENT:
+ MeasurementsWrapper measurementsWrapper = ppmpMapper.getMeasurementsBean( ppmpPayload );
+ getMeasurementsConsumer().accept( measurementsWrapper );
+ break;
+ case PROCESS:
+ ProcessWrapper processWrapper = ppmpMapper.getProcessesBean( ppmpPayload );
+ getProcessesConsumer().accept( processWrapper );
+ break;
+ default:
+ throw new IllegalArgumentException( "Unknown type '" + ppmpType + "'" );
+ }
+ } catch ( Exception e ) {
+ throw new ReceiverException( "Failed to handle message", e );
+ }
+ }
+
+ protected abstract Consumer getMessagesConsumer();
+ protected abstract Consumer getMeasurementsConsumer();
+ protected abstract Consumer getProcessesConsumer();
+
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/Receiver.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/Receiver.java
new file mode 100644
index 0000000..3bed65e
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/Receiver.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver;
+
+import org.eclipse.iot.unide.server.ppmp.PpmpEvent;
+
+/**
+ * Handles {@link PpmpEvent}
+ */
+public interface Receiver {
+ /**
+ * Called on application startup to do init tasks.
+ *
+ * @throws ReceiverException - When something went wrong during the init
+ */
+ void init() throws ReceiverException;
+
+ /**
+ * Handles the given event
+ *
+ * @param event - The event to handle
+ * @throws ReceiverException - When something went wrong during the processing
+ */
+ void handle( PpmpEvent event ) throws ReceiverException;
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/ReceiverException.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/ReceiverException.java
new file mode 100644
index 0000000..24de414
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/ReceiverException.java
@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver;
+
+/**
+ * Custom exception for {@link Receiver}.
+ */
+public class ReceiverException extends Exception {
+ public ReceiverException( String message, Throwable cause ) {
+ super( message, cause );
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/ReceiverFactory.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/ReceiverFactory.java
new file mode 100644
index 0000000..6da0e9c
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/ReceiverFactory.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver;
+
+import javax.sql.DataSource;
+
+import org.eclipse.iot.unide.server.receiver.influxdb.InfluxDbReceiver;
+import org.eclipse.iot.unide.server.receiver.sql.SqlDbReceiver;
+
+import io.vertx.core.json.JsonObject;
+
+/**
+ * Factory class for creation of {@link Receiver}
+ */
+public final class ReceiverFactory {
+
+ /**
+ * Creates an {@link Receiver} backed by InfluxDB as persistence.
+ *
+ * @param config the InfluxDB configs
+ * @return a {@link Receiver} backed by InfluxDB as persistence
+ */
+ public static Receiver createInfluxBbReceiver( JsonObject config ) {
+ return new InfluxDbReceiver( config );
+ }
+
+ /**
+ * Creates an {@link Receiver} backed by SQL DB as persistence.
+ *
+ * @param dataSourceSupplier a supplier for retrieving the db parameter
+ * @return a {@link Receiver} backed by SQL DB as persistence
+ */
+ public static Receiver createSqlReceiver( DataSource dataSource ) {
+ return new SqlDbReceiver( dataSource );
+ }
+
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/ReceiverVerticle.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/ReceiverVerticle.java
new file mode 100644
index 0000000..a3004b3
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/ReceiverVerticle.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver;
+
+import org.apache.log4j.Logger;
+import org.eclipse.iot.unide.server.ppmp.PpmpEvent;
+import org.eclipse.iot.unide.server.web.Addresses;
+import org.eclipse.iot.unide.server.web.RestVerticle;
+
+import io.vertx.core.AbstractVerticle;
+import io.vertx.core.Future;
+import io.vertx.core.eventbus.Message;
+
+/**
+ * Verticle which subscribes to {@link Addresses#SEND_PPMP_EVENT} and processes {@link PpmpEvent}
+ */
+public class ReceiverVerticle extends AbstractVerticle {
+ private static final Logger LOG = Logger.getLogger( RestVerticle.class );
+
+ private final Receiver receiver;
+
+
+ public ReceiverVerticle( Receiver receiver ) {
+ this.receiver = receiver;
+ }
+
+ @Override
+ public void start( Future startFuture ) throws Exception {
+ try {
+ receiver.init();
+ registerEventPpmpMessageConsumer();
+ startFuture.complete();
+ } catch ( Exception e ) {
+ startFuture.fail( e );
+ throw new RuntimeException( "Failed to start " + ReceiverVerticle.class.getName(), e );
+ }
+ }
+
+ private void registerEventPpmpMessageConsumer() {
+ vertx.eventBus().consumer( Addresses.SEND_PPMP_EVENT, ( Message message ) -> {
+ PpmpEvent ppmpEvent = message.body();
+ try {
+ receiver.handle( ppmpEvent );
+ message.reply( "Received" );
+ } catch ( ReceiverException e ) {
+ LOG.error( "Failed to handle message with type '" + ppmpEvent.getPpmpType() + "'", e);
+ message.fail( 500, e.getMessage() );
+ }
+ } );
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/AbstractInfluxDbConsumer.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/AbstractInfluxDbConsumer.java
new file mode 100644
index 0000000..1e88f9d
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/AbstractInfluxDbConsumer.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.influxdb;
+
+import java.util.function.Consumer;
+
+import org.influxdb.InfluxDB;
+
+/**
+ * Base class for influxDb {@link Consumer}
+ *
+ * @param - Type of Object to consume
+ */
+abstract class AbstractInfluxDbConsumer implements Consumer {
+ private InfluxDB influxDB;
+ private String databaseName;
+
+ /**
+ * @param influxDB - the influxDb instance
+ * @param databaseName - the name of the database to use for this {@link Consumer}
+ */
+ AbstractInfluxDbConsumer( InfluxDB influxDB, String databaseName ) {
+ this.influxDB = influxDB;
+ this.databaseName = databaseName;
+ }
+
+ /**
+ * @return the database name
+ */
+ String getDatabaseName() {
+ return databaseName;
+ }
+
+ /**
+ * @return the influxDb instanz
+ */
+ InfluxDB getInfluxDb() {
+ return influxDB;
+ }
+
+ /**
+ * @param object - object to check
+ * @return true when given object is not null
+ */
+ static boolean isNotNull( Object object ) {
+ return null != object;
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/InfluxDbProperties.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/InfluxDbProperties.java
new file mode 100644
index 0000000..e3414dd
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/InfluxDbProperties.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.influxdb;
+
+import io.vertx.core.json.JsonObject;
+
+/**
+ * Represents influxDb properties
+ */
+class InfluxDbProperties {
+ static final String MESSAGES_DB_NAME = "Messages";
+ static final String MEASUREMENTS_DB_NAME = "Measurements";
+ static final String PROCESSES_DB_NAME = "Processes";
+
+ final String url;
+ final String user;
+ final String password;
+
+ InfluxDbProperties( JsonObject configuration ) {
+ this.url = configuration.getString( "influxDb.url" );
+ this.user = configuration.getString( "influxDb.user" );
+ this.password = configuration.getString( "influxDb.password" );
+ }
+
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/InfluxDbReceiver.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/InfluxDbReceiver.java
new file mode 100644
index 0000000..c391e21
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/InfluxDbReceiver.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.influxdb;
+
+import java.io.IOException;
+import java.util.function.Consumer;
+
+import org.apache.log4j.Logger;
+import org.eclipse.iot.unide.ppmp.PPMPPackager;
+import org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper;
+import org.eclipse.iot.unide.ppmp.messages.MessagesWrapper;
+import org.eclipse.iot.unide.ppmp.process.ProcessWrapper;
+import org.eclipse.iot.unide.server.receiver.PpmpEventReceiver;
+import org.eclipse.iot.unide.server.receiver.ReceiverException;
+import org.influxdb.InfluxDB;
+import org.influxdb.InfluxDBFactory;
+
+import io.vertx.core.json.JsonObject;
+import okhttp3.Interceptor;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okio.Buffer;
+
+/**
+ * Manages connections to InfluxDB
+ */
+public final class InfluxDbReceiver extends PpmpEventReceiver {
+
+ private InfluxDB influxDb;
+
+ public InfluxDbReceiver( JsonObject jsonObject ) {
+ super( new PPMPPackager() );
+ InfluxDbProperties influxDbProperties = new InfluxDbProperties( jsonObject );
+ this.influxDb = InfluxDBFactory
+ .connect( influxDbProperties.url, influxDbProperties.user, influxDbProperties.password,
+ new OkHttpClientFactory().createClient() );
+ }
+
+ @Override
+ public void init() throws ReceiverException {
+ influxDb.createDatabase( InfluxDbProperties.MESSAGES_DB_NAME );
+ influxDb.createDatabase( InfluxDbProperties.MEASUREMENTS_DB_NAME );
+ influxDb.createDatabase( InfluxDbProperties.PROCESSES_DB_NAME );
+ }
+
+ @Override
+ protected Consumer getMessagesConsumer() {
+ return new MachineMessageConsumer( influxDb, InfluxDbProperties.MESSAGES_DB_NAME );
+ }
+
+ @Override
+ protected Consumer getMeasurementsConsumer() {
+ return new MeasurementConsumer( influxDb, InfluxDbProperties.MEASUREMENTS_DB_NAME );
+ }
+
+ @Override
+ protected Consumer getProcessesConsumer() {
+ return new ProcessConsumer( influxDb, InfluxDbProperties.PROCESSES_DB_NAME );
+ }
+
+ private static class OkHttpClientFactory {
+ private static final Logger LOG = Logger.getLogger( InfluxDbReceiver.class );
+
+ OkHttpClient.Builder createClient() {
+ return new OkHttpClient.Builder().addInterceptor( getRequestLoggingInterceptor() );
+ }
+
+ private Interceptor getRequestLoggingInterceptor() {
+ return chain -> {
+ if ( LOG.isDebugEnabled() ) {
+ Request request = chain.request();
+ String body = bodyToString( request );
+ LOG.debug( "Url: '" + request.url() + "' Headers: '" + request.headers() + "' Body: '" + body + "'" );
+ }
+ return chain.proceed( chain.request() );
+ };
+ }
+
+ private static String bodyToString( final Request request ) {
+ if ( request.body() == null ) {
+ return "";
+ }
+ try {
+ final Request copy = request.newBuilder().build();
+ final Buffer buffer = new Buffer();
+ copy.body().writeTo( buffer );
+ return buffer.readUtf8();
+ } catch ( final IOException e ) {
+ return "Failed to extract body from request";
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/MachineMessageConsumer.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/MachineMessageConsumer.java
new file mode 100644
index 0000000..706676c
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/MachineMessageConsumer.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.influxdb;
+
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.iot.unide.ppmp.commons.Device;
+import org.eclipse.iot.unide.ppmp.messages.Message;
+import org.eclipse.iot.unide.ppmp.messages.MessagesWrapper;
+import org.influxdb.InfluxDB;
+import org.influxdb.dto.BatchPoints;
+import org.influxdb.dto.Point;
+import org.influxdb.dto.Point.Builder;
+
+/**
+ * Consumer class for Message
+ */
+class MachineMessageConsumer extends AbstractInfluxDbConsumer {
+
+ private static final String MEASUREMENT_NAME = "ppmp_messages";
+
+ MachineMessageConsumer(InfluxDB connection, String databaseName) {
+ super(connection, databaseName);
+ }
+
+ /**
+ * Inserts a single Message-Array with device information
+ *
+ * @param message
+ * Message-Array as PPMP java binding object
+ * @param device
+ * Device as PPMP java binding object
+ */
+ private void insert(Message message, Device device) {
+ BatchPoints batchPoints = BatchPoints.database(getDatabaseName()).consistency(InfluxDB.ConsistencyLevel.ALL)
+ .build();
+ Builder builder = Point.measurement(MEASUREMENT_NAME).time(message.getTimestamp().toInstant().toEpochMilli(),
+ TimeUnit.MILLISECONDS);
+
+ setTags(builder, message, device);
+ setFields(builder, message);
+
+ Point point = builder.build();
+ batchPoints.point(point);
+ getInfluxDb().write(batchPoints);
+ }
+
+ /**
+ * Sets the tag / index information in the db
+ *
+ * @param builder
+ * - a pointer to the database
+ * @param message
+ * the data of a single message
+ * @param device
+ * the device object of the payload
+ */
+ private void setTags(Builder builder, Message message, Device device) {
+ builder.tag("deviceId", device.getDeviceID());
+ builder.tag("code", message.getCode());
+ }
+
+ /**
+ * Sets other, non-indexed information in the db
+ *
+ * @param builder
+ * - a pointer to the database
+ * @param message
+ * the data of a single message
+ */
+ private void setFields(Builder builder, Message message) {
+ if (isNotNull(message.getOrigin())) {
+ builder.addField("origin", message.getOrigin());
+ }
+
+ if (isNotNull(message.getSeverity())) {
+ builder.addField("severity", message.getSeverity().name());
+ }
+
+ if (isNotNull(message.getTitle())) {
+ builder.addField("title", message.getTitle());
+ }
+
+ if (isNotNull(message.getDescription())) {
+ builder.addField("description", message.getDescription());
+ }
+
+ if (isNotNull(message.getHint())) {
+ builder.addField("hint", message.getHint());
+ }
+
+ if (isNotNull(message.getType())) {
+ builder.addField("type", message.getType().name());
+ }
+ }
+
+ @Override
+ public void accept(MessagesWrapper data) {
+ Device device = data.getDevice();
+ data.getMessages().forEach(message -> insert(message, device));
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/MeasurementConsumer.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/MeasurementConsumer.java
new file mode 100644
index 0000000..23f0985
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/MeasurementConsumer.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.influxdb;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.iot.unide.ppmp.commons.Device;
+import org.eclipse.iot.unide.ppmp.measurements.Measurements;
+import org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper;
+import org.eclipse.iot.unide.server.receiver.util.PpmpHelper;
+import org.influxdb.InfluxDB;
+import org.influxdb.dto.BatchPoints;
+import org.influxdb.dto.Point;
+import org.influxdb.dto.Point.Builder;
+
+/**
+ * Consumer class for Measurement objects
+ */
+class MeasurementConsumer extends AbstractInfluxDbConsumer {
+
+ private static final String MEASUREMENT_NAME = "ppmp_measurements";
+
+ private static final String DEVICE_ID = "deviceId";
+ private static final String MEASUREMENT_POINT = "measurementPoint";
+ private static final String MEASUREMENT_VALUE = "value";
+
+ MeasurementConsumer(InfluxDB influxDB, String databaseName) {
+ super(influxDB, databaseName);
+ }
+
+ private void insertMeasurements(Measurements measurements, Device device) {
+ BatchPoints batchPoints = BatchPoints.database(getDatabaseName()).consistency(InfluxDB.ConsistencyLevel.ALL)
+ .build();
+ List measurementValues = PpmpHelper.getMeasurementValues(measurements);
+ measurementValues.forEach(measurement -> {
+ Builder pointBuilder = Point.measurement(MEASUREMENT_NAME).time(measurement.getTime(),
+ TimeUnit.MILLISECONDS);
+ setTags(pointBuilder, measurement, device);
+ setFields(pointBuilder, measurement);
+ batchPoints.point(pointBuilder.build());
+ });
+ getInfluxDb().write(batchPoints);
+ }
+
+ /**
+ * Sets the tag / index information in the db
+ *
+ * @param builder
+ * a pointer to the database
+ * @param measurement
+ * a single measurement
+ * @param device
+ * the device object of the payload
+ */
+ private void setTags(Builder builder, PpmpHelper.MeasurementValue measurement, Device device) {
+ builder.tag(MEASUREMENT_POINT, measurement.getName());
+ builder.tag(DEVICE_ID, device.getDeviceID());
+ }
+
+ /**
+ * Sets other, non-indexed information in the db
+ *
+ * @param builder
+ * a pointer to the database
+ * @param measurement
+ * a single measurement
+ */
+ private void setFields(Builder builder, PpmpHelper.MeasurementValue measurement) {
+ builder.addField(MEASUREMENT_VALUE, measurement.getValue());
+ }
+
+ @Override
+ public void accept(MeasurementsWrapper data) {
+ Device device = data.getDevice();
+ data.getMeasurements().forEach(measurement -> insertMeasurements(measurement, device));
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/ProcessConsumer.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/ProcessConsumer.java
new file mode 100644
index 0000000..29bfc2f
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/influxdb/ProcessConsumer.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.influxdb;
+
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.iot.unide.ppmp.commons.Device;
+import org.eclipse.iot.unide.ppmp.process.Process;
+import org.eclipse.iot.unide.ppmp.process.ProcessWrapper;
+import org.eclipse.iot.unide.server.receiver.util.PpmpHelper;
+import org.influxdb.InfluxDB;
+import org.influxdb.dto.BatchPoints;
+import org.influxdb.dto.Point;
+import org.influxdb.dto.Point.Builder;
+
+/**
+ * Consumer class for Process
+ */
+class ProcessConsumer extends AbstractInfluxDbConsumer {
+
+ private static final String DEVICE_ID = "deviceId";
+ private static final String MEASUREMENT_NAME = "ppmp_processes";
+ private static final String PROGRAM_ID = "program";
+ private static final String PAYLOAD = "payload";
+
+ ProcessConsumer(InfluxDB influxDB, String databaseName) {
+ super(influxDB, databaseName);
+ }
+
+ /**
+ * Inserts the process data
+ *
+ * @param processWrapper
+ * The whole process message
+ */
+ private void insert(ProcessWrapper processWrapper) {
+
+ BatchPoints batchPointsProcess = BatchPoints.database(getDatabaseName())
+ .consistency(InfluxDB.ConsistencyLevel.ALL).build();
+
+ long startTime = processWrapper.getProcess().getTimestamp().toInstant().toEpochMilli();
+ Builder pointBuilder = Point.measurement(MEASUREMENT_NAME).time(startTime, TimeUnit.MILLISECONDS);
+
+ setTags(pointBuilder, processWrapper.getProcess(), processWrapper.getDevice());
+ setFields(pointBuilder, processWrapper);
+
+ batchPointsProcess.point(pointBuilder.build());
+ getInfluxDb().write(batchPointsProcess);
+ }
+
+ /**
+ * Sets the tag / index information in the db
+ *
+ * @param builder
+ * a pointer to the database
+ * @param process
+ * the process data
+ * @param device
+ * the device object of the payload
+ */
+ private void setTags(Builder builder, Process process, Device device) {
+ String programId = null;
+ if (isNotNull(process) && isNotNull(process.getProgram())) {
+ programId = process.getProgram().getId();
+ if (isNotNull(programId)) {
+ builder.tag(PROGRAM_ID, programId);
+ }
+ }
+ builder.tag(DEVICE_ID, device.getDeviceID());
+ }
+
+ /**
+ * Sets other, non-indexed information in the db
+ *
+ * @param builder
+ * a pointer to the database
+ * @param processWrapper
+ * the complete payload of the process Message
+ */
+ private void setFields(Builder builder, ProcessWrapper processWrapper) {
+ builder.addField(PAYLOAD, PpmpHelper.toJson(processWrapper));
+ }
+
+ @Override
+ public void accept(ProcessWrapper data) {
+ insert(data);
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/AbstractSqlConsumer.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/AbstractSqlConsumer.java
new file mode 100644
index 0000000..8ccd13a
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/AbstractSqlConsumer.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.sql;
+
+import java.util.function.Consumer;
+
+/**
+ * Base class for sql {@link Consumer}
+ *
+ * @param - Type of Object to consume
+ */
+abstract class AbstractSqlConsumer implements Consumer {
+
+ private final JdbcExecutorService executorService;
+
+ /**
+ * @param executorService - the executorService
+ */
+ AbstractSqlConsumer( JdbcExecutorService executorService ) {
+ this.executorService = executorService;
+ }
+
+ JdbcExecutorService getExecutorService() {
+ return executorService;
+ }
+
+ /**
+ * @param object - object to check
+ * @return true when given object is not null
+ */
+ static boolean isNotNull( Object object ) {
+ return null != object;
+ }
+
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/JdbcExecutorService.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/JdbcExecutorService.java
new file mode 100644
index 0000000..118e8eb
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/JdbcExecutorService.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.sql;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.flywaydb.core.Flyway;
+
+/**
+ * Service to execute JDBC statements. Exception handling and commits are done
+ * by this service.
+ *
+ * Provides method for execution of flyway changelog.
+ */
+public class JdbcExecutorService {
+
+ private static final String FLYWAY_BASE = "org/eclipse/iot/unide/server/receiver/sql/migrations";
+ private static final String FLYWAY_TABLE = "SCHEMA_VERSION";
+
+ private DataSource dataSource;
+
+ public JdbcExecutorService(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ /**
+ * The given runner will be executed by this method by passing a valid jdbc
+ * connection. The caller does not have handle connection related actions.
+ * Commit, close and exception handling is done by this method.
+ *
+ * @param runner
+ * executes the given runner
+ */
+ public void execute(ExecutorCommand runner) {
+ Connection connection = null;
+ try {
+ connection = getConnection();
+ connection.setAutoCommit(false);
+ runner.accept(connection);
+ connection.commit();
+ } catch (Exception ex) {
+ throw new RuntimeException("Data access failed.", ex);
+ } finally {
+ try {
+ if (connection != null) {
+ connection.close();
+ }
+ } catch (SQLException e) {
+ // ignore
+ }
+ }
+ }
+
+ private Connection getConnection() throws SQLException {
+ return dataSource.getConnection();
+ }
+
+ @FunctionalInterface
+ public interface ExecutorCommand {
+ void accept(T t) throws Exception;
+ }
+
+ /**
+ * Executes the database changelog using flyway.
+ */
+ void executeChangeLog() {
+ Flyway flyway = new Flyway();
+ flyway.setTable(FLYWAY_TABLE);
+ flyway.setDataSource(dataSource);
+ flyway.setLocations(FLYWAY_BASE + "/" + getDbType());
+ flyway.setBaselineOnMigrate(true);
+ flyway.migrate();
+ }
+
+ /**
+ * Returns the database type, if known.
+ *
+ * @return String which is database type
+ */
+ public String getDbType() {
+ String dbName = "unknown";
+ String dbType;
+ try {
+ dbName = dataSource.getConnection().getMetaData().getDatabaseProductName();
+ } catch (SQLException e) {
+ throw new RuntimeException( "Failed to get connection", e );
+ }
+ switch (dbName) {
+ case "PostgreSQL":
+ case "MockDatabase":
+ dbType = "postgres";
+ break;
+ case "H2":
+ dbType = "h2";
+ break;
+ // case "Microsoft SQL Server":
+ // case "Oracle":
+ // case "MySQL":
+ // case "HSQL Database Engine":
+ default:
+ throw new RuntimeException("Unknown database '" + dbName + "'");
+ }
+ return dbType;
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/MachineMessageConsumer.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/MachineMessageConsumer.java
new file mode 100644
index 0000000..3c61741
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/MachineMessageConsumer.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.sql;
+
+import java.sql.PreparedStatement;
+import java.sql.Timestamp;
+
+import org.eclipse.iot.unide.ppmp.commons.Device;
+import org.eclipse.iot.unide.ppmp.messages.Message;
+import org.eclipse.iot.unide.ppmp.messages.MessagesWrapper;
+
+/**
+ * Consumer class for Message
+ */
+class MachineMessageConsumer extends AbstractSqlConsumer {
+
+ private static final String INSERT_MESSAGE =
+ "INSERT INTO ppmp_messages(time, deviceid, code, severity, title, description, hint, type) VALUES(?,?,?,?,?,?,?,?)";
+
+ /**
+ * @param executorService - the connection
+ */
+ MachineMessageConsumer( JdbcExecutorService executorService ) {
+ super( executorService );
+ }
+
+ @Override
+ public void accept( MessagesWrapper data ) {
+ Device device = data.getDevice();
+ data.getMessages().forEach( message -> insert( message, device ) );
+ }
+
+ /**
+ * Inserts a single Message-Array with device information
+ *
+ * @param message Message-Array as PPMP java binding object
+ * @param device Device as PPMP java binding object
+ */
+ private void insert( Message message, Device device ) {
+ getExecutorService().execute( connection -> {
+ PreparedStatement insertMessage = connection.prepareStatement( INSERT_MESSAGE );
+ long time = message.getTimestamp().toInstant().toEpochMilli();
+ insertMessage.setTimestamp( 1, new Timestamp( time ) );
+ insertMessage.setString( 2, device.getDeviceID() );
+ insertMessage.setString( 3, message.getCode() );
+ insertMessage.setString( 4, getSeverityName( message.getSeverity() ) );
+ insertMessage.setString( 5, message.getTitle() );
+ insertMessage.setString( 6, message.getDescription() );
+ insertMessage.setString( 7, message.getHint() );
+ insertMessage.setString( 8, getType( message.getType() ) );
+ insertMessage.executeUpdate();
+ } );
+ }
+
+ private String getSeverityName( Message.MessageSeverity messageSeverity ) {
+ return isNotNull( messageSeverity ) ? messageSeverity.name() : null;
+ }
+
+ private String getType( Message.MessageType messageType ) {
+ return isNotNull( messageType ) ? messageType.name() : null;
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/MeasurementConsumer.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/MeasurementConsumer.java
new file mode 100644
index 0000000..b7855ba
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/MeasurementConsumer.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.sql;
+
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.List;
+
+import org.eclipse.iot.unide.ppmp.commons.Device;
+import org.eclipse.iot.unide.ppmp.measurements.Measurements;
+import org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper;
+import org.eclipse.iot.unide.server.receiver.util.PpmpHelper;
+
+/**
+ * Consumer class for Measurement objects
+ */
+class MeasurementConsumer extends AbstractSqlConsumer {
+
+ private static final String INSERT_MEASUREMENT =
+ "INSERT INTO ppmp_measurements(time, deviceid, measurementpoint, value) VALUES(?,?,?,?)";
+
+ MeasurementConsumer( JdbcExecutorService executorService ) {
+ super( executorService );
+ }
+
+ @Override
+ public void accept( MeasurementsWrapper data ) {
+ Device device = data.getDevice();
+ data.getMeasurements().forEach( measurement -> insertSingleMeasurement( measurement, device ) );
+ }
+
+ private void insertSingleMeasurement( Measurements measurements, Device device ) {
+ List measurementValues = PpmpHelper.getMeasurementValues( measurements );
+ final String deviceID = device.getDeviceID();
+ getExecutorService().execute( connection ->
+ measurementValues.forEach( measurement -> {
+ try {
+ PreparedStatement statement = connection.prepareStatement( INSERT_MEASUREMENT );
+ statement.setTimestamp( 1, toTimeStamp( measurement.getTime() ) );
+ statement.setString( 2, deviceID );
+ statement.setString( 3, measurement.getName() );
+ statement.setDouble( 4, measurement.getValue() );
+ statement.executeUpdate();
+ } catch ( SQLException e ) {
+ throw new RuntimeException( e );
+ }
+ }
+ )
+ );
+ }
+
+ private static Timestamp toTimeStamp( long timestamp ) {
+ return new Timestamp( timestamp );
+ }
+
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/ProcessConsumer.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/ProcessConsumer.java
new file mode 100644
index 0000000..7890966
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/ProcessConsumer.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.sql;
+
+import java.sql.PreparedStatement;
+import java.sql.Timestamp;
+
+import org.eclipse.iot.unide.ppmp.commons.Device;
+import org.eclipse.iot.unide.ppmp.process.Process;
+import org.eclipse.iot.unide.ppmp.process.ProcessWrapper;
+import org.eclipse.iot.unide.server.receiver.util.PpmpHelper;
+
+/**
+ * Consumer class for Process
+ */
+class ProcessConsumer extends AbstractSqlConsumer {
+
+ private static final String INSERT_PROCESS = "INSERT INTO ppmp_processes(time, deviceid, programid, payload) VALUES(?,?,?,?)";
+ private static final String INSERT_PROCESS_PG = "INSERT INTO ppmp_processes(time, deviceid, programid, payload) VALUES(?,?,?,to_json(?::json))";
+
+ /**
+ * @param executorService
+ * - the connection
+ */
+ ProcessConsumer(JdbcExecutorService executorService) {
+ super(executorService);
+ }
+
+ @Override
+ public void accept(ProcessWrapper data) {
+ insertProcessData(data);
+ }
+
+ /**
+ * Inserts the process data
+ *
+ * @param processWrapper
+ * The whole process message
+ */
+ private void insertProcessData(ProcessWrapper processWrapper) {
+ getExecutorService().execute(connection -> {
+ Device device = processWrapper.getDevice();
+ String programId = getProgramId(processWrapper.getProcess());
+ long time = processWrapper.getProcess().getTimestamp().toInstant().toEpochMilli();
+
+ String sql = INSERT_PROCESS;
+ String dbType = getExecutorService().getDbType();
+ if (dbType == "postgres") {
+ sql = INSERT_PROCESS_PG;
+ }
+ PreparedStatement insertProcess = connection.prepareStatement(sql);
+ insertProcess.setTimestamp(1, new Timestamp(time));
+ insertProcess.setString(2, device.getDeviceID());
+ insertProcess.setString(3, programId);
+ insertProcess.setString(4, PpmpHelper.toJson(processWrapper));
+ insertProcess.executeUpdate();
+ });
+ }
+
+ private static String getProgramId(Process process) {
+ if (process == null || process.getProgram() == null) {
+ return null;
+ }
+ return process.getProgram().getId();
+ }
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/SqlDbReceiver.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/SqlDbReceiver.java
new file mode 100644
index 0000000..841007a
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/sql/SqlDbReceiver.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.sql;
+
+import java.util.function.Consumer;
+
+import javax.sql.DataSource;
+
+import org.eclipse.iot.unide.ppmp.PPMPPackager;
+import org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper;
+import org.eclipse.iot.unide.ppmp.messages.MessagesWrapper;
+import org.eclipse.iot.unide.ppmp.process.ProcessWrapper;
+import org.eclipse.iot.unide.server.receiver.PpmpEventReceiver;
+import org.eclipse.iot.unide.server.receiver.ReceiverException;
+
+/**
+ * This receiver is backed by a sql Database.
+ * Received {@link org.eclipse.iot.unide.server.ppmp.PpmpEvent}'s are persisted to sql.
+ */
+public class SqlDbReceiver extends PpmpEventReceiver {
+
+ private JdbcExecutorService executorService;
+
+ public SqlDbReceiver( DataSource dataSource ) {
+ super( new PPMPPackager() );
+ this.executorService = new JdbcExecutorService( dataSource );
+ }
+
+ @Override
+ public void init() throws ReceiverException {
+ try {
+ executorService.executeChangeLog();
+ } catch ( Exception e ) {
+ throw new ReceiverException( "Failed to execute changeset", e );
+ }
+ }
+
+ @Override
+ protected Consumer getMessagesConsumer() {
+ return new MachineMessageConsumer( executorService );
+ }
+
+ @Override
+ protected Consumer getMeasurementsConsumer() {
+ return new MeasurementConsumer( executorService );
+ }
+
+ @Override
+ protected Consumer getProcessesConsumer() {
+ return new ProcessConsumer( executorService );
+ }
+
+}
\ No newline at end of file
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/util/PpmpHelper.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/util/PpmpHelper.java
new file mode 100644
index 0000000..a04b1f2
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/receiver/util/PpmpHelper.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.receiver.util;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import org.eclipse.iot.unide.ppmp.PPMPPackager;
+import org.eclipse.iot.unide.ppmp.measurements.Measurements;
+
+/**
+ * Helper class for Ppmp related logic.
+ */
+public class PpmpHelper {
+
+ private static final String TIME_FIELD = "$_time";
+
+ /**
+ * Converts the given object to Json.
+ *
+ * For the convert {@link PPMPPackager} is used.
+ *
+ * @param object - the object to convert
+ * @return Json representation of given object
+ */
+ public static String toJson( Object object ) {
+ try {
+ PPMPPackager ppmpPackager = new PPMPPackager();
+ return ppmpPackager.getMessage( object );
+ } catch ( Exception ex ) {
+ throw new RuntimeException( "Failed to decode process to json", ex );
+ }
+ }
+
+ /**
+ * A single Measurement message can consist of multiple measurement-value entries.
+ * For instance a single Measurement could have 10 temperature measurements.
+ * This method extract's all measurement-value entries from the given measurement.
+ *
+ * @param measurement - the measurement to get measurement-value entries from
+ * @return list of all measurement-value entries from given measurement
+ */
+ public static List getMeasurementValues( Measurements measurement ) {
+ Stream>> seriesIterator = measurement.getSeriesMap().getSeries().entrySet()
+ .stream();
+ long startTime = measurement.getTimestamp().toInstant().toEpochMilli();
+ Map> values = seriesIterator.filter( entry -> !TIME_FIELD.equals( entry.getKey() ) )
+ .collect( Collectors
+ .toMap( Map.Entry::getKey, Map.Entry::getValue ) );
+ List timeLists = measurement.getSeriesMap().getSeries().get( TIME_FIELD );
+ return values.entrySet().stream().map( entry ->
+ IntStream.range( 0, timeLists.size() ).mapToObj( i -> {
+ Number measurementValue = entry.getValue().get( i );
+ Number timeOffset = timeLists.get( i );
+ long time = startTime + timeOffset.longValue();
+ return new MeasurementValue( entry.getKey(), time, measurementValue.doubleValue() );
+ } ) ).flatMap( stream -> stream )
+ .collect( Collectors.toList() );
+ }
+
+ /**
+ * Represents a single measurement-value entry.
+ */
+ public static class MeasurementValue {
+ private String name;
+ private long time;
+ private double value;
+
+ MeasurementValue( String name, long time, double value ) {
+ this.name = name;
+ this.time = time;
+ this.value = value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public long getTime() {
+ return time;
+ }
+
+ public double getValue() {
+ return value;
+ }
+ }
+
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/web/Addresses.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/web/Addresses.java
new file mode 100644
index 0000000..40f1307
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/web/Addresses.java
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.web;
+
+/**
+ * Constants for vert.x eventbus message addresses used in the application.
+ */
+public class Addresses {
+ /**
+ * Send's an ppmp - event.
+ */
+ public static final String SEND_PPMP_EVENT = "send_ppmp_event";
+}
diff --git a/servers/rest/src/main/java/org/eclipse/iot/unide/server/web/RestVerticle.java b/servers/rest/src/main/java/org/eclipse/iot/unide/server/web/RestVerticle.java
new file mode 100644
index 0000000..f348d64
--- /dev/null
+++ b/servers/rest/src/main/java/org/eclipse/iot/unide/server/web/RestVerticle.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.eclipse.iot.unide.server.web;
+
+import java.net.HttpURLConnection;
+import java.util.function.Predicate;
+
+import javax.xml.bind.ValidationException;
+
+import org.apache.log4j.Logger;
+import org.eclipse.iot.unide.server.ppmp.PpmpEvent;
+import org.eclipse.iot.unide.server.ppmp.PpmpEventCodec;
+import org.eclipse.iot.unide.server.ppmp.PpmpType;
+import org.eclipse.iot.unide.server.ppmp.PpmpValidator;
+
+import io.vertx.core.AbstractVerticle;
+import io.vertx.core.AsyncResult;
+import io.vertx.core.Handler;
+import io.vertx.core.eventbus.Message;
+import io.vertx.ext.web.Router;
+import io.vertx.ext.web.RoutingContext;
+import io.vertx.ext.web.handler.BodyHandler;
+import io.vertx.ext.web.handler.StaticHandler;
+
+public class RestVerticle extends AbstractVerticle {
+
+ private static final Logger LOG = Logger.getLogger( RestVerticle.class );
+
+ /**
+ * Method starts router for all web
+ */
+ @Override
+ public void start() {
+ vertx.eventBus().registerDefaultCodec( PpmpEvent.class, new PpmpEventCodec() );
+ Router router = Router.router( vertx );
+ router.route().handler( BodyHandler.create() );
+ router.post( "/rest/v2/" ).handler( this::handlePpmpRequest );
+ router.post( "/rest/v2/validate" ).handler( this::handleValidationRequest );
+ router.post( "/rest/v2/message" ).handler( this::handlePpmpMessageRequest );
+ router.post( "/rest/v2/measurement" ).handler( this::handlePpmpMeasurementRequest );
+ router.post( "/rest/v2/process" ).handler( this::handlePpmpProcessRequest );
+ router.get( "/*" ).handler( StaticHandler.create().setIndexPage( "documentation.html" ) );
+ vertx.createHttpServer().requestHandler( router::accept ).listen( config().getInteger( "http.port", 80 ) );
+ }
+
+ private void handleRequest( RoutingContext routingContext, Predicate condition ) {
+ String ppmpPayload = routingContext.getBodyAsString();
+ try {
+ PpmpType ppmpType = PpmpValidator.getPpmpType( ppmpPayload );
+ if ( condition.test( ppmpType ) ) {
+ PpmpEvent ppmpEvent = PpmpValidator.validate( ppmpPayload );
+ LOG.info( "Going to process ppmp message for type '" + ppmpEvent.getPpmpType() + "'." );
+ sendPpmpEvent( routingContext, ppmpEvent );
+ } else {
+ throw new ValidationException( "Type of message does not match this route." );
+ }
+ } catch ( ValidationException ex ) {
+ //If validation fails, HTTP-Response 400 is sent
+ if ( LOG.isDebugEnabled() ) {
+ LOG.debug( "Failed to process message: '" + ppmpPayload + "'", ex );
+ } else {
+ LOG.info( "Failed to process message due to validation failure. Validation Message is: '" + ex.getMessage()
+ + "'." );
+ }
+ //If validation fails, HTTP-Response 400 is sent
+ routingContext.response().setStatusCode( HttpURLConnection.HTTP_BAD_REQUEST )
+ .putHeader( "content-type", "text/plain" )
+ .end( ex.getMessage() );
+ } catch ( Exception ex ) {
+ LOG.error( "Failed to process '" + ppmpPayload + "'", ex );
+ routingContext.response().setStatusCode( HttpURLConnection.HTTP_INTERNAL_ERROR )
+ .putHeader( "content-type", "text/plain" )
+ .end( "Something went wrong." );
+ }
+ }
+
+ /**
+ * Handle all PPMP messages. This can be done as the message type (content-spec) attribute is present in the payload.
+ *
+ * @param routingContext - the routing context
+ */
+ private void handlePpmpRequest( RoutingContext routingContext ) {
+ handleRequest( routingContext, ppmpType -> true );
+ }
+
+ /**
+ * Handle all PPMP Messages of type {@link PpmpType#PROCESS}
+ *
+ * @param routingContext - the routing context
+ */
+ private void handlePpmpProcessRequest( RoutingContext routingContext ) {
+ handleRequest( routingContext, ppmpType -> ppmpType.equals( PpmpType.PROCESS ) );
+ }
+
+ /**
+ * Handle all PPMP Messages of type {@link PpmpType#MEASUREMENT}
+ *
+ * @param routingContext - the routing context
+ */
+ private void handlePpmpMeasurementRequest( RoutingContext routingContext ) {
+ handleRequest( routingContext, ppmpType -> ppmpType.equals( PpmpType.MEASUREMENT ) );
+ }
+
+ /**
+ * Handle all PPMP Messages of type {@link PpmpType#MESSAGE}
+ *
+ * @param routingContext - the routing context
+ */
+ private void handlePpmpMessageRequest( RoutingContext routingContext ) {
+ handleRequest( routingContext, ppmpType -> ppmpType.equals( PpmpType.MESSAGE ) );
+ }
+
+ /**
+ * Validates the payload. Data will not persisted. This endpoint can be used to only validate a PPMP Message.
+ *
+ * @param routingContext - the routing context
+ */
+ private void handleValidationRequest( RoutingContext routingContext ) {
+ String ppmpPayload = routingContext.getBodyAsString();
+ try {
+ PpmpEvent ppmpEvent = PpmpValidator.validate( ppmpPayload );
+ routingContext.response().setStatusCode( 200 ).putHeader( "content-type", "text/plain" )
+ .end( "Ppmp Message of type '" + ppmpEvent.getPpmpType() + "' is valid" );
+ LOG.info( "Message of type '" + ppmpEvent.getPpmpType() + "' successful validated." );
+ } catch ( ValidationException ex ) {
+ //If validation fails, HTTP-Response 400 is sent
+ if ( LOG.isDebugEnabled() ) {
+ LOG.debug( "Failed to process message: '" + ppmpPayload + "'", ex );
+ } else {
+ LOG.info( "Failed to process message due to validation failure. Validation Message is: '" + ex.getMessage()
+ + "'" );
+ }
+
+ routingContext.response().setStatusCode( 400 ).putHeader( "content-type", "text/plain" )
+ .end( ex.getMessage() );
+ }
+ }
+
+ /**
+ * Sends the PPMP Message over the EventBus. Consumers on the used EventBus address can process further.
+ *
+ * @param routingContext - the routing context
+ * @param ppmpEvent - the PPMP Event to send over eventbus
+ */
+ private void sendPpmpEvent( RoutingContext routingContext, PpmpEvent ppmpEvent ) {
+ vertx.eventBus().send( Addresses.SEND_PPMP_EVENT, ppmpEvent, (Handler>>) event -> {
+ if ( event.succeeded() ) {
+ LOG.info( "Message of type '" + ppmpEvent.getPpmpType() + "' successful processed." );
+ routingContext.response().putHeader( "content-type", "application/json" ).end();
+ } else {
+ Throwable throwable = event.cause();
+ LOG.error( "Failed to process message: '" + ppmpEvent.getPayload() + "'", throwable );
+ routingContext.response().setStatusCode( HttpURLConnection.HTTP_INTERNAL_ERROR )
+ .putHeader( "content-type", "text/plain" )
+ .end( "Failed to process " + ppmpEvent.toString() );
+
+ }
+ } );
+ }
+}
diff --git a/servers/rest/src/main/java/server/endpoints/RestEndpoints.java b/servers/rest/src/main/java/server/endpoints/RestEndpoints.java
deleted file mode 100644
index ed5941d..0000000
--- a/servers/rest/src/main/java/server/endpoints/RestEndpoints.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.endpoints;
-
-import java.io.IOException;
-import java.util.Base64;
-
-import javax.xml.bind.ValidationException;
-
-import org.apache.log4j.Logger;
-
-import io.vertx.core.AbstractVerticle;
-import io.vertx.ext.web.Router;
-import io.vertx.ext.web.RoutingContext;
-import io.vertx.ext.web.handler.BodyHandler;
-import server.endpoints.receivers.ReceiverController;
-import server.endpoints.receivers.IMachineMessageReceiver;
-import server.endpoints.receivers.IMeasurementMessageReceiver;
-import server.endpoints.receivers.IProcessMessageReceiver;
-import server.json.ExceptionMapper;
-import server.json.Validator;
-import server.persistency.db.ConnectionFactory;
-
-public class RestEndpoints extends AbstractVerticle {
-
- private Router router;
-
- /**
- * The logger.
- */
- private static final Logger LOG = Logger.getLogger( RestEndpoints.class );
-
- /**
- * Method starts router for all endpoints
- * @throws IOException
- */
- @Override
- public void start() throws IOException {
-
- try {
-
- router = Router.router(vertx);
-
- router.route().handler(BodyHandler.create());
-
- router.post("/rest/basicauth/*").handler(this::handleAuthentication);
- router.post("/rest/*").handler(this::checkValidation);
-
- router.post("/rest/v2/message").handler(this::handleMachineMessage);
- router.post("/rest/v2/measurement").handler(this::handleMeasurementMessage);
- router.post("/rest/v2/process").handler(this::handleProcessMessage);
- router.post("/ppm/v2/measurement").handler(this::handleMeasurementMessage);
-
- router.post("/rest/basicauth/v2/message").handler(this::handleMachineMessage);
- router.post("/rest/basicauth/v2/measurement").handler(this::handleMeasurementMessage);
- router.post("/rest/basicauth/v2/process").handler(this::handleProcessMessage);
-
- router.post("/influxdb").handler(this::handleInfluxDbActivation);
-
- router.get("/*").handler(this::handleGet);
-
- LOG.debug("Initializing DB-configuration");
- ConnectionFactory.getInstance().setConfiguration(config().getJsonObject("database"));
-
- vertx.createHttpServer().requestHandler(router::accept).listen(config().getInteger("http.port", 80));
- } catch (IOException e) {
- LOG.error(e.getMessage());
- throw e;
- }
-
-
- }
-
- /**
- * Method for handling all GET-Requests
- * @param routingContext
- */
- private void handleGet(RoutingContext routingContext) {
- routingContext.response().putHeader("content-type", "text/html").end("This is the service for validating PPMP-messages "+
-"The following endpoints are available "+
-""+
-"
" +
-"");
- }
-
- /**
- * Method for handling authentication
- * @param routingContext
- */
- private void handleAuthentication(RoutingContext routingContext) {
- //Getting authentication information from the header
- String[] authHeader = routingContext.request().getHeader("Authorization").split(" ");
-
- //Expected credentials are user: unide and password: unide
- String expectedHash = Base64.getEncoder().encodeToString("unide:unide".getBytes());
-
- //Supported authentication mechanism is basic authentication
- if (authHeader[0].equals("Basic")){
-
- if (authHeader[1].equals(expectedHash)){
- routingContext.next();
- }
- else{
- routingContext.response()
- .putHeader("content-type", "text/html")
- .setStatusCode(401)
- .end("Unauthorized");
- LOG.debug("HTTP-Status: " + routingContext.response().getStatusCode());
- }
-
- } else {
- routingContext.response()
- .putHeader("content-type", "text/html")
- .setStatusCode(401)
- .end("Unauthorized");
- LOG.debug("HTTP-Status: " + routingContext.response().getStatusCode());
- }
-
- }
-
- /**
- * Method for checking validation if parameter is set
- * @param routingContext
- */
- private void checkValidation(RoutingContext routingContext) {
-
- try {
-
- String validate = routingContext.request().getParam("validate");
-
- if (validate.toLowerCase().equals("true")){
- Validator.getInstance().validate(routingContext.getBodyAsString());
- }
- LOG.debug("HTTP-Status: " + routingContext.response().getStatusCode());
- routingContext.next();
-
- } catch (NullPointerException e) {
-
- //Validation parameter not set. No validation necessary
- routingContext.next();
-
- } catch (ValidationException e) {
-
- //If validation fails, HTTP-Response 400 is sent
- LOG.debug(e.getMessage());
- routingContext.response().setStatusCode(400).putHeader("content-type", "application/json").end(new ExceptionMapper().toResponse(e));
-
- } catch (IOException e) {
-
- LOG.debug(e.getMessage());
- respondText(routingContext,400,e.getMessage());
-
- }
-
- }
-
- /**
- * Method for handling machine messages and forwarding them to the specific receiver if this exists
- * @param routingContext
- */
- private void handleMachineMessage(RoutingContext routingContext) {
-
- try {
- for(IMachineMessageReceiver receiver : ReceiverController.getMachineMessageReceivers()){
- receiver.receive(routingContext.getBodyAsString());
- }
- } catch (IOException e) {
- respondText(routingContext,400,"Message not valid to store to database. Please check validation by adding parameter validate=\"true\" to your request! \n Error: " + e.getMessage());
- LOG.info("Error when handling Process Message", e);
- }
-
- routingContext.response().putHeader("content-type", "application/json").end();
-
- }
-
- /**
- * Method for handling measurement messages and forwarding them to the specific receiver if this exists
- * @param routingContext
- */
- private void handleMeasurementMessage(RoutingContext routingContext) {
-
- try {
- for(IMeasurementMessageReceiver receiver : ReceiverController.getMeasurementMessageReceivers()){
- receiver.receive(routingContext.getBodyAsString());
- }
- } catch (IOException e) {
- respondText(routingContext,400,"Message not valid to store to database. Please check validation by adding parameter validate=\"true\" to your request! \n Error: " + e.getMessage());
- LOG.info("Error when handling Process Message", e);
- }
-
- routingContext.response().putHeader("content-type", "application/json").end();
-
- }
-
- /**
- * Method for handling process messages and forwarding them to the specific receiver if this exists
- * @param routingContext
- * @throws IOException
- */
- private void handleProcessMessage(RoutingContext routingContext) {
-
- try {
- for(IProcessMessageReceiver receiver : ReceiverController.getProcessMessageReceivers()){
- receiver.receive(routingContext.getBodyAsString());
- }
- } catch (IOException e) {
- respondText(routingContext,400,"Message not valid to store to database. Please check validation by adding parameter validate=\"true\" to your request! \nError: " + e.getMessage());
- LOG.info("Error when handling Process Message", e);
- }
-
- routingContext.response().putHeader("content-type", "application/json").end("");
-
- }
-
- /**
- * Method for enabling or disabling the database connection to an influxDB
- * @param routingContext
- */
- private void handleInfluxDbActivation(RoutingContext routingContext) {
-
- try {
-
- String active = routingContext.request().getParam("active");
-
- if (active.toLowerCase().equals("true")){
-
- ReceiverController.addAllReceivers();
-
- respondText(routingContext,200,"InfluxDB activated");
-
- } else if (active.toLowerCase().equals("false")){
-
- ReceiverController.removeAllReceivers();
-
- respondText(routingContext,200,"InfluxDB deactivated");
-
- }
-
- } catch (NullPointerException e) {
-
- respondText(routingContext,400,"Parameter 'active' is missing");
-
- }
-
- }
-
- /**
- * Method to respond a plain text message
- * @param routingContext
- * @param statusCode
- * @param responseMessage
- */
- private void respondText(RoutingContext routingContext, int statusCode, String responseMessage){
- routingContext.response().putHeader("content-type", "text/plain").setStatusCode(statusCode).end(responseMessage);
- }
-}
diff --git a/servers/rest/src/main/java/server/endpoints/receivers/IMachineMessageReceiver.java b/servers/rest/src/main/java/server/endpoints/receivers/IMachineMessageReceiver.java
deleted file mode 100644
index 6b744c7..0000000
--- a/servers/rest/src/main/java/server/endpoints/receivers/IMachineMessageReceiver.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.endpoints.receivers;
-
-import java.io.IOException;
-
-public interface IMachineMessageReceiver {
- public void receive(String data) throws IOException;
-}
diff --git a/servers/rest/src/main/java/server/endpoints/receivers/IMeasurementMessageReceiver.java b/servers/rest/src/main/java/server/endpoints/receivers/IMeasurementMessageReceiver.java
deleted file mode 100644
index 6061012..0000000
--- a/servers/rest/src/main/java/server/endpoints/receivers/IMeasurementMessageReceiver.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.endpoints.receivers;
-
-import java.io.IOException;
-
-public interface IMeasurementMessageReceiver {
- public void receive(String data) throws IOException;
-}
diff --git a/servers/rest/src/main/java/server/endpoints/receivers/IProcessMessageReceiver.java b/servers/rest/src/main/java/server/endpoints/receivers/IProcessMessageReceiver.java
deleted file mode 100644
index c6baca8..0000000
--- a/servers/rest/src/main/java/server/endpoints/receivers/IProcessMessageReceiver.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.endpoints.receivers;
-
-import java.io.IOException;
-
-public interface IProcessMessageReceiver {
- public void receive(String data) throws IOException;
-}
diff --git a/servers/rest/src/main/java/server/endpoints/receivers/ReceiverController.java b/servers/rest/src/main/java/server/endpoints/receivers/ReceiverController.java
deleted file mode 100644
index 45a0879..0000000
--- a/servers/rest/src/main/java/server/endpoints/receivers/ReceiverController.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.endpoints.receivers;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import server.persistency.dao.MachineMessageDAO;
-import server.persistency.dao.MeasurementDAO;
-import server.persistency.dao.ProcessDAO;
-
-/**
- * Provides HTTP-endpoints for activate or deactivate storaging incoming data in a database
- */
-public class ReceiverController {
-
- private static Set machineMessageReceivers = new HashSet();
- private static Set measurementMessageReceivers = new HashSet();
- private static Set processMessageReceivers = new HashSet();
-
- /**
- * Adds influxDB-receivers for all message types
- */
- public static void addAllReceivers()
- {
- addMachineMessageReceiver(new MachineMessageDAO());
- addMeasurementMessageReceiver(new MeasurementDAO());
- addProcessMessageReceiver(new ProcessDAO());
- }
-
- /**
- * Adds influxDB-receivers for machine message
- */
- private static void addMachineMessageReceiver(IMachineMessageReceiver receiver) {
- if (!machineMessageReceivers.contains(receiver)){
- machineMessageReceivers.add(receiver);
- }
- }
-
- /**
- * Adds influxDB-receivers for measurement message
- */
- private static void addMeasurementMessageReceiver(IMeasurementMessageReceiver receiver) {
- if (!measurementMessageReceivers.contains(receiver)){
- measurementMessageReceivers.add(receiver);
- }
- }
-
- /**
- * Adds influxDB-receivers for process message
- */
- private static void addProcessMessageReceiver(IProcessMessageReceiver receiver) {
- if (!processMessageReceivers.contains(receiver)){
- processMessageReceivers.add(receiver);
- }
- }
-
- /**
- * Removes all influxDB-receivers
- */
- public static void removeAllReceivers(){
- measurementMessageReceivers.clear();
- processMessageReceivers.clear();
- machineMessageReceivers.clear();
- }
-
- /**
- * Gets influxDB-receivers for machine message
- */
- public static Set getMachineMessageReceivers(){
- return machineMessageReceivers;
- }
-
- /**
- * Gets influxDB-receivers for measurement message
- */
- public static Set getMeasurementMessageReceivers(){
- return measurementMessageReceivers;
- }
-
- /**
- * Gets influxDB-receivers for process message
- */
- public static Set getProcessMessageReceivers(){
- return processMessageReceivers;
- }
-}
\ No newline at end of file
diff --git a/servers/rest/src/main/java/server/json/ExceptionJson.java b/servers/rest/src/main/java/server/json/ExceptionJson.java
deleted file mode 100644
index cbdd25b..0000000
--- a/servers/rest/src/main/java/server/json/ExceptionJson.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.json;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * Thrown indicates that a JSON-string is incorrect to the schema
- */
-class ExceptionJson extends IllegalArgumentException{
-
- private static final long serialVersionUID = 1L;
-
- @JsonProperty("message")
- private String message;
-
- @JsonProperty("type")
- private String type;
-
- protected ExceptionJson(Exception e){
- this.message = e.getMessage();
- this.type = e.getClass().getName();
- }
-
- /**
- * Gets the exception message
- */
- public String getMessage() {
- return message;
- }
-
- /**
- * Sets the exception message
- */
- protected void setMessage(String message) {
- this.message = message;
- }
-
- /**
- * Gets the exception type
- */
- protected String getType() {
- return type;
- }
-
- /**
- * sets the exception type
- */
- protected void setType(String type) {
- this.type = type;
- }
-
-
-}
diff --git a/servers/rest/src/main/java/server/json/ExceptionMapper.java b/servers/rest/src/main/java/server/json/ExceptionMapper.java
deleted file mode 100644
index 8b26192..0000000
--- a/servers/rest/src/main/java/server/json/ExceptionMapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.json;
-
-import javax.xml.bind.ValidationException;
-
-import org.apache.log4j.Logger;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/*
- * Mapper for Parsing an exception to a JSON repsonse
- */
-public class ExceptionMapper
-{
- /**
- * The logger.
- */
- private static final Logger LOG = Logger.getLogger( ExceptionMapper.class );
-
- private static final transient ObjectMapper objectMapper = new ObjectMapper();
-
- /**
- * Building the Response including the header
- */
- public String toResponse(final Exception exception)
- {
- return getJson(exception);
- }
-
- /**
- * Parsing the exception content to a JSON Format
- */
- private String getJson(final Exception exception)
- {
- try
- {
- if (exception.getClass() == ValidationException.class)
- return ((ValidationException) exception).toString();
- else
- {
- ExceptionJson errorInfo = new ExceptionJson(exception);
-
- return objectMapper.writeValueAsString(errorInfo);
- }
-
- }
- catch (JsonProcessingException e)
- {
- LOG.info(e.getMessage());
- LOG.debug(e.getStackTrace());
- return "{\"message\":\"An internal error occurred\"}";
- }
- }
-}
\ No newline at end of file
diff --git a/servers/rest/src/main/java/server/json/Validator.java b/servers/rest/src/main/java/server/json/Validator.java
deleted file mode 100644
index 427b52c..0000000
--- a/servers/rest/src/main/java/server/json/Validator.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.json;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.xml.bind.ValidationException;
-
-import org.apache.log4j.Logger;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.networknt.schema.JsonSchema;
-import com.networknt.schema.JsonSchemaFactory;
-import com.networknt.schema.ValidationMessage;
-
-
-/**
- * Validates a JSON-String to a given PPMP-JSON schema
- */
-public class Validator {
-
- private static final Validator validator = new Validator();
- private static final Logger LOG = Logger.getLogger( Validator.class );
-
- /**
- * Map for content-spec and the JSON-schema to use
- */
- final static Map contentSpecMapping = new HashMap();
-
- static{
- contentSpecMapping.put("urn:spec://eclipse.org/unide/machine-message#v2", "message_schema_v2.json");
- contentSpecMapping.put("urn:spec://eclipse.org/unide/measurement-message#v2", "measurement_schema_v2.json");
- contentSpecMapping.put("urn:spec://eclipse.org/unide/process-message#v2", "process_message_v2.json");
- contentSpecMapping.put("urn:spec://bosch.com/ppm/process-message#v2", "process_message_v2.json");
- contentSpecMapping.put("urn:spec://bosch.com/ppm/measurement-message#v2", "measurement_schema_v2.json");
- contentSpecMapping.put("urn:spec://bosch.com/ppm/machine-message#v2", "message_schema_v2.json");
- contentSpecMapping.put("urn:spec://bosch.com/cindy/process-message#v2", "process_message_v2.json");
- contentSpecMapping.put("urn:spec://bosch.com/cindy/measurement-message#v2", "measurement_schema_v2.json");
- contentSpecMapping.put("urn:spec://bosch.com/cindy/machine-message#v2", "message_schema_v2.json");
- }
-
- private Validator() {
-
- }
-
- public static Validator getInstance() {
- return validator;
- }
-
- /**
- * Converts a text to a schema object
- * @param schemaText Schema as string in JSON format
- * @return schema object
- * @throws IOException
- */
- private JsonSchema getSchema(String schemaText) throws IOException
- {
- JsonSchemaFactory jsonSchemafactory = new JsonSchemaFactory();
-
- JsonSchema jsonSchema = jsonSchemafactory.getSchema(schemaText);
-
- return jsonSchema;
- }
-
- /**
- * Validates the PPMP JSON string to the specific schema
- * @param jsonText PPMP message as JSON string
- * @throws ValidationException
- * @throws IOException
- */
- public void validate(String jsonText) throws IllegalArgumentException, ValidationException, IOException
- {
- final JsonNode jsonNode = new ObjectMapper().readTree(jsonText.replace("content_spec", "content-spec"));
-
- final JsonSchema jsonSchema = getSchema(jsonNode);
-
- Set messages = jsonSchema.validate(jsonNode);
-
- if (messages.size() > 0) {
-
- ObjectNode jNode = new ObjectMapper().createObjectNode();
-
- StringBuilder message = new StringBuilder();
-
- for (ValidationMessage validationMessage : messages) {
- jNode.put(validationMessage.getMessage().replace("$.", "").split(": ")[0], validationMessage.getMessage().replace("$.", "").split(": ")[1]);
- }
-
- message.append(jNode);
-
- throw new ValidationException(message.toString());
- }
-
- }
-
- /**
- * Returns the correct schema for the given JSON
- * @param jsonObject JSON object
- * @return Schema which maps to the object
- * @throws IOException
- * @throws ValidationException
- */
- private JsonSchema getSchema(JsonNode jsonObject) throws IOException, ValidationException{
-
- InputStream schemaStream = getSchemaStream(jsonObject);
- StringBuilder schema = new StringBuilder();
-
- BufferedReader reader = new BufferedReader(new InputStreamReader(schemaStream));
-
- String line;
-
- while ((line = reader.readLine()) != null) {
- schema.append(line);
- }
-
- schemaStream.close();
-
- return getSchema(schema.toString());
- }
-
- /**
- * Returns the stream of the correct schema file
- * @param jsonObject JSON object to find the correct schema
- * @return JSON schema as stream
- * @throws IOException
- */
- private InputStream getSchemaStream(JsonNode jsonNode) throws IOException {
-
- InputStream schemaStream = null;
- JsonNode contentSpec = jsonNode.get("content-spec");
-
- assert !contentSpec.textValue().isEmpty();
-
- if (contentSpec != null){
- schemaStream = Validator.class.getResourceAsStream("/" + contentSpecMapping.get(contentSpec.textValue()));
- }
- else{
- LOG.info("No content-spec found");
- throw new IOException("No content-spec found.\n"
- + "Valid content-specs are:\n"
- + "urn:spec://eclipse.org/unide/machine-message#v2\n"
- + "urn:spec://eclipse.org/unide/measurement-message#v2\n"
- + "urn:spec://eclipse.org/unide/process-message#v2");
- }
-
-
- if (schemaStream == null){
- LOG.info("No validation schema found for content-spec: " + contentSpec);
- throw new IOException("No validation schema found for content-spec: " + contentSpec + ".\n"
- + "Valid content-specs are:\n"
- + "urn:spec://eclipse.org/unide/machine-message#v2\n"
- + "urn:spec://eclipse.org/unide/measurement-message#v2\n"
- + "urn:spec://eclipse.org/unide/process-message#v2");
- }
-
- return schemaStream;
- }
-
-}
\ No newline at end of file
diff --git a/servers/rest/src/main/java/server/persistency/dao/MachineMessageDAO.java b/servers/rest/src/main/java/server/persistency/dao/MachineMessageDAO.java
deleted file mode 100644
index 3945c69..0000000
--- a/servers/rest/src/main/java/server/persistency/dao/MachineMessageDAO.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.persistency.dao;
-
-import java.io.IOException;
-import java.sql.Timestamp;
-import java.time.ZoneOffset;
-import java.util.concurrent.TimeUnit;
-
-import org.eclipse.iot.unide.ppmp.PPMPPackager;
-import org.eclipse.iot.unide.ppmp.commons.Device;
-import org.eclipse.iot.unide.ppmp.messages.Message;
-import org.eclipse.iot.unide.ppmp.messages.MessagesWrapper;
-import org.influxdb.InfluxDB;
-import org.influxdb.dto.BatchPoints;
-import org.influxdb.dto.Point;
-import org.influxdb.dto.Point.Builder;
-
-import server.endpoints.receivers.IMachineMessageReceiver;
-import server.persistency.db.ConnectionFactory;
-
-/**
- * DAO class for Measurement objects of InfluxDB
- *
- */
-public class MachineMessageDAO implements IMachineMessageReceiver{
-
- private InfluxDB connection;
-
- public MachineMessageDAO(){
-
- }
-
- /**
- * Inserts the whole MeasurementWrapper object to the database
- *
- * @param measurements MeasurementWrapper as PPMP java binding object
- * @throws IOException
- */
- private void insert(MessagesWrapper messages) throws IOException {
-
-
- for(Message message : messages.getMessages())
- {
- insert(message, messages.getDevice());
- }
-
- }
-
- /**
- * Inserts a PPMP-Message as JSON-string
- *
- * @param jsonStringMessage Message in JSON format
- * @throws IOException
- */
- public void insert(String jsonStringMessage) throws IOException {
-
- PPMPPackager pckg = new PPMPPackager();
- MessagesWrapper w = pckg.getMessagesBean(jsonStringMessage.replace("content_spec", "content-spec"));
-
- insert(w);
-
- }
-
- /**
- * Inserts a single Message-Array with device information
- *
- * @param message Message-Array as PPMP java binding object
- * @param device Device as PPMP java binding object
- * @throws IOException
- */
- private void insert(Message message, Device device) throws IOException{
-
- connection = ConnectionFactory.getConnection();
-
- BatchPoints batchPoints = BatchPoints
- .database(ConnectionFactory.getDatabasenameMessages())
- .tag("async", "true")
- .consistency(InfluxDB.ConsistencyLevel.ALL)
- .build();
-
- Builder builder = Point.measurement(device.getDeviceID())
- .time(Timestamp.valueOf(message.getTimestamp().atZoneSameInstant(ZoneOffset.ofHours(1)).toLocalDateTime()).getTime(),TimeUnit.MILLISECONDS);
-
- setDeviceInfoForPointer(builder, device);
-
- setFieldsForPointer(builder, message);
-
- Point point = builder.build();
-
- batchPoints.point(point);
-
- connection.write(batchPoints);
-
- }
-
- /**
- * Sets the device information for the DB-pointer
- *
- * @param pointBuilder InfluxDB PointBuilder
- * @param device Device as PPMP java binding object
- */
- private void setDeviceInfoForPointer(Builder pointBuilder, Device device) {
-
- assert !device.getDeviceID().isEmpty();
-
- pointBuilder.tag("DeviceID", device.getDeviceID());
-
- if (device.getOperationalStatus() != null){
- pointBuilder.tag("DeviceOperationalStatus",device.getOperationalStatus());
- }
-
- if (device.getMetaData() != null){
- pointBuilder.tag("DeviceMetaData",device.getMetaData().toString());
- }
-
- }
-
- /**
- * Sets the message information for the DB-pointer
- *
- * @param pointBuilder
- * @param message Message as PPMP java binding object
- */
- private void setFieldsForPointer(Builder pointBuilder, Message message){
-
- assert !message.getCode().isEmpty();
-
- pointBuilder.addField("code",message.getCode());
-
- if (message.getOrigin() != null){
- pointBuilder.addField("origin",message.getOrigin());
- }
-
- if (message.getSeverity() != null){
- pointBuilder.addField("severity",message.getSeverity().toString());
- }
-
- if (message.getTitle() != null){
- pointBuilder.addField("title",message.getTitle());
- }
-
- if (message.getDescription() != null){
- pointBuilder.addField("description",message.getDescription());
- }
-
- if (message.getHint() != null){
- pointBuilder.addField("hint",message.getHint());
- }
-
- if (message.getMetaData() != null){
- pointBuilder.addField("metadata",message.getMetaData().toString());
- }
-
-
- }
-
- @Override
- public void receive(String data) throws IOException {
-
- insert(data);
-
- }
-}
diff --git a/servers/rest/src/main/java/server/persistency/dao/MeasurementDAO.java b/servers/rest/src/main/java/server/persistency/dao/MeasurementDAO.java
deleted file mode 100644
index 30cc8c1..0000000
--- a/servers/rest/src/main/java/server/persistency/dao/MeasurementDAO.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.persistency.dao;
-
-import java.io.IOException;
-import java.sql.Timestamp;
-import java.time.ZoneOffset;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.TimeUnit;
-
-import org.eclipse.iot.unide.ppmp.PPMPPackager;
-import org.eclipse.iot.unide.ppmp.commons.Device;
-import org.eclipse.iot.unide.ppmp.measurements.Measurements;
-import org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper;
-import org.eclipse.iot.unide.ppmp.measurements.Part;
-
-import org.influxdb.InfluxDB;
-import org.influxdb.dto.BatchPoints;
-import org.influxdb.dto.Point;
-import org.influxdb.dto.Point.Builder;
-
-import server.endpoints.receivers.IMeasurementMessageReceiver;
-import server.persistency.db.ConnectionFactory;
-
-/**
- * DAO class for Measurement objects of InfluxDB
- *
- */
-public class MeasurementDAO implements IMeasurementMessageReceiver {
-
- private InfluxDB connection;
-
- public MeasurementDAO() {
-
- }
-
- /**
- * Inserts a PPMP-Message as JSON-string
- *
- * @param JsonStringMessage
- * @throws IOException
- */
- public void insert(String JsonStringMessage) throws IOException{
-
- PPMPPackager pckg = new PPMPPackager();
- MeasurementsWrapper w = pckg.getMeasurementsBean(JsonStringMessage.replace("content_spec", "content-spec"));
-
- insertMeasurements(w);
-
- }
-
- /**
- * Inserts the whole MeasurementWrapper object to the database
- *
- * @param measurements MeasurementWrapper as PPMP java binding object
- * @throws IOException
- */
- private void insertMeasurements(MeasurementsWrapper measurements) throws IOException {
-
- for(Measurements meas : measurements.getMeasurements())
- {
- insertSingleMeasurement(meas, measurements.getDevice(), measurements.getPart());
- }
-
- }
-
- /**
- * Inserts a single Measurment-Array with device information
- *
- * @param measurement Measurment-Array as PPMP java binding object
- * @param device Device as PPMP java binding object
- * @param part Part as PPMP java binding object
- * @throws IOException
- */
- private void insertSingleMeasurement(Measurements measurement, Device device, Part part) throws IOException {
-
- connection = ConnectionFactory.getConnection();
-
- BatchPoints batchPoints = BatchPoints
- .database(ConnectionFactory.getDatabasenameMeasurements())
- .consistency(InfluxDB.ConsistencyLevel.ALL)
- .build();
-
- Iterator>> it = measurement.getSeriesMap().getSeries().entrySet().iterator();
-
- List time_iterator = measurement.getSeriesMap().getSeries().get("$_time");
- long starttime = Timestamp.valueOf(measurement.getTimestamp().atZoneSameInstant(ZoneOffset.ofHours(1)).toLocalDateTime()).getTime();
-
- while (it.hasNext()) {
- Map.Entry> pair = (Map.Entry>)it.next();
- if (pair.getKey() != "$_time")
- {
- for (int i = 0; i < pair.getValue().size(); i++ ){
- Builder pointBuilder = Point.measurement(device.getDeviceID())
- .time((long)(starttime + time_iterator.get(i).longValue()), TimeUnit.MILLISECONDS)
- .addField(pair.getKey(), pair.getValue().get(i).doubleValue());
-
- setDeviceInfoForPointer(pointBuilder,device);
-
- if (part != null)
- {
- setPartInfoForPointer(pointBuilder,part);
- }
-
-
- Point point = pointBuilder.build();
-
- batchPoints.point(point);
- }
-
- }
-
- }
-
- connection.write(batchPoints);
-
- }
-
- /**
- * Sets the part information for the DB-pointer
- *
- * @param pointBuilder
- * @param part Part as PPMP java binding object
- */
- private void setPartInfoForPointer(Builder pointBuilder, Part part){
-
- assert !part.getPartID().isEmpty();
-
- pointBuilder.tag("PartID",part.getPartID());
-
- if (part.getPartTypeID() != null){
- pointBuilder.tag("PartTypeID",part.getPartTypeID());
- }
-
- if (part.getCode() != null){
- pointBuilder.tag("PartCode",part.getCode());
- }
-
- if (part.getResult() != null){
- pointBuilder.tag("PartResult",part.getResult().toString());
- }
-
- if (part.getMetaData() != null){
- pointBuilder.tag("PartMetaData",part.getMetaData().toString());
- }
-
- }
-
- /**
- * Sets the device information for the DB-pointer
- *
- * @param pointBuilder
- * @param device Device as PPMP java binding object
- */
- private void setDeviceInfoForPointer(Builder pointBuilder, Device device){
-
- assert !device.getDeviceID().isEmpty();
-
- pointBuilder.tag("DeviceID", device.getDeviceID());
-
- if (device.getOperationalStatus() != null){
- pointBuilder.tag("DeviceOperationalStatus",device.getOperationalStatus());
- }
-
- if (device.getMetaData() != null){
- pointBuilder.tag("DeviceMetaData",device.getMetaData().toString());
- }
-
- }
-
- @Override
- public void receive(String data) throws IOException {
-
- insert(data);
-
- }
-}
diff --git a/servers/rest/src/main/java/server/persistency/dao/ProcessDAO.java b/servers/rest/src/main/java/server/persistency/dao/ProcessDAO.java
deleted file mode 100644
index 3cb64a9..0000000
--- a/servers/rest/src/main/java/server/persistency/dao/ProcessDAO.java
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.persistency.dao;
-
-import java.io.IOException;
-import java.sql.Timestamp;
-import java.time.ZoneOffset;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.TimeUnit;
-
-import org.eclipse.iot.unide.ppmp.PPMPPackager;
-import org.eclipse.iot.unide.ppmp.commons.Device;
-import org.eclipse.iot.unide.ppmp.process.Measurements;
-import org.eclipse.iot.unide.ppmp.process.Part;
-import org.eclipse.iot.unide.ppmp.process.ProcessWrapper;
-import org.eclipse.iot.unide.ppmp.process.Process;
-import org.eclipse.iot.unide.ppmp.process.ShutOffValues;
-import org.eclipse.iot.unide.ppmp.process.SpecialValue;
-import org.influxdb.InfluxDB;
-import org.influxdb.dto.BatchPoints;
-import org.influxdb.dto.Point;
-import org.influxdb.dto.Point.Builder;
-
-import server.endpoints.receivers.IProcessMessageReceiver;
-import server.persistency.db.ConnectionFactory;
-
-/**
- * DAO class for Measurement objects of InfluxDB
- *
- */
-public class ProcessDAO implements IProcessMessageReceiver {
-
- private InfluxDB connection;
- private PPMPPackager packager;
-
- public ProcessDAO() {
- packager = new PPMPPackager();
- }
-
- /**
- * Inserts a PPMP-Message as JSON-string
- *
- * @param JsonStringMessage
- * @throws IOException
- */
- public void insert(String JsonStringMessage) throws IOException{
-
- PPMPPackager packager = new PPMPPackager();
- ProcessWrapper processWrapper = packager.getProcessesBean(JsonStringMessage.replace("content_spec", "content-spec"));
-
- insertProcess(processWrapper);
-
- }
-
- /**
- * Inserts the whole ProcessWrapper object to the database
- *
- * @param processWrapper ProcessWrapper as PPMP java binding object
- * @throws IOException
- */
- private void insertProcess(ProcessWrapper processWrapper) throws IOException {
-
- insertProcessData(processWrapper);
-
- for(Measurements measurement : processWrapper.getMeasurements())
- {
- if (measurement.getSpecialValues() != null){
- insertSpecialValues(measurement, processWrapper.getDevice(), processWrapper.getPart());
- }
- }
-
- }
-
- /**
- * Inserts the process data
- *
- * @param processWrapper The whole process message
- * @throws IOException
- */
- private void insertProcessData(ProcessWrapper processWrapper) throws IOException {
-
- connection = ConnectionFactory.getConnection();
-
- BatchPoints batchPointsProcess = BatchPoints
- .database(ConnectionFactory.getDatabasenameProcesses())
- .consistency(InfluxDB.ConsistencyLevel.ALL)
- .build();
-
- long starttime = Timestamp.valueOf(processWrapper.getProcess().getTimestamp().atZoneSameInstant(ZoneOffset.ofHours(1)).toLocalDateTime()).getTime();
-
- Builder pointBuilder = Point.measurement(processWrapper.getDevice().getDeviceID())
- .time((long)starttime, TimeUnit.MILLISECONDS);
-
- if (processWrapper.getProcess().getExternalProcessId() != null){
- pointBuilder.addField("ExternalProcessId", processWrapper.getProcess().getExternalProcessId());
- }
-
- if (processWrapper.getProcess().getResult() != null){
- pointBuilder.addField("Result", processWrapper.getProcess().getResult().toString());
- }
-
- if (processWrapper.getProcess().getShutoffPhase() != null){
- pointBuilder.addField("ShutoffPhase", processWrapper.getProcess().getShutoffPhase());
- }
-
- if (processWrapper.getProcess().getMetaData() != null){
- pointBuilder.addField("ProcessMetaData", processWrapper.getProcess().getMetaData().toString());
- }
-
- if (processWrapper.getMeasurements() != null){
- pointBuilder.addField("Measurements", packager.getMessage(processWrapper.getMeasurements()));
- }
-
- if (processWrapper.getProcess().getShutOffValuesMap() != null){
- pointBuilder.addField("ShutOffValues", packager.getMessage(processWrapper.getProcess().getShutOffValuesMap()));
- }
-
- if (processWrapper.getProcess().getProgram() != null){
- if (processWrapper.getProcess().getProgram().getId() != null){
- pointBuilder.addField("Program_ID", packager.getMessage(processWrapper.getProcess().getProgram().getId()));
- }
- if (processWrapper.getProcess().getProgram().getId() != null){
- pointBuilder.addField("Program_Name", packager.getMessage(processWrapper.getProcess().getProgram().getName()));
- }
- if (processWrapper.getProcess().getProgram().getId() != null){
- pointBuilder.addField("Program_LastChangedDate", packager.getMessage(processWrapper.getProcess().getProgram().getLastChangedDate()));
- }
- }
-
- setDeviceInfoForPointer(pointBuilder,processWrapper.getDevice());
-
- if (processWrapper.getPart() != null)
- {
- setPartInfoForPointer(pointBuilder,processWrapper.getPart());
- }
-
- Point point = pointBuilder.build();
-
- batchPointsProcess.point(point);
-
- connection.write(batchPointsProcess);
-
- if (processWrapper.getProcess().getShutOffValuesMap() != null){
- insertShutoffValues(processWrapper.getProcess(), processWrapper.getDevice(), processWrapper.getPart());
- }
-
- }
-
- /**
- * Inserts the shutoff values of a process with device information
- *
- * @param measurement Measurement-Array as PPMP java binding object
- * @param device Device as PPMP java binding object
- * @param part Part as PPMP java binding object
- * @throws IOException
- */
- private void insertShutoffValues(Process process, Device device, Part part) throws IOException {
-
- connection = ConnectionFactory.getConnection();
-
- BatchPoints batchPointsMeasurements = BatchPoints
- .database(ConnectionFactory.getDatabasenameMeasurements())
- .consistency(InfluxDB.ConsistencyLevel.ALL)
- .build();
-
- Iterator> iterator = process.getShutOffValuesMap().getShutOffValues().entrySet().iterator();
-
- long starttime = Timestamp.valueOf(process.getTimestamp().atZoneSameInstant(ZoneOffset.ofHours(1)).toLocalDateTime()).getTime();
-
- while (iterator.hasNext()) {
-
- Entry currentValue = iterator.next();
-
- Builder pointBuilder = Point.measurement(device.getDeviceID())
- .time((long)starttime, TimeUnit.MILLISECONDS)
- .addField(currentValue.getKey() + "_value", currentValue.getValue().getValue().doubleValue())
- .addField(currentValue.getKey() + "_upperError", currentValue.getValue().getUpperError().doubleValue())
- .addField(currentValue.getKey() + "_lowerError", currentValue.getValue().getLowerError().doubleValue());
-
- setDeviceInfoForPointer(pointBuilder,device);
-
- if (part != null)
- {
- setPartInfoForPointer(pointBuilder,part);
- }
-
- Point point = pointBuilder.build();
-
- batchPointsMeasurements.point(point);
-
- }
-
- connection.write(batchPointsMeasurements);
-
- }
-
- /**
- * Inserts the special values of a process with device information
- *
- * @param measurement Measurement-Array as PPMP java binding object
- * @param device Device as PPMP java binding object
- * @param part Part as PPMP java binding object
- * @throws IOException
- */
- private void insertSpecialValues(Measurements measurement, Device device, Part part) throws IOException {
-
- connection = ConnectionFactory.getConnection();
-
- BatchPoints batchPointsMeasurements = BatchPoints
- .database(ConnectionFactory.getDatabasenameMeasurements())
- .consistency(InfluxDB.ConsistencyLevel.ALL)
- .build();
-
- Iterator> iterator = measurement.getSpecialValues().getSpecialValue().entrySet().iterator();
- long starttime = Timestamp.valueOf(measurement.getTimestamp().atZoneSameInstant(ZoneOffset.ofHours(1)).toLocalDateTime()).getTime();
-
- while (iterator.hasNext()) {
-
- Entry currentValue = iterator.next();
-
- Builder pointBuilder = Point.measurement(device.getDeviceID())
- .time((long)starttime + currentValue.getValue().getValue().longValue(), TimeUnit.MILLISECONDS)
- .addField(currentValue.getKey(), currentValue.getValue().getValue().doubleValue())
- .tag("SpecialValue", "true");
-
- if (measurement.getPhase() != null){
- pointBuilder.tag("Phase",measurement.getPhase());
- }
-
- if (measurement.getName() != null){
- pointBuilder.tag("Name",measurement.getName());
- }
-
- if (measurement.getResult() != null){
- pointBuilder.tag("Result",measurement.getResult().toString());
- }
-
- if (measurement.getCode() != null){
- pointBuilder.tag("Code",measurement.getCode().toString());
- }
-
- setDeviceInfoForPointer(pointBuilder,device);
-
- if (part != null)
- {
- setPartInfoForPointer(pointBuilder,part);
- }
-
- Point point = pointBuilder.build();
-
- batchPointsMeasurements.point(point);
-
- }
-
- connection.write(batchPointsMeasurements);
-
- }
-
- /**
- * Inserts a single Measurement-Array with device information
- *
- * @param measurement Measurement-Array as PPMP java binding object
- * @param device Device as PPMP java binding object
- * @param part Part as PPMP java binding object
- * @throws IOException
- */
- private void insertSingleMeasurement(Measurements measurement, Device device, Part part) throws IOException {
-
- connection = ConnectionFactory.getConnection();
-
- BatchPoints batchPointsMeasurements = BatchPoints
- .database(ConnectionFactory.getDatabasenameMeasurements())
- .consistency(InfluxDB.ConsistencyLevel.ALL)
- .build();
-
- Iterator>> it = measurement.getSeriesMap().getSeries().entrySet().iterator();
-
- List time_iterator = measurement.getSeriesMap().getSeries().get("time");
-
- if (time_iterator != null)
-
- {
- long starttime = Timestamp.valueOf(measurement.getTimestamp().atZoneSameInstant(ZoneOffset.ofHours(1)).toLocalDateTime()).getTime();
-
- while (it.hasNext()) {
- Map.Entry> pair = (Map.Entry>)it.next();
- if (pair.getKey() != "time")
- {
- for (int i = 0; i < pair.getValue().size(); i++ ){
- Builder pointBuilder = Point.measurement(device.getDeviceID())
- .time((long)(starttime + time_iterator.get(i).doubleValue()*1000), TimeUnit.MILLISECONDS)
- .addField(pair.getKey(), pair.getValue().get(i).doubleValue());
-
- setDeviceInfoForPointer(pointBuilder,device);
-
- if (part != null)
- {
- setPartInfoForPointer(pointBuilder,part);
- }
-
- Point point = pointBuilder.build();
-
- batchPointsMeasurements.point(point);
- }
-
- }
-
- }
-
- }
-
- connection.write(batchPointsMeasurements);
-
- }
-
- /**
- * Sets the part information for the DB-pointer
- *
- * @param pointBuilder
- * @param part Part as PPMP java binding object
- */
- private void setPartInfoForPointer(Builder pointBuilder, Part part){
-
- assert !part.getpartID().isEmpty();
-
- pointBuilder.tag("partID",part.getpartID());
-
- if (part.getPartTypeId() != null){
- pointBuilder.tag("PartTypeID",part.getPartTypeId());
- }
-
- if (part.getPartTypeId() != null){
- pointBuilder.tag("PartType",part.getType().toString());
- }
-
- if (part.getCode() != null){
- pointBuilder.tag("PartCode",part.getCode());
- }
-
- if (part.getResult() != null){
- pointBuilder.tag("PartResult",part.getResult().toString());
- }
-
- if (part.getMetaData() != null){
- pointBuilder.tag("PartMetaData",part.getMetaData().toString());
- }
-
- }
-
- /**
- * Sets the device information for the DB-pointer
- *
- * @param pointBuilder
- * @param device Device as PPMP java binding object
- */
- private void setDeviceInfoForPointer(Builder pointBuilder, Device device){
-
- assert !device.getDeviceID().isEmpty();
-
- pointBuilder.tag("DeviceID", device.getDeviceID());
-
- if (device.getOperationalStatus() != null){
- pointBuilder.tag("DeviceOperationalStatus",device.getOperationalStatus());
- }
-
- if (device.getMetaData() != null){
- pointBuilder.tag("DeviceMetaData",device.getMetaData().toString());
- }
-
- }
-
- @Override
- public void receive(String data) throws IOException {
-
- insert(data);
-
- }
-}
diff --git a/servers/rest/src/main/java/server/persistency/db/ConnectionFactory.java b/servers/rest/src/main/java/server/persistency/db/ConnectionFactory.java
deleted file mode 100644
index a614b72..0000000
--- a/servers/rest/src/main/java/server/persistency/db/ConnectionFactory.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-
-package server.persistency.db;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Properties;
-
-import org.apache.log4j.Logger;
-import org.influxdb.InfluxDB;
-import org.influxdb.InfluxDBFactory;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-
-import io.vertx.core.json.JsonObject;
-
-/**
- * Manages connections to InfluxDB
- *
- */
-public class ConnectionFactory {
-
- /**
- * The logger.
- */
- private static final Logger LOG = Logger.getLogger(ConnectionFactory.class);
-
- private static ConnectionFactory instance = new ConnectionFactory();
- private static InfluxDB connection;
- private Properties properties;
- private String dbNameMessages;
- private String dbNameMeasurements;
- private String dbNameProcesses;
-
- private ConnectionFactory() {
-
- }
-
- /**
- * Returns the instance of the ConnectionFactory
- *
- * @return
- */
- public static ConnectionFactory getInstance() {
- return instance;
- }
-
- /**
- * Create the connection to a configured InfluxDB
- *
- * @return InfluxDB connection
- * @throws IOException
- */
- private synchronized InfluxDB createConnection() throws IOException {
-
- if (connection == null) {
-
- if (properties == null || properties.isEmpty()) {
- getConfiguration();
- }
-
- String url = properties.getProperty("dbhost").concat(":")
- .concat(properties.getProperty("dbport"));
- String user = properties.getProperty("dbuser");
- String password = properties.getProperty("dbpassword");
-
- dbNameMessages = properties.getProperty("dbNameMessages");
- dbNameMeasurements = properties.getProperty("dbNameMeasurements");
- dbNameProcesses = properties.getProperty("dbNameProcesses");
-
- connection = InfluxDBFactory.connect(url, user, password);
-
- if (connection != null) {
- LOG.info("DB connected");
- connection.createDatabase(dbNameMeasurements);
- connection.createDatabase(dbNameMessages);
- connection.createDatabase(dbNameProcesses);
- }
- }
-
- return connection;
- }
-
- /**
- * Creates a new DB-connection or returns the existing connection
- *
- * @return InfluxDB connection
- * @throws IOException
- */
- public static InfluxDB getConnection() throws IOException {
-
- if (connection == null) {
- instance.createConnection();
- }
-
- return connection;
- }
-
- /**
- * Gets the InfluxDB-Name for Messages
- *
- * @return InfluxDB-Name for Messages
- */
- public static String getDatabasenameMessages() {
- return ConnectionFactory.getInstance().dbNameMessages;
- }
-
- /**
- * Gets the InfluxDB-Name for Measurements
- *
- * @return InfluxDB-Name for Measurements
- */
- public static String getDatabasenameMeasurements() {
- return ConnectionFactory.getInstance().dbNameMeasurements;
- }
-
- /**
- * Gets the InfluxDB-Name for Measurements
- *
- * @return InfluxDB-Name for Measurements
- */
- public static String getDatabasenameProcesses() {
- return ConnectionFactory.getInstance().dbNameProcesses;
- }
-
- /**
- * Reads the database configuration of the project
- *
- * @throws IOException
- * @throws ParseException
- */
- private void getConfiguration() throws IOException {
-
- JSONParser parser = new JSONParser();
- properties = new Properties();
- InputStream input = null;
-
- try {
-
- input = ConnectionFactory.class.getResourceAsStream("application_conf.json");
-
- Object obj = parser.parse(new InputStreamReader(input));
-
- JSONObject jsonObject = (JSONObject) obj;
-
- JSONObject database = (JSONObject) jsonObject.get("database");
-
- properties.setProperty("dbtype", (String) database.get("type"));
- properties.setProperty("dbuser", (String) database.get("user"));
- properties.setProperty("dbhost", (String) database.get("host"));
- properties.setProperty("dbport", (String) database.get("port"));
- properties.setProperty("dbpassword", (String) database.get("password"));
- properties.setProperty("dbNameMessages", (String) database.get("MessagesDatabase"));
- properties.setProperty("dbNameMeasurements", (String) database.get("MeasurementsDatabase"));
- properties.setProperty("dbNameProcesses", (String) database.get("ProcessesDatabase"));
-
- LOG.warn(properties.getProperty("dbtype"));
- LOG.info(properties.getProperty("dbuser"));
- LOG.info(properties.getProperty("dbhost"));
- LOG.info(properties.getProperty("dbport"));
- LOG.info(properties.getProperty("dbpassword"));
-
- } catch (IOException | ParseException ex) {
- LOG.debug("cannot load config!", ex );
- } finally {
- if (input != null) {
- try {
- input.close();
- } catch (IOException e) {
- LOG.debug("cannot close config stream!", e);
- throw e;
- }
- }
- }
-
- }
-
- /**
- * Reads the database configuration of the project
- *
- * @throws IOException
- * @throws ParseException
- */
- public void setConfiguration(JsonObject configuration) throws IOException {
-
- properties = new Properties();
-
- properties.setProperty("dbtype", (String) configuration.getValue("type"));
- properties.setProperty("dbuser", (String) configuration.getValue("user"));
- properties.setProperty("dbhost", (String) configuration.getValue("host"));
- properties.setProperty("dbport", (String) configuration.getValue("port"));
- properties.setProperty("dbpassword", (String) configuration.getValue("password"));
- properties.setProperty("dbNameMessages", (String) configuration.getValue("MessagesDatabase"));
- properties.setProperty("dbNameMeasurements", (String) configuration.getValue("MeasurementsDatabase"));
- properties.setProperty("dbNameProcesses", (String) configuration.getValue("ProcessesDatabase"));
-
- LOG.info(properties.getProperty("dbtype"));
- LOG.info(properties.getProperty("dbhost"));
- LOG.info(properties.getProperty("dbport"));
-
- }
-}
\ No newline at end of file
diff --git a/servers/rest/src/main/resources/application_conf.json b/servers/rest/src/main/resources/application_conf.json
index 7284ad9..d431039 100644
--- a/servers/rest/src/main/resources/application_conf.json
+++ b/servers/rest/src/main/resources/application_conf.json
@@ -1,13 +1,12 @@
-{
- "http.port" : 8080,
- "database":{
- "type":"influx",
- "host":"http://localhost",
- "port":"8086",
- "user":"root",
- "password":"root",
- "MessagesDatabase": "Messages",
- "MeasurementsDatabase": "Measurements",
- "ProcessesDatabase": "Processes"
- }
+{
+ "http.port": 8090,
+ "persistence.enable" : true,
+ "persistence.system" : "sql",
+ "influxDb.url": "http://localhost:8086",
+ "influxDb.user": "root",
+ "influxDb.password": "root",
+ "sqlDb.url" : "jdbc:h2:tcp://localhost:9040/./db/test",
+ "sqlDb.user" : "sa",
+ "sqlDb.driver": "org.h2.Driver",
+ "sqlDb.password" : ""
}
\ No newline at end of file
diff --git a/servers/rest/src/main/resources/config.properties b/servers/rest/src/main/resources/config.properties
deleted file mode 100644
index 1ff7742..0000000
--- a/servers/rest/src/main/resources/config.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Database-Type (influx,postgres)
-dbtype=influx
-
-# Database connection values
-dbhost=http://localhost
-dbport=8086
-dbuser=root
-dbpassword=root
-
-# Only for influxDB
-dbNameMessages = Messages
-dbNameMeasurements = Measurements
-dbNameProcesses = Processes
-
-# HTTP-Server
-httpHost=localhost
-httpPort=8080
\ No newline at end of file
diff --git a/servers/rest/src/main/resources/log4j.properties b/servers/rest/src/main/resources/log4j.properties
index 6dea5b9..fe6c80b 100644
--- a/servers/rest/src/main/resources/log4j.properties
+++ b/servers/rest/src/main/resources/log4j.properties
@@ -1,17 +1,16 @@
-# Root logger option
-log4j.rootLogger=DEBUG, stdout, file
-
-# Redirect log messages to console
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
-
-# Redirect log messages to a log file, support file rolling.
-log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.file.datePattern='.'yyyy-MM-dd_HH-mm
-log4j.appender.file.File=unide.log
-log4j.appender.file.MaxFileSize=5MB
-log4j.appender.file.MaxBackupIndex=10
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
+# Root logger option
+log4j.rootLogger=INFO, stdout, file
+
+# Redirect log messages to console
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
+
+# Redirect log messages to a log file, support file rolling.
+log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.file.datePattern='.'yyyy-MM-dd_HH-mm
+log4j.appender.file.File=unide.log
+log4j.appender.file.MaxFileSize=5MB
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
diff --git a/servers/rest/src/main/resources/measurement_schema_v2.json b/servers/rest/src/main/resources/measurement_schema_v2.json
deleted file mode 100644
index 1f58968..0000000
--- a/servers/rest/src/main/resources/measurement_schema_v2.json
+++ /dev/null
@@ -1,99 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "properties": {
- "content-spec": {
- "type": "string"
- },
- "device": {
- "type": "object",
- "properties": {
- "deviceID": {
- "type": "string",
- "maxLength": 36
- },
- "operationalStatus": {
- "type": "string"
- },
- "metaData": {
- "type": "object"
- }
- },
- "additionalProperties":false,
- "required": [
- "deviceID"
- ]
- },
- "part": {
- "type": "object",
- "properties": {
- "partTypeID": {
- "type": "string",
- "maxLength": 256
- },
- "partID": {
- "type": "string",
- "maxLength": 256
- },
- "result": {
- "enum": ["OK", "NOK", "UNKNOWN"]
- },
- "code": {
- "type": "string",
- "maxLength": 36
- },
- "metaData": {
- "type": "object"
- }
- },
- "additionalProperties":false
- },
- "measurements": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "ts": {
- "type": "string",
- "format": "date-time"
- },
- "result": {
- "enum": ["OK", "NOK", "UNKNOWN"]
- },
- "code": {
- "type": "string",
- "maxLength": 36
- },
- "series": {
- "type": "object",
- "properties": {
- "$_time": {
- "type": "array",
- "items": {
- "type": "integer"
- }
- }
- },
- "required": [
- "$_time"
- ]
- },
- "limits": {
- "type": "object"
- }
- },
- "additionalProperties":false,
- "required": [
- "ts",
- "series"
- ]
- }
- }
- },
- "additionalProperties":false,
- "required": [
- "content-spec",
- "device",
- "measurements"
- ]
-}
\ No newline at end of file
diff --git a/servers/rest/src/main/resources/message_schema_v2.json b/servers/rest/src/main/resources/message_schema_v2.json
deleted file mode 100644
index 0e3cd87..0000000
--- a/servers/rest/src/main/resources/message_schema_v2.json
+++ /dev/null
@@ -1,79 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "properties": {
- "content-spec": {
- "type": "string"
- },
- "device": {
- "type": "object",
- "properties": {
- "deviceID": {
- "type": "string",
- "maxLength": 36
- },
- "operationalStatus": {
- "type": "string"
- },
- "metaData": {
- "type": "object"
- }
- },
- "additionalProperties":false,
- "required": [
- "deviceID"
- ]
- },
- "messages": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "origin": {
- "type": "string"
- },
- "ts": {
- "type": "string",
- "format": "date-time"
- },
- "type": {
- "enum": ["DEVICE", "TECHNICAL_INFO"]
- },
- "severity": {
- "enum": ["HIGH", "MEDIUM", "LOW", "UNKNOWN"]
- },
- "code": {
- "type": "string",
- "maxLength": 36
- },
- "title": {
- "type": "string",
- "maxLength": 1000
- },
- "description": {
- "type": "string",
- "maxLength": 2000
- },
- "hint": {
- "type": "string",
- "maxLength": 2000
- },
- "metaData": {
- "type": "object"
- }
- },
- "additionalProperties":false,
- "required": [
- "ts",
- "code"
- ]
- }
- }
- },
- "additionalProperties":false,
- "required": [
- "content-spec",
- "device",
- "messages"
- ]
-}
\ No newline at end of file
diff --git a/servers/rest/src/main/resources/org/eclipse/iot/unide/server/receiver/sql/migrations/h2/V1__initial_setup.sql b/servers/rest/src/main/resources/org/eclipse/iot/unide/server/receiver/sql/migrations/h2/V1__initial_setup.sql
new file mode 100644
index 0000000..a8dd31c
--- /dev/null
+++ b/servers/rest/src/main/resources/org/eclipse/iot/unide/server/receiver/sql/migrations/h2/V1__initial_setup.sql
@@ -0,0 +1,24 @@
+CREATE TABLE ppmp_messages (
+ time TIMESTAMP NOT NULL,
+ deviceId TEXT NOT NULL,
+ code TEXT NOT NULL,
+ severity TEXT NULL,
+ title TEXT NULL,
+ description TEXT NULL,
+ hint TEXT NULL,
+ type TEXT NULL
+);
+
+CREATE TABLE ppmp_measurements (
+ time TIMESTAMP NOT NULL,
+ deviceid TEXT NOT NULL,
+ measurementpoint TEXT NOT NULL,
+ value DECIMAL NOT NULL
+);
+
+CREATE TABLE ppmp_processes (
+ time TIMESTAMP NOT NULL,
+ deviceid TEXT NOT NULL,
+ programid TEXT NULL,
+ payload CLOB NOT NULL
+);
diff --git a/servers/rest/src/main/resources/org/eclipse/iot/unide/server/receiver/sql/migrations/postgres/V1__initial_setup.sql b/servers/rest/src/main/resources/org/eclipse/iot/unide/server/receiver/sql/migrations/postgres/V1__initial_setup.sql
new file mode 100644
index 0000000..52a9512
--- /dev/null
+++ b/servers/rest/src/main/resources/org/eclipse/iot/unide/server/receiver/sql/migrations/postgres/V1__initial_setup.sql
@@ -0,0 +1,32 @@
+CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
+
+CREATE TABLE ppmp_messages (
+ time TIMESTAMP NOT NULL,
+ deviceId TEXT NOT NULL,
+ code TEXT NOT NULL,
+ severity TEXT NULL,
+ title TEXT NULL,
+ description TEXT NULL,
+ hint TEXT NULL,
+ type TEXT NULL
+);
+
+SELECT create_hypertable('ppmp_messages', 'time');
+
+CREATE TABLE ppmp_measurements (
+ time TIMESTAMP NOT NULL,
+ deviceid TEXT NOT NULL,
+ measurementpoint TEXT NOT NULL,
+ value DECIMAL NOT NULL
+);
+
+SELECT create_hypertable('ppmp_measurements', 'time');
+
+CREATE TABLE ppmp_processes (
+ time TIMESTAMP NOT NULL,
+ deviceid TEXT NOT NULL,
+ programid TEXT NULL,
+ payload JSON NOT NULL
+);
+
+SELECT create_hypertable('ppmp_processes', 'time');
diff --git a/servers/rest/src/main/resources/process_message_v2.json b/servers/rest/src/main/resources/process_message_v2.json
deleted file mode 100644
index ea50049..0000000
--- a/servers/rest/src/main/resources/process_message_v2.json
+++ /dev/null
@@ -1,207 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-04/schema#",
- "type": "object",
- "properties": {
- "content-spec": {
- "type": "string"
- },
- "device": {
- "type": "object",
- "properties": {
- "deviceID": {
- "type": "string",
- "maxLength": 36
- },
- "operationalStatus": {
- "type": "string"
- },
- "metaData": {
- "type": "object"
- }
- },
- "additionalProperties": false,
- "required": [
- "deviceID"
- ]
- },
- "part": {
- "type": "object",
- "properties": {
- "type": {
- "enum": ["SINGLE", "BATCH"]
- },
- "partTypeID": {
- "type": "string"
- },
- "partID": {
- "type": "string"
- },
- "result": {
- "enum": ["OK", "NOK", "UNKNOWN"]
- },
- "code": {
- "type": "string"
- },
- "metaData": {
- "type": "object"
- }
- },
- "additionalProperties": false,
- "required": [
- "partID"
- ]
- },
- "process": {
- "type": "object",
- "properties": {
- "externalProcessId": {
- "type": "string",
- "maxLength": 36
- },
- "ts": {
- "type": "string",
- "format": "date-time"
- },
- "result": {
- "enum": ["OK", "NOK", "UNKNOWN"]
- },
- "shutoffPhase": {
- "type": "string"
- },
- "program": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "maxLength": 36
- },
- "name": {
- "type": "string",
- "maxLength": 256
- },
- "lastChangedDate": {
- "type": "string",
- "format": "date-time"
- }
- },
- "additionalProperties": false
- },
- "shutoffValues": {
- "type": "object",
- "items": {
- "type": "object",
- "properties": {
- "ts": {
- "type": "string",
- "format": "date-time"
- },
- "value": {
- "type": "number"
- },
- "upperError": {
- "type": "number"
- },
- "LowerError": {
- "type": "number"
- },
- "upperWarn": {
- "type": "number"
- },
- "LowerWarn": {
- "type": "number"
- }
- },
- "additionalProperties": false
- }
- },
- "metaData": {
- "type": "object"
- }
- },
- "additionalProperties": false,
- "required": [
- "ts"
- ]
- },
- "measurements": {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "ts": {
- "type": "string",
- "format": "date-time"
- },
- "phase": {
- "type": "string",
- "maxLength": 256
- },
- "name": {
- "type": "string",
- "maxLength": 256
- },
- "result": {
- "enum": ["OK", "NOK", "UNKNOWN"]
- },
- "code": {
- "type": "string",
- "maxLength": 36
- },
- "limits": {
- "type": "object",
- "items": {
- "type": "object",
- "properties": {
- "upperError": {
- "type": "object"
- },
- "LowerError": {
- "type": "object"
- },
- "upperWarn": {
- "type": "object"
- },
- "LowerWarn": {
- "type": "object"
- }
- },
- "additionalProperties": false
- }
- },
- "specialValues": {
- "type": "object",
- "items": {
- "type": "object",
- "properties": {
- "time": {
- "type": "object"
- },
- "value": {
- "type": "object"
- }
- },
- "required": [
- "value"
- ],
- "additionalProperties": false
- }
- },
- "series": {
- "type": "object"
- }
- },
- "required": [
- "ts",
- "series"
- ],
- "additionalProperties":false
- }
- }
- },
- "additionalProperties": false,
- "required": [
- "content-spec",
- "device",
- "measurements"
- ]
-}
\ No newline at end of file
diff --git a/servers/rest/src/test/java/org/eclipse/iot/unide/server/PpmpSimulator.java b/servers/rest/src/test/java/org/eclipse/iot/unide/server/PpmpSimulator.java
new file mode 100644
index 0000000..5dc552d
--- /dev/null
+++ b/servers/rest/src/test/java/org/eclipse/iot/unide/server/PpmpSimulator.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server;
+
+import java.io.IOException;
+import java.net.URL;
+import java.time.OffsetDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import org.eclipse.iot.unide.ppmp.commons.Device;
+import org.eclipse.iot.unide.ppmp.measurements.Measurements;
+import org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper;
+import org.eclipse.iot.unide.ppmp.measurements.SeriesMap;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+import okhttp3.Call;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+
+public class PpmpSimulator {
+
+ public static void main( String[] args ) throws IOException, InterruptedException {
+
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.enable( DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY );
+ objectMapper.registerModule( new JavaTimeModule() );
+
+ objectMapper.configure( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false );
+ objectMapper.setSerializationInclusion( JsonInclude.Include.NON_NULL );
+
+ OkHttpClient okHttpClient = new OkHttpClient();
+ int count = 0;
+ while ( true ) {
+ count = count + 1;
+ System.out.println( count + " .Going to send request" );
+ MeasurementsWrapper measurements = new MeasurementsWrapper();
+ Device device = new Device();
+ device.setDeviceID( "33a58b-8350-4592-23121-755194497d" );
+ measurements.setDevice( device );
+ List measurementsList = new ArrayList<>();
+ measurementsList.add( generateMeasurements() );
+ measurements.setMeasurements( measurementsList );
+
+ String body = objectMapper.writeValueAsString( measurements );
+
+ Call call = okHttpClient.newCall(
+ new Request.Builder().url( new URL( "http://localhost:8090/rest/v2/" ) )
+ .post( RequestBody.create( MediaType.parse( "application/json" ), body ) )
+ .build() );
+ Response response = call.execute();
+ int responseCode = response.code();
+ System.out.println( count + " Response send. Code: " + responseCode );
+ Thread.sleep( 3000 );
+ }
+
+ }
+
+ private static Measurements generateMeasurements() {
+ Measurements measurements = new Measurements();
+
+ measurements.setCode( "TEST" );
+ measurements.setTimestamp( OffsetDateTime.now() );
+
+ SeriesMap seriesMap = new SeriesMap();
+ seriesMap.setSeriesValue( "$_time", randomValues( 0, 1, 10, 90 ) );
+ seriesMap.setSeriesValue( "temprature", randomValues( 0, 1, 30,50 ) );
+ seriesMap.setSeriesValue( "pressure", randomValues( 0, 1, 40,80 ) );
+ measurements.setSeriesMap( seriesMap );
+
+ return measurements;
+ }
+
+ private static List randomValues( int begin, int end, int minValue, int maxValue ) {
+ return IntStream.range( begin, end )
+ .map( val -> ThreadLocalRandom.current().nextInt( minValue, maxValue + 1 ) )
+ .boxed().collect( Collectors.toList() );
+
+ }
+}
diff --git a/servers/rest/src/test/java/org/eclipse/iot/unide/server/jdbc/JdbcMockFactory.java b/servers/rest/src/test/java/org/eclipse/iot/unide/server/jdbc/JdbcMockFactory.java
new file mode 100644
index 0000000..48d00b8
--- /dev/null
+++ b/servers/rest/src/test/java/org/eclipse/iot/unide/server/jdbc/JdbcMockFactory.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.jdbc;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.Timestamp;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import com.mockrunner.mock.jdbc.MockConnection;
+import com.mockrunner.mock.jdbc.MockPreparedStatement;
+import com.mockrunner.mock.jdbc.ParameterReference;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.ResponseHandler;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.NoConnectionReuseStrategy;
+import org.apache.http.util.EntityUtils;
+
+
+/**
+ * Provides the possibility to mock and stub JDBC statements. Currently only
+ * INSERT statements are supported.
+ *
+ * Statements are delegated to a http server. The http server can provide stub
+ * data based on the received statement. This can be archived for instance using
+ * WireMock.
+ */
+public class JdbcMockFactory {
+
+ public static Connection getMockConnection(String stubUrl) {
+ return (Connection) Proxy.newProxyInstance(Connection.class.getClassLoader(), new Class[] { Connection.class },
+ new ConnectionInvocationHandler(stubUrl, new MockConnection()));
+ }
+
+ private static class BaseMethodInvocationHandler implements InvocationHandler {
+ private final Object target;
+ private final Map methods;
+
+ BaseMethodInvocationHandler(Object target) {
+ this.target = target;
+ this.methods = getMethods(target.getClass());
+ }
+
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ if (args == null || args.length == 0) {
+ return methods.get(new MethodKey(method.getName(), method.getParameterTypes())).invoke(target);
+ }
+ return methods.get(new MethodKey(method.getName(), method.getParameterTypes())).invoke(target, args);
+ }
+
+ private static Map getMethods(Class> clazz) {
+ Method[] methods = clazz.getMethods();
+ return Arrays.stream(methods).collect(Collectors
+ .toMap(entry -> new MethodKey(entry.getName(), entry.getParameterTypes()), entry -> entry));
+ }
+
+ private static class MethodKey {
+ final String methodName;
+ final Class>[] parameterTypes;
+
+ MethodKey(String methodName, Class[] parameterTypes) {
+ this.methodName = methodName;
+ this.parameterTypes = parameterTypes;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof MethodKey)) {
+ return false;
+ }
+ MethodKey methodKey = (MethodKey) o;
+ if (!methodName.equals(methodKey.methodName)) {
+ return false;
+ }
+ return Arrays.equals(parameterTypes, methodKey.parameterTypes);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = methodName.hashCode();
+ result = 31 * result + Arrays.hashCode(parameterTypes);
+ return result;
+ }
+ }
+ }
+
+ private static class ConnectionInvocationHandler extends BaseMethodInvocationHandler {
+
+ private final Connection connection;
+ private final Map methods;
+ private final String stubUrl;
+
+ ConnectionInvocationHandler(String stubUrl, Connection connection) {
+ super(connection);
+ this.stubUrl = stubUrl;
+ this.connection = connection;
+ this.methods = new HashMap<>();
+ Arrays.stream(connection.getClass().getMethods())
+ .forEach(method -> this.methods.put(method.getName(), method));
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ if ("prepareStatement".equals(method.getName())) {
+ String sqlStatement = (String) args[0];
+ return Proxy.newProxyInstance(PreparedStatement.class.getClassLoader(),
+ new Class[] { PreparedStatement.class },
+ new MockPreparedStatementHandler(stubUrl, new MockPreparedStatement(connection, sqlStatement)));
+ }
+ return super.invoke(proxy, method, args);
+ }
+
+ }
+
+ private static class MockPreparedStatementHandler extends BaseMethodInvocationHandler {
+
+ private final MockPreparedStatement mockPreparedStatement;
+ private final String stubUrl;
+
+ MockPreparedStatementHandler(String stubUrl, MockPreparedStatement mockPreparedStatement) {
+ super(mockPreparedStatement);
+ this.stubUrl = stubUrl;
+ this.mockPreparedStatement = mockPreparedStatement;
+ }
+
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ if ("executeUpdate".equals(method.getName())) {
+ String responseBody = sendRequest();
+ return parseToUpdateResult(responseBody);
+ }
+ return super.invoke(proxy, method, args);
+ }
+
+ private static int parseToUpdateResult(String responseBody) {
+ try {
+ return Integer.parseInt(responseBody);
+ } catch (NumberFormatException e) {
+ throw new RuntimeException(
+ "For executeUpdate only Number are possible. Value was: '" + responseBody + "'", e);
+ }
+ }
+
+ private String sendRequest() throws IOException {
+ HttpClient client = HttpClientBuilder.create()
+ .setConnectionReuseStrategy(NoConnectionReuseStrategy.INSTANCE)
+ .build();
+ HttpPost post = new HttpPost(stubUrl);
+ // post.addHeader(arg0, arg1);
+ Map headers = getIndexedParameters();
+ for (String name : headers.keySet()) {
+ post.addHeader(name, headers.get(name));
+ }
+ post.setEntity(new StringEntity( mockPreparedStatement.getSQL() ));
+ ResponseHandler handler = new ResponseHandler() {
+ @Override
+ public String handleResponse(final HttpResponse response) throws ClientProtocolException, IOException {
+ int status = response.getStatusLine().getStatusCode();
+ HttpEntity entity = response.getEntity();
+ String body = null;
+ if( entity != null ) {
+ body = EntityUtils.toString(entity);
+ }
+ if( status != 200 ) {
+ throw new RuntimeException("No stub for url: '" + stubUrl + "' body: '" + body + "' found.");
+ }
+ return body;
+ }
+ };
+ return client.execute(post, handler);
+ }
+
+ private Map getIndexedParameters() {
+ Set> entries = mockPreparedStatement.getIndexedParameterMap()
+ .entrySet();
+
+ if (entries.isEmpty()) {
+ return new HashMap<>();
+ }
+ return entries.stream().collect(Collectors.toMap(entry -> String.valueOf(getIndex(entry.getKey())),
+ entry -> {
+ if( entry.getValue() == null ) {
+ return "null";
+ } else if(entry.getValue().getClass() == Timestamp.class) {
+ Timestamp ts = (Timestamp) entry.getValue();
+ return String.valueOf( ts.toInstant().toEpochMilli() );
+ }
+ return entry.getValue().toString();
+ }
+ ));
+ }
+
+ private static String getIndex(ParameterReference parameterReference) {
+ String indexValue = parameterReference.toString().replace("ParameterIndex{index=", "").replace("}", "");
+ return String.valueOf(Integer.parseInt(indexValue));
+ }
+ }
+
+}
diff --git a/servers/rest/src/test/java/org/eclipse/iot/unide/server/jdbc/JdbcMockFactoryTest.java b/servers/rest/src/test/java/org/eclipse/iot/unide/server/jdbc/JdbcMockFactoryTest.java
new file mode 100644
index 0000000..f793368
--- /dev/null
+++ b/servers/rest/src/test/java/org/eclipse/iot/unide/server/jdbc/JdbcMockFactoryTest.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.jdbc;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+
+import com.github.tomakehurst.wiremock.client.WireMock;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+
+public class JdbcMockFactoryTest {
+
+ @Rule
+ public WireMockRule wireMockRule = new WireMockRule( 8080 );
+
+ @Test
+ public void execute_update_statement_should_return_valid_response() throws SQLException {
+ int expectedUpdateResult = 21;
+ wireMockRule.stubFor( WireMock.post( "/sqlStub" )
+ .withRequestBody( WireMock
+ .equalTo( "INSERT INTO TEST(col1, col2, col3, col4) VALUES(?,?,?,?)" ) )
+ .withHeader( "1", WireMock.equalTo( "UpdateValue1" ) )
+ .withHeader( "2", WireMock.equalTo( "UpdateValue2" ) )
+ .withHeader( "3", WireMock.equalTo( "UpdateValue3" ) )
+ .withHeader( "4", WireMock.equalTo( "10.0" ) )
+ .willReturn( WireMock.aResponse().withBody( String.valueOf( expectedUpdateResult ) )
+ .withStatus( 200 ) )
+ );
+
+ Connection mockConnection = JdbcMockFactory.getMockConnection( "http://localhost:8080/sqlStub" );
+ PreparedStatement preparedStatement = mockConnection
+ .prepareStatement( "INSERT INTO TEST(col1, col2, col3, col4) VALUES(?,?,?,?)" );
+ preparedStatement.setString( 1, "UpdateValue1" );
+ preparedStatement.setString( 2, "UpdateValue2" );
+ preparedStatement.setString( 3, "UpdateValue3" );
+ preparedStatement.setDouble( 4, 10 );
+ int updateResult = preparedStatement.executeUpdate();
+ Assert.assertEquals( expectedUpdateResult, updateResult );
+ }
+
+}
diff --git a/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/FileUtils.java b/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/FileUtils.java
new file mode 100644
index 0000000..dc96b82
--- /dev/null
+++ b/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/FileUtils.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.web;
+
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+import org.apache.commons.io.IOUtils;
+
+class FileUtils {
+ static String readFile( String filename ) {
+ ClassLoader classLoader = FileUtils.class.getClassLoader();
+ try {
+ return IOUtils.toString( classLoader.getResourceAsStream( filename ), Charset.defaultCharset() );
+ } catch ( IOException e ) {
+ throw new RuntimeException( e );
+ }
+ }
+}
diff --git a/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/RestEndpointInfluxTest.java b/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/RestEndpointInfluxTest.java
new file mode 100644
index 0000000..c800de4
--- /dev/null
+++ b/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/RestEndpointInfluxTest.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.web;
+
+import static com.jayway.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.Matchers.containsString;
+
+import java.io.IOException;
+
+import org.eclipse.iot.unide.server.MainVerticle;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import com.github.tomakehurst.wiremock.client.WireMock;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+import com.jayway.restassured.RestAssured;
+
+import io.vertx.core.DeploymentOptions;
+import io.vertx.core.Vertx;
+import io.vertx.core.json.JsonObject;
+import io.vertx.ext.unit.TestContext;
+import io.vertx.ext.unit.junit.VertxUnitRunner;
+
+@RunWith( VertxUnitRunner.class )
+public class RestEndpointInfluxTest {
+ private static final String MACHINE_MESSAGE_VALID = "server/messages/machine_message_valid.json";
+ private static final String MACHINE_MESSAGE_INVALID = "server/messages/machine_message_invalid.json";
+ private static final String MEASUREMENT_MESSAGE_VALID = "server/messages/measurement_message_valid.json";
+ private static final String MEASUREMENT_MESSAGE_INVALID = "server/messages/measurement_message_invalid.json";
+ private static final String PROCESS_MESSAGE_VALID = "server/messages/process_message_valid.json";
+ private static final String PROCESS_MESSAGE_INVALID = "server/messages/process_message_invalid.json";
+
+ private static final int PORT = 8080;
+ private static final String APPLICATION_URL = "http://localhost" + ":" + PORT;
+ private static final int WIREMOCK_PORT = 9090;
+ private static final String WIREMOCK_URL = "http://localhost:" + WIREMOCK_PORT;
+
+ private static final String PPMP_REST_PATH = "/rest/v2/";
+ private static final String PPMP_REST_VALIDATE_VALIDATE = "/rest/v2/validate";
+ private Vertx vertx;
+
+ @Rule
+ public final WireMockRule wireMockRule = new WireMockRule( WIREMOCK_PORT );
+
+ @Before
+ public void setUp( TestContext context ) throws IOException {
+ RestAssured.baseURI = APPLICATION_URL;
+ createInfluxDbCreateDatabaseStubs();
+ vertx = Vertx.vertx();
+ DeploymentOptions options = new DeploymentOptions().setConfig( createConfig() );
+ vertx.deployVerticle( MainVerticle.class.getName(), options, context.asyncAssertSuccess() );
+ }
+
+ @After
+ public void after() {
+ vertx.close();
+ }
+
+ @Test
+ public void test_send_valid_ppmp_machine_message_expect_200() {
+ String validMessage = FileUtils.readFile( MACHINE_MESSAGE_VALID );
+ wireMockRule.stubFor( WireMock.post( "/write?u=root&p=root&db=Messages&precision=n&consistency=all" )
+ .withRequestBody( WireMock.equalTo(
+ "ppmp_messages,code=33-02,deviceId=2ca5158b-8350-4592-bff9-755194497d4e "
+ + "description=\"Disk size has reached limit. Unable to write log files.\","
+ + "severity=\"HIGH\",title=\"Disk size limit reached\",type=\"TECHNICAL_INFO\" 1022743810125000000\n" ) )
+ .willReturn( WireMock.aResponse().withBody( "{}" ).withStatus( 200 ) ) );
+
+ given().body( validMessage ).post( PPMP_REST_PATH )
+ .then().statusCode( 200 )
+ .body( containsString( "" ) );
+
+ WireMock.verify( 1,
+ WireMock
+ .postRequestedFor(
+ WireMock.urlEqualTo( "/write?u=root&p=root&db=Messages&precision=n&consistency=all" ) ) );
+ }
+
+ @Test
+ public void test_send_invalid_ppmp_machine_message_expect_400() {
+ testInvalidMessage( PPMP_REST_PATH, MACHINE_MESSAGE_INVALID,
+ "{\"messages[1].ts\":\"is missing but it is required\"}" );
+ }
+
+ @Test
+ public void test_send_valid_ppmp_measurement_message_expect_200() {
+ String validMessage = FileUtils.readFile( MEASUREMENT_MESSAGE_VALID );
+ wireMockRule.stubFor( WireMock.post( "/write?u=root&p=root&db=Measurements&precision=n&consistency=all" )
+ .withRequestBody( WireMock.equalTo(
+ "ppmp_measurements,deviceId=a4927dad-58d4-4580-b460-79cefd56775b,measurementPoint=force value=26.0 1022743810123000000\n"
+ + "ppmp_measurements,deviceId=a4927dad-58d4-4580-b460-79cefd56775b,measurementPoint=force value=23.0 1022743810146000000\n"
+ + "ppmp_measurements,deviceId=a4927dad-58d4-4580-b460-79cefd56775b,measurementPoint=pressure value=52.4 1022743810123000000\n"
+ + "ppmp_measurements,deviceId=a4927dad-58d4-4580-b460-79cefd56775b,measurementPoint=pressure value=46.32 1022743810146000000\n" ) )
+ .willReturn( WireMock.aResponse().withBody( "{}" ).withStatus( 200 ) ) );
+
+ given().body( validMessage ).post( PPMP_REST_PATH )
+ .then().statusCode( 200 )
+ .body( containsString( "" ) );
+
+ WireMock.verify( 1,
+ WireMock
+ .postRequestedFor(
+ WireMock.urlEqualTo( "/write?u=root&p=root&db=Measurements&precision=n&consistency=all" ) ) );
+ }
+
+ @Test
+ public void test_send_invalid_ppmp_measurement_message_expect_400() {
+ testInvalidMessage( PPMP_REST_PATH, MEASUREMENT_MESSAGE_INVALID,
+ "{\"measurements[0].series.$_time\":\"is missing but it is required\",\"measurements[0].series\":\"should have a minimum of 2 properties\"}" );
+ }
+
+ @Test
+ public void test_send_valid_ppmp_process_message_expect_200() {
+ String validMessage = FileUtils.readFile( PROCESS_MESSAGE_VALID );
+ wireMockRule.stubFor( WireMock.post( "/write?u=root&p=root&db=Processes&precision=n&consistency=all" )
+ .withRequestBody( WireMock.containing(
+ "ppmp_processes,deviceId=a4927dad-58d4-4580-b460-79cefd56775b,program=1 payload=" ) )
+ .willReturn( WireMock.aResponse().withBody( "{}" ).withStatus( 200 ) ) );
+
+ given().body( validMessage ).post( PPMP_REST_PATH )
+ .then().statusCode( 200 )
+ .body( containsString( "" ) );
+
+ WireMock.verify( 1,
+ WireMock
+ .postRequestedFor(
+ WireMock.urlEqualTo( "/write?u=root&p=root&db=Processes&precision=n&consistency=all" ) ) );
+ }
+
+ @Test
+ public void test_send_invalid_ppmp_process_message_expect_400() {
+ testInvalidMessage( PPMP_REST_PATH, PROCESS_MESSAGE_INVALID,
+ "{\"measurements\":\"is missing but it is required\"}" );
+ }
+
+ @Test
+ public void test_valid_message_should_return_200() {
+ String invalidMessage = FileUtils.readFile( PROCESS_MESSAGE_VALID );
+ given().body( invalidMessage ).post( PPMP_REST_VALIDATE_VALIDATE )
+ .then().statusCode( 200 )
+ .body( equalTo( "Ppmp Message of type 'PROCESS' is valid" ) );
+ }
+
+
+ private void testInvalidMessage( String url, String testMessageFileName, String failureMessage ) {
+ String invalidMessage = FileUtils.readFile( testMessageFileName );
+ given().body( invalidMessage ).post( url )
+ .then().statusCode( 400 )
+ .body( containsString( failureMessage ) );
+ }
+
+ private void createInfluxDbCreateDatabaseStubs() {
+ wireMockRule.stubFor( WireMock.get( "/ping" )
+ .willReturn( WireMock.aResponse().withBody( "{}" ).withStatus( 200 ) ) );
+ wireMockRule.stubFor( WireMock.post( "/query?u=root&p=root&q=CREATE+DATABASE+%22Messages%22" )
+ .willReturn( WireMock.aResponse().withBody( "{}" ).withStatus( 200 ) ) );
+ wireMockRule.stubFor( WireMock.post( "/query?u=root&p=root&q=CREATE+DATABASE+%22Measurements%22" )
+ .willReturn( WireMock.aResponse().withBody( "{}" ).withStatus( 200 ) ) );
+ wireMockRule.stubFor( WireMock.post( "/query?u=root&p=root&q=CREATE+DATABASE+%22Processes%22" )
+ .willReturn( WireMock.aResponse().withBody( "{}" ).withStatus( 200 ) ) );
+ }
+
+ private JsonObject createConfig() {
+ return new JsonObject()
+ .put( "http.port", PORT )
+ .put( "influxDb.url", WIREMOCK_URL )
+ .put( "influxDb.user", "root" )
+ .put( "influxDb.password", "root" );
+ }
+
+}
diff --git a/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/RestEndpointPostgresTest.java b/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/RestEndpointPostgresTest.java
new file mode 100644
index 0000000..75ec4c5
--- /dev/null
+++ b/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/RestEndpointPostgresTest.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.web;
+
+import static com.jayway.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.containsString;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.eclipse.iot.unide.server.DependencyProvider;
+import org.eclipse.iot.unide.server.MainVerticle;
+import org.eclipse.iot.unide.server.jdbc.JdbcMockFactory;
+import org.eclipse.iot.unide.server.receiver.ReceiverException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.FixMethodOrder;
+import org.junit.runners.MethodSorters;
+import org.mockito.Mockito;
+
+import com.github.tomakehurst.wiremock.client.WireMock;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+import com.jayway.restassured.RestAssured;
+
+import org.eclipse.iot.unide.server.receiver.Receiver;
+import io.vertx.core.DeploymentOptions;
+import io.vertx.core.Vertx;
+import io.vertx.core.json.JsonObject;
+import io.vertx.ext.unit.TestContext;
+import io.vertx.ext.unit.junit.VertxUnitRunner;
+
+@RunWith(VertxUnitRunner.class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class RestEndpointPostgresTest {
+ private static final String MACHINE_MESSAGE_VALID = "server/messages/machine_message_valid.json";
+ private static final String MACHINE_MESSAGE_INVALID = "server/messages/machine_message_invalid.json";
+ private static final String MEASUREMENT_MESSAGE_VALID = "server/messages/measurement_message_valid.json";
+ private static final String MEASUREMENT_MESSAGE_INVALID = "server/messages/measurement_message_invalid.json";
+ private static final String PROCESS_MESSAGE_VALID = "server/messages/process_message_valid.json";
+ private static final String PROCESS_MESSAGE_INVALID = "server/messages/process_message_invalid.json";
+
+ private static final int PORT = 8080;
+ private static final String APPLICATION_URL = "http://localhost" + ":" + PORT;
+ private static final int WIREMOCK_PORT = 9090;
+ private static final String WIREMOCK_URL = "http://localhost:" + WIREMOCK_PORT;
+
+ private static final String PPMP_REST_PATH = "/rest/v2/";
+ private Connection mockConnection;
+ private Vertx vertx;
+
+ @Rule
+ public final WireMockRule wireMockRule = new WireMockRule(WIREMOCK_PORT);
+
+ @Before
+ public void setUp(TestContext context) throws IOException, ReceiverException, SQLException {
+ RestAssured.baseURI = APPLICATION_URL;
+
+ vertx = Vertx.vertx();
+ mockConnection = JdbcMockFactory.getMockConnection(WIREMOCK_URL + "/sqlStub");
+ DeploymentOptions options = new DeploymentOptions().setConfig(createConfig());
+
+ javax.sql.DataSource dsMock = Mockito.mock(javax.sql.DataSource.class);
+ Mockito.when(dsMock.getConnection()).thenReturn(mockConnection);
+
+ DependencyProvider dependencyProvider = Mockito.spy(new DependencyProvider(createConfig()));
+ Mockito.when(dependencyProvider.getConnection()).thenReturn(() -> mockConnection);
+ Mockito.when(dependencyProvider.getDataSource()).thenReturn(dsMock);
+
+ Receiver postgresReceiver = Mockito.spy(dependencyProvider.getReceiver());
+ Mockito.when(dependencyProvider.getReceiver()).thenReturn(postgresReceiver);
+ Mockito.doAnswer((Void) -> null).when(postgresReceiver).init();
+
+ vertx.deployVerticle(new MainVerticle(dependencyProvider), options, context.asyncAssertSuccess());
+ }
+
+ @After
+ public void after() {
+ try {
+ mockConnection.close();
+ } catch (SQLException e) {
+ throw new RuntimeException("Not possible to close mock connection", e);
+ }
+ vertx.close();
+ }
+
+ @Test
+ public void test_send_valid_ppmp_machine_message_expect_200() {
+ String validMessage = FileUtils.readFile(MACHINE_MESSAGE_VALID);
+ wireMockRule.stubFor(WireMock.post("/sqlStub")
+ .withRequestBody(WireMock.equalTo(
+ "INSERT INTO ppmp_messages(time, deviceid, code, severity, title, description, hint, type) VALUES(?,?,?,?,?,?,?,?)"))
+ .withHeader("1", WireMock.equalTo("1022743810125"))
+ .withHeader("2", WireMock.equalTo("2ca5158b-8350-4592-bff9-755194497d4e"))
+ .withHeader("3", WireMock.equalTo("33-02")).withHeader("4", WireMock.equalTo("HIGH"))
+ .withHeader("5", WireMock.equalTo("Disk size limit reached"))
+ .withHeader("6", WireMock.equalTo("Disk size has reached limit. Unable to write log files."))
+ .withHeader("7", WireMock.equalTo("null")).withHeader("8", WireMock.equalTo("TECHNICAL_INFO"))
+ .willReturn(WireMock.aResponse().withBody("1").withStatus(200)));
+
+ given().body(validMessage).post(PPMP_REST_PATH).then().statusCode(200).body(containsString(""));
+
+ WireMock.verify(1, WireMock.postRequestedFor(WireMock.urlEqualTo("/sqlStub")));
+ }
+
+ @Test
+ public void test_send_invalid_ppmp_machine_message_expect_400() {
+ testInvalidMessage(PPMP_REST_PATH, MACHINE_MESSAGE_INVALID,
+ "{\"messages[1].ts\":\"is missing but it is required\"}");
+ }
+
+ @Test
+ public void test_send_valid_ppmp_measurement_message_expect_200() {
+ String validMessage = FileUtils.readFile(MEASUREMENT_MESSAGE_VALID);
+ createPpmpMeasurementMessageStub("1022743810123", "a4927dad-58d4-4580-b460-79cefd56775b", "force",
+ "26.0");
+ createPpmpMeasurementMessageStub("1022743810146", "a4927dad-58d4-4580-b460-79cefd56775b", "force",
+ "23.0");
+ createPpmpMeasurementMessageStub("1022743810123", "a4927dad-58d4-4580-b460-79cefd56775b", "pressure",
+ "52.4");
+ createPpmpMeasurementMessageStub("1022743810146", "a4927dad-58d4-4580-b460-79cefd56775b", "pressure",
+ "46.32");
+
+ given().body(validMessage).post(PPMP_REST_PATH).then().statusCode(200).body(containsString(""));
+
+ WireMock.verify(4, WireMock.postRequestedFor(WireMock.urlEqualTo("/sqlStub")));
+ }
+
+ @Test
+ public void test_send_invalid_ppmp_measurement_message_expect_400() {
+ testInvalidMessage(PPMP_REST_PATH, MEASUREMENT_MESSAGE_INVALID,
+ "{\"measurements[0].series.$_time\":\"is missing but it is required\",\"measurements[0].series\":\"should have a minimum of 2 properties\"}");
+ }
+
+ @Test
+ public void test_send_valid_ppmp_process_message_expect_200() {
+ String validMessage = FileUtils.readFile(PROCESS_MESSAGE_VALID);
+ wireMockRule.stubFor(WireMock.post("/sqlStub")
+ .withRequestBody(WireMock.equalTo(
+ "INSERT INTO ppmp_processes(time, deviceid, programid, payload) VALUES(?,?,?,to_json(?::json))"))
+ .withHeader("1", WireMock.equalTo("1022743810123"))
+ .withHeader("2", WireMock.equalTo("a4927dad-58d4-4580-b460-79cefd56775b"))
+ .withHeader("3", WireMock.equalTo("1")).withHeader("4", WireMock.containing("content-spec"))
+ .willReturn(WireMock.aResponse().withBody("0").withStatus(200)));
+
+ given().body(validMessage).post(PPMP_REST_PATH).then().statusCode(200).body(containsString(""));
+
+ WireMock.verify(1, WireMock.postRequestedFor(WireMock.urlEqualTo("/sqlStub")));
+ }
+
+ @Test
+ public void test_send_invalid_ppmp_process_message_expect_400() {
+ testInvalidMessage(PPMP_REST_PATH, PROCESS_MESSAGE_INVALID,
+ "{\"measurements\":\"is missing but it is required\"}");
+ }
+
+ private void createPpmpMeasurementMessageStub(String time, String deviceId, String measurementPoint, String value) {
+ wireMockRule.stubFor(WireMock.post("/sqlStub")
+ .withRequestBody(WireMock.equalTo(
+ "INSERT INTO ppmp_measurements(time, deviceid, measurementpoint, value) VALUES(?,?,?,?)"))
+ .withHeader("1", WireMock.equalTo(time)).withHeader("2", WireMock.equalTo(deviceId))
+ .withHeader("3", WireMock.equalTo(measurementPoint)).withHeader("4", WireMock.equalTo(value))
+ .willReturn(WireMock.aResponse().withBody("2").withStatus(200)));
+ }
+
+ private void testInvalidMessage(String url, String testMessageFileName, String failureMessage) {
+ String invalidMessage = FileUtils.readFile(testMessageFileName);
+ given().body(invalidMessage).post(url).then().statusCode(400).body(containsString(failureMessage));
+ }
+
+ private JsonObject createConfig() {
+ return new JsonObject().put("http.port", PORT).put("sqlDb.url", "jdbc:postgresql://localhost:5432/unide_ppmp")
+ .put("sqlDb.user", "postgres").put("sqlDb.password", "").put("persistence.enable", true)
+ .put("persistence.system", "sql");
+ }
+
+}
diff --git a/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/RestEndpointValidationTest.java b/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/RestEndpointValidationTest.java
new file mode 100644
index 0000000..fc0c33c
--- /dev/null
+++ b/servers/rest/src/test/java/org/eclipse/iot/unide/server/web/RestEndpointValidationTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2018 Bosch Software Innovations GmbH. All rights reserved.
+ */
+
+package org.eclipse.iot.unide.server.web;
+
+import static com.jayway.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.collection.IsEmptyCollection.empty;
+
+import java.io.IOException;
+
+import org.eclipse.iot.unide.server.MainVerticle;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
+import com.jayway.restassured.RestAssured;
+
+import io.vertx.core.DeploymentOptions;
+import io.vertx.core.Vertx;
+import io.vertx.core.json.JsonObject;
+import io.vertx.ext.unit.TestContext;
+import io.vertx.ext.unit.junit.VertxUnitRunner;
+
+/**
+ * Unit test for validation Endpoint.
+ *
+ * This test ensures that the validation endpoint is still working when persistence is disabled.
+ */
+@RunWith( VertxUnitRunner.class )
+public class RestEndpointValidationTest {
+
+ private static final String PROCESS_MESSAGE_VALID = "server/messages/process_message_valid.json";
+ private static final String PROCESS_MESSAGE_INVALID = "server/messages/process_message_invalid.json";
+
+ private static final int PORT = 8080;
+ private static final String APPLICATION_URL = "http://localhost" + ":" + PORT;
+ private static final int WIREMOCK_PORT = 9090;
+
+ private static final String PPMP_REST_VALIDATE_VALIDATE = "/rest/v2/validate";
+ private Vertx vertx;
+
+ @Rule
+ public final WireMockRule wireMockRule = new WireMockRule( WIREMOCK_PORT );
+
+ @Before
+ public void setUp( TestContext context ) throws IOException {
+ RestAssured.baseURI = APPLICATION_URL;
+ vertx = Vertx.vertx();
+ DeploymentOptions options = new DeploymentOptions()
+ .setConfig( new JsonObject().put( "http.port", PORT )
+ .put( "persistence.enable", false ) );
+ vertx.deployVerticle( MainVerticle.class.getName(), options, context.asyncAssertSuccess() );
+ }
+
+ @After
+ public void after() {
+ vertx.close();
+ }
+
+ @Test
+ public void test_valid_message_should_return_200() {
+ String invalidMessage = FileUtils.readFile( PROCESS_MESSAGE_VALID );
+ given().body( invalidMessage ).post( PPMP_REST_VALIDATE_VALIDATE )
+ .then().statusCode( 200 )
+ .body( equalTo( "Ppmp Message of type 'PROCESS' is valid" ) );
+ assertThat( wireMockRule.getServeEvents().getRequests(), empty() );
+ }
+
+ @Test
+ public void test_valid_message_should_return_400() {
+ String invalidMessage = FileUtils.readFile( PROCESS_MESSAGE_INVALID );
+ given().body( invalidMessage ).post( PPMP_REST_VALIDATE_VALIDATE )
+ .then().statusCode( 400 )
+ .body( equalTo(
+ "{\"measurements\":\"is missing but it is required\"}" ) );
+ assertThat( wireMockRule.getServeEvents().getRequests(), empty() );
+ }
+
+}
diff --git a/servers/rest/src/test/java/server/RestEndpointTests.java b/servers/rest/src/test/java/server/RestEndpointTests.java
deleted file mode 100644
index 11a2cc9..0000000
--- a/servers/rest/src/test/java/server/RestEndpointTests.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (c) 2017 Bosch Software Innovations GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package server;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import io.vertx.core.AbstractVerticle;
-import io.vertx.core.DeploymentOptions;
-import io.vertx.core.Vertx;
-import io.vertx.core.json.JsonObject;
-import io.vertx.ext.unit.Async;
-import io.vertx.ext.unit.TestContext;
-import io.vertx.ext.unit.junit.RunTestOnContext;
-import io.vertx.ext.unit.junit.VertxUnitRunner;
-
-import org.apache.commons.io.IOUtils;
-
-/**
- * Unit Tests for REST-endpoints
- */
-@RunWith(VertxUnitRunner.class)
-public class RestEndpointTests extends AbstractVerticle{
-
- private static final String TEST_FILE_NAME = "test_message.json";
- private static String TEST_MESSAGE;
- private static final int port = 8080;
-
- @BeforeClass
- public static void readFileContent() throws IOException {
- ClassLoader classLoader = RestEndpointTests.class.getClassLoader();
- TEST_MESSAGE = IOUtils.toString(classLoader.getResourceAsStream(TEST_FILE_NAME),Charset.defaultCharset());
- }
-
- @Rule
- public final RunTestOnContext rule = new RunTestOnContext(Vertx::vertx);
-
- /**
- * Setup verticle deployment
- * @param context
- * @throws IOException
- */
- @Before
- public void setUp(TestContext context) throws IOException {
- vertx = Vertx.vertx();
- DeploymentOptions options = new DeploymentOptions()
- .setConfig(new JsonObject().put("http.port", port)
- );
- vertx.deployVerticle(server.endpoints.RestEndpoints.class.getName(), options, context.asyncAssertSuccess());
- }
-
- /**
- * Closing verticle at the end
- * @param context
- */
- @After
- public void tearDown(TestContext context) {
- vertx.close(context.asyncAssertSuccess());
- }
-
- /**
- * Test for machine-message endpoint
- * @param context
- */
- @Test
- public void testMessageEndpoint(TestContext context){
- Async async = context.async();
- vertx.createHttpClient().post(port, "localhost", "/rest/v2/message?validate=true", response -> {
- context.assertEquals(response.statusCode(), 200);
- response.bodyHandler(body -> {
- async.complete();
- });
- })
- .putHeader("content-type", "application/json")
- .putHeader("content-length", String.valueOf(TEST_MESSAGE.length()))
- .write(TEST_MESSAGE)
- .end();
- }
-
- /**
- * Test for measurement-message endpoint
- * @param context
- */
- @Test
- public void testMeasurementEndpoint(TestContext context){
- Async async = context.async();
- vertx.createHttpClient().post(port, "localhost", "/rest/v2/message?validate=true", response -> {
- context.assertEquals(response.statusCode(), 200);
- response.bodyHandler(body -> {
- async.complete();
- });
- })
- .putHeader("content-type", "application/json")
- .putHeader("content-length", String.valueOf(TEST_MESSAGE.length()))
- .write(TEST_MESSAGE)
- .end();
- }
-
- /**
- * Test for process-message endpoint
- * @param context
- */
- @Test
- public void testProcessEndpoint(TestContext context){
- Async async = context.async();
- vertx.createHttpClient().post(port, "localhost", "/rest/v2/message?validate=true", response -> {
- context.assertEquals(response.statusCode(), 200);
- response.bodyHandler(body -> {
- async.complete();
- });
- })
- .putHeader("content-type", "application/json")
- .putHeader("content-length", String.valueOf(TEST_MESSAGE.length()))
- .write(TEST_MESSAGE)
- .end();
- }
-
- /**
- * Test for influxDB activation endpoint
- * @param context
- */
- @Test
- public void testInfluxDbActivation(TestContext context){
- Async async = context.async();
- vertx.createHttpClient().post(port, "localhost", "/influxdb?active=true", response -> {
- context.assertEquals(response.statusCode(), 200);
- response.bodyHandler(body -> {
- context.assertEquals(body.toString(), "InfluxDB activated");
- async.complete();
- });
- })
- .putHeader("content-type", "application/json")
- .end();
- }
-
- /**
- * Test for global GET-endpoint
- * @param context
- */
- @Test
- public void testGet(TestContext context){
- Async async = context.async();
- vertx.createHttpClient().getNow(port, "localhost", "/", response -> {
- context.assertEquals(response.statusCode(), 200);
- context.assertEquals(response.getHeader("content-type"), "text/html");
- response.bodyHandler(body -> {
- context.assertEquals(body.toString(), "This is the service for validating PPMP-messages ");
- async.complete();
- });
- });
- }
-
-}
diff --git a/servers/rest/src/test/resources/log4j.properties b/servers/rest/src/test/resources/log4j.properties
new file mode 100644
index 0000000..3454c8f
--- /dev/null
+++ b/servers/rest/src/test/resources/log4j.properties
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2017 Bosch Software Innovations GmbH. All rights reserved.
+#
+
+# Root logger option
+log4j.rootLogger=INFO, stdout, file
+
+# Redirect log messages to console
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
+
+# Redirect log messages to a log file, support file rolling.
+log4j.appender.file=org.apache.log4j.RollingFileAppender
+log4j.appender.file.File=unide.log
+log4j.appender.file.MaxFileSize=5MB
+log4j.appender.file.MaxBackupIndex=10
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
diff --git a/servers/rest/src/test/resources/test_message.json b/servers/rest/src/test/resources/server/messages/machine_message_invalid.json
similarity index 61%
rename from servers/rest/src/test/resources/test_message.json
rename to servers/rest/src/test/resources/server/messages/machine_message_invalid.json
index d105abf..01ca741 100644
--- a/servers/rest/src/test/resources/test_message.json
+++ b/servers/rest/src/test/resources/server/messages/machine_message_invalid.json
@@ -14,22 +14,14 @@
"messages":
[
{
- "origin": "sensor-id-992.2393.22",
- "ts": "2002-05-30T09:30:10.123+02:00",
- "type": "DEVICE",
+ "ts": "2002-05-30T09:30:10.125+02:00",
+ "type": "TECHNICAL_INFO",
"severity": "HIGH",
- "code": "190ABT",
- "title": "control board damaged",
- "description": "Electronic control board or its electrical connections are damaged",
- "hint": "Check the control board",
- "metaData":
- {
- "firmware": "20130304_22.020"
- }
+ "code": "33-02",
+ "title": "Disk size limit reached",
+ "description": "Disk size has reached limit. Unable to write log files."
},
-
{
- "ts": "2002-05-30T09:30:10.125+02:00",
"type": "TECHNICAL_INFO",
"severity": "HIGH",
"code": "33-02",
diff --git a/bindings/ppmp-java-binding/src/test/resources/message.json b/servers/rest/src/test/resources/server/messages/machine_message_valid.json
similarity index 57%
rename from bindings/ppmp-java-binding/src/test/resources/message.json
rename to servers/rest/src/test/resources/server/messages/machine_message_valid.json
index d105abf..79d260f 100644
--- a/bindings/ppmp-java-binding/src/test/resources/message.json
+++ b/servers/rest/src/test/resources/server/messages/machine_message_valid.json
@@ -13,21 +13,6 @@
"messages":
[
- {
- "origin": "sensor-id-992.2393.22",
- "ts": "2002-05-30T09:30:10.123+02:00",
- "type": "DEVICE",
- "severity": "HIGH",
- "code": "190ABT",
- "title": "control board damaged",
- "description": "Electronic control board or its electrical connections are damaged",
- "hint": "Check the control board",
- "metaData":
- {
- "firmware": "20130304_22.020"
- }
- },
-
{
"ts": "2002-05-30T09:30:10.125+02:00",
"type": "TECHNICAL_INFO",
diff --git a/bindings/ppmp-java-binding/src/test/resources/measurement.json b/servers/rest/src/test/resources/server/messages/measurement_message_invalid.json
similarity index 80%
rename from bindings/ppmp-java-binding/src/test/resources/measurement.json
rename to servers/rest/src/test/resources/server/messages/measurement_message_invalid.json
index e848cbf..e8ef377 100644
--- a/bindings/ppmp-java-binding/src/test/resources/measurement.json
+++ b/servers/rest/src/test/resources/server/messages/measurement_message_invalid.json
@@ -1,38 +1,38 @@
{
"content-spec": "urn:spec://eclipse.org/unide/measurement-message#v2",
- "device":
+ "device":
{
"deviceID": "a4927dad-58d4-4580-b460-79cefd56775b",
"operationalStatus": "normal",
- "metaData":
+ "metaData":
{
"swVersion": "2.0.3.13",
"swBuildID": "41535"
}
},
- "part":
+ "part":
{
"partTypeID": "F00VH07328",
"partID": "420003844",
"result": "NOK",
"code": "HUH289",
- "metaData":
+ "metaData":
{
"chargeID": "845849",
"toolID": "32324-432143"
}
},
- "measurements":
+ "measurements":
[
{
"ts": "2002-05-30T09:30:10.123+02:00",
"result": "NOK",
"code": "0000 EE01",
- "limits":
+ "limits":
{
- "temperature":
+ "temperature":
{
"upperError": 4444,
"lowerError": 44,
@@ -41,16 +41,9 @@
}
},
- "series":
+ "series":
{
- "$_time":
- [
- 0,
- 23,
- 24
- ],
-
- "temperature":
+ "temperature":
[
45.4243,
46.42342,
@@ -62,31 +55,37 @@
{
"ts": "2002-05-30T09:30:10.123+02:00",
"result": "OK",
- "limits":
+ "limits":
{
- "force":
+ "force":
{
"upperError": 25,
"lowerError": 20
},
- "pressure":
+ "pressure":
{
"upperError": 60,
"lowerError": 40.4
}
},
- "series":
+ "series":
{
- "force":
+ "$_time":
+ [
+ 0,
+ 23,
+ 24
+ ],
+ "force":
[
26,
23,
24
],
- "pressure":
+ "pressure":
[
52.4,
46.32,
diff --git a/servers/rest/src/test/resources/server/messages/measurement_message_valid.json b/servers/rest/src/test/resources/server/messages/measurement_message_valid.json
new file mode 100644
index 0000000..789390e
--- /dev/null
+++ b/servers/rest/src/test/resources/server/messages/measurement_message_valid.json
@@ -0,0 +1,67 @@
+{
+ "content-spec": "urn:spec://eclipse.org/unide/measurement-message#v2",
+ "device":
+ {
+ "deviceID": "a4927dad-58d4-4580-b460-79cefd56775b",
+ "operationalStatus": "normal",
+ "metaData":
+ {
+ "swVersion": "2.0.3.13",
+ "swBuildID": "41535"
+ }
+ },
+
+ "part":
+ {
+ "partTypeID": "F00VH07328",
+ "partID": "420003844",
+ "result": "NOK",
+ "code": "HUH289",
+ "metaData":
+ {
+ "chargeID": "845849",
+ "toolID": "32324-432143"
+ }
+ },
+
+ "measurements":
+ [
+ {
+ "ts": "2002-05-30T09:30:10.123+02:00",
+ "result": "OK",
+ "limits":
+ {
+ "force":
+ {
+ "upperError": 25,
+ "lowerError": 20
+ },
+
+ "pressure":
+ {
+ "upperError": 60,
+ "lowerError": 40.4
+ }
+ },
+ "series":
+ {
+ "$_time":
+ [
+ 0,
+ 23
+ ],
+ "force":
+ [
+ 26,
+ 23
+ ],
+
+ "pressure":
+ [
+ 52.4,
+ 46.32
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/servers/rest/src/test/resources/server/messages/process_message_invalid.json b/servers/rest/src/test/resources/server/messages/process_message_invalid.json
new file mode 100644
index 0000000..7405dae
--- /dev/null
+++ b/servers/rest/src/test/resources/server/messages/process_message_invalid.json
@@ -0,0 +1,21 @@
+{
+ "content-spec" : "urn:spec://eclipse.org/unide/process-message#v2",
+ "device" : {
+ "deviceID" : "a4927dad-58d4-4580-b460-79cefd56775b",
+ "operationalStatus" : "normal",
+ "metaData" : {
+ "swVersion" : "2.0.3.13",
+ "swBuildId" : "41535"
+ }
+ },
+ "process" : {
+ "externalProcessId" : "b4927dad-58d4-4580-b460-79cefd56775b",
+ "ts" : "2002-05-30T09:30:10.123+02:00",
+ "result" : "NOK",
+ "shutoffPhase" : "phase 1",
+ "program" : {
+ "id" : "1",
+ "lastChangedDate" : "2002-05-30T09:30:10.123+02:00"
+ }
+ }
+}
\ No newline at end of file
diff --git a/servers/rest/src/test/resources/server/messages/process_message_valid.json b/servers/rest/src/test/resources/server/messages/process_message_valid.json
new file mode 100644
index 0000000..97f45a4
--- /dev/null
+++ b/servers/rest/src/test/resources/server/messages/process_message_valid.json
@@ -0,0 +1,37 @@
+{
+ "content-spec" : "urn:spec://eclipse.org/unide/process-message#v2",
+ "device" : {
+ "deviceID" : "a4927dad-58d4-4580-b460-79cefd56775b",
+ "operationalStatus" : "normal",
+ "metaData" : {
+ "swVersion" : "2.0.3.13",
+ "swBuildId" : "41535"
+ }
+ },
+ "process" : {
+ "externalProcessId" : "b4927dad-58d4-4580-b460-79cefd56775b",
+ "ts" : "2002-05-30T09:30:10.123+02:00",
+ "result" : "NOK",
+ "shutoffPhase" : "phase 1",
+ "program" : {
+ "id" : "1",
+ "name" : "Program 1",
+ "lastChangedDate" : "2002-05-30T09:30:10.123+02:00"
+ }
+ },
+ "measurements" : [
+ {
+ "ts" : "2002-05-30T09:30:10.123+02:00",
+ "phase" : "phasen name 2",
+ "name" : "500 Grad links drehen",
+ "result" : "NOK",
+ "code" : "0000 EE01",
+ "series" : {
+ "time" : [0, 23, 24],
+ "force" : [26, 23, 24],
+ "pressure" : [52.4, 46.32, 44.2432],
+ "temperature" : [45.4243, 46.42342, 44.2432]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/website/.babelrc b/website/.babelrc
new file mode 100644
index 0000000..02d5696
--- /dev/null
+++ b/website/.babelrc
@@ -0,0 +1,13 @@
+{
+ "presets": [["env", {
+ "targets": {
+ "browsers": [
+ "> 1%",
+ "not ie < 11"
+ ]
+ }
+ }]],
+ "plugins": [
+ "transform-runtime"
+ ]
+}
diff --git a/website/.eslintrc b/website/.eslintrc
new file mode 100644
index 0000000..760e5c6
--- /dev/null
+++ b/website/.eslintrc
@@ -0,0 +1,101 @@
+{
+ "parser": "babel-eslint",
+ "parserOptions": {
+ "ecmaVersion": 6
+ },
+ "plugins": [
+ "standard", "promise", "html", "babel"
+ ],
+ "extends": ["standard", "vue"],
+ "env": {
+ "browser": true,
+ "jquery": false
+ },
+ "globals": {
+ "chrome": true,
+ "browser": true,
+ "nw": true
+ },
+ "rules": {
+ "key-spacing": ["error", {
+ "align": {
+ "beforeColon": false,
+ "afterColon": true,
+ "on": "value"
+ },
+ "multiLine": {
+ "beforeColon": false,
+ "afterColon": true
+ }
+ }],
+ "brace-style": ["warn", "1tbs", {
+ "allowSingleLine": false
+ }],
+ "camelcase": ["error", {
+ "properties": "always"
+ }],
+ "comma-style": ["warn", "last"],
+ "consistent-return": ["off"],
+ "default-case": ["error"],
+ "indent": ["error", 2, {
+ "SwitchCase": 1,
+ "MemberExpression": 1,
+ "VariableDeclarator": {
+ "var": 2,
+ "let": 2,
+ "const": 3
+ },
+ "FunctionDeclaration": {
+ "body": 1,
+ "parameters": "first"
+ },
+ "FunctionExpression": {
+ "body": 1,
+ "parameters": "first"
+ },
+ "CallExpression": {
+ "arguments": "first"
+ },
+ "ArrayExpression": "first",
+ "ObjectExpression": 1
+ }],
+ "keyword-spacing": ["error", {
+ "before": true,
+ "after": true,
+ "overrides": {
+ "if": {
+ "after": false
+ },
+ "for": {
+ "after": false
+ },
+ "while": {
+ "after": false
+ },
+ "catch": {
+ "after": false
+ }
+ }
+ }],
+ "no-multi-spaces": "off",
+ "no-shadow": ["warn"],
+ "no-unused-vars": ["warn"],
+ "no-unused-expressions": "off",
+ "no-use-before-define": ["error", {
+ "functions": true,
+ "classes": true,
+ "variables": true
+ }],
+ "one-var": ["error", "always"],
+ "one-var-declaration-per-line": ["error", "always"],
+ "quote-props": ["warn", "as-needed"],
+ "semi": ["error", "always"],
+ "space-before-function-paren": ["error", "never"],
+ "vars-on-top": "error",
+
+ "promise/param-names": "warn",
+ "promise/always-return": "warn",
+ "promise/catch-or-return": "warn"
+ }
+}
+
diff --git a/website/.gitignore b/website/.gitignore
new file mode 100644
index 0000000..4d40280
--- /dev/null
+++ b/website/.gitignore
@@ -0,0 +1,16 @@
+# dependencies
+node_modules
+
+# logs
+npm-debug.log
+
+# Nuxt build
+.nuxt
+
+# Nuxt generate
+dist
+
+plantuml.jar
+
+# https://git.eclipse.org/r/www.eclipse.org/unide
+unide
diff --git a/website/README.md b/website/README.md
new file mode 100644
index 0000000..e2e9360
--- /dev/null
+++ b/website/README.md
@@ -0,0 +1,22 @@
+# unide
+
+> Eclipse Unide: Understand Industry devices
+
+## Build Setup
+
+``` bash
+# install dependencies
+$ npm install # Or yarn install
+
+# serve with hot reload at localhost:3000
+$ npm run dev
+
+# build for production and launch server
+$ npm run build
+$ npm start
+
+# generate static project
+$ npm run generate
+```
+
+For detailed explanation on how things work, checkout the [Nuxt.js docs](https://github.com/nuxt/nuxt.js).
diff --git a/website/assets/schema.js b/website/assets/schema.js
new file mode 100644
index 0000000..d246f70
--- /dev/null
+++ b/website/assets/schema.js
@@ -0,0 +1,128 @@
+import cloneDeep from 'lodash/clonedeep';
+import cloneDeepWith from 'lodash/clonedeepWith';
+import omit from 'lodash/omit';
+
+/*
+schemas are enriched with:
+ $step: a step of a (pseudo) json path,
+ $parent: an object for backreference, consisting of
+ 0: actual parent object
+ 1: schema hiearchy parent
+ 2: key to the hierarchy parent
+ $id: running counter for unique reference
+
+*/
+
+class Schema {
+ constructor(step, parent, original) {
+ this.$id = Schema.idx++;
+ this.$step = step;
+ this.$parent = parent;
+ if(original) {
+ this.parseFrom(original);
+ }
+ }
+ toJSON(obj = this) {
+ return cloneDeepWith(obj, (value, key, original, stack) => {
+ if(value instanceof Schema) {
+ return Object.entries(value).filter(([k, v]) => ['$id', '$step', '$parent'].indexOf(k) < 0).reduce((l, [k, v]) => {
+ l[k] = this.toJSON(v);
+ return l;
+ }, {});
+ }
+ });
+ }
+ getPath() {
+ let path = '';
+ if(this.$parent) {
+ path += this.$parent.schema.getPath();
+ if(this.$parent.schema.type === 'object') {
+ path += '.';
+ }
+ }
+ path += this.$step;
+ this.getPath = () => path;
+ return path;
+ }
+ parseFrom(schema) {
+ // http://json-schema.org/latest/json-schema-core.html#rfc.section.4.3.1
+ if(schema === true) {
+ schema = {};
+ } else if(schema === false) {
+ schema = {
+ not: true
+ };
+ }
+ Object.assign(this, omit(cloneDeep(schema), [
+ '$step', '$id', '$parent',
+ 'items', 'properties', 'patternProperties', /* "dependencies", */
+ 'additionalItems', 'additionalProperties',
+ 'contains', 'propertyNames', 'not',
+ /* "if", "then", "else", "propertyNames", "contains", "definitions", */
+ 'allOf', 'anyOf', 'oneOf']));
+
+ if(schema.items) {
+ if(schema.items instanceof Array) {
+ this.items = schema.items.map((item, idx) =>
+ (new Schema(
+ `[${idx}]`,
+ { schema: this, path: `items[${idx}]` }))
+ .parseFrom(schema.items[idx])
+ );
+ } else {
+ this.items = (new Schema(
+ '[*]',
+ { schema: this, path: 'items' }))
+ .parseFrom(schema.items);
+ }
+ }
+ // Object with subschemas
+ // the excluded keywords are for validation but don't create new children
+ ['properties', 'patternProperties'] /*, 'dependencies' */
+ .filter(key => schema.hasOwnProperty(key))
+ .forEach(key =>
+ Object.entries(schema[key])
+ // .filter(([subkey, dependency]) => !(dependency instanceof Array)) // just needed for dependencies
+ .forEach(([subkey, subschema], idx) => {
+ this[key] = this[key] || {};
+ this[key][subkey] = (new Schema(
+ `${key === 'patternProperties' ? '<field>' : subkey}`,
+ { schema: this, path: `${key}["${subkey}"]` }))
+ .parseFrom(subschema);
+ })
+ );
+ // simple direct subschemas
+ // the excluded keywords are for validation but don't create new children
+ // Definitions are inline through webpack loader already
+ // additional* is not used here and more quirky to implement
+ [
+ 'additionalItems',
+ 'additionalProperties',
+ 'contains',
+ 'propertyNames',
+ 'not'
+ ] /* 'if', 'then', 'else', 'propertyNames', 'contains', 'definitions' */
+ .filter(key => schema.hasOwnProperty(key))
+ .forEach(path => {
+ this[path] = (new Schema(
+ '+',
+ { schema: this, path }))
+ .parseFrom(schema[path]);
+ });
+ ['allOf', 'anyOf', 'oneOf']
+ .filter(key => schema.hasOwnProperty(key))
+ .forEach(key =>
+ schema[key].forEach((subschema, idx) => {
+ this[key] = this[key] || [];
+ this[key].push((new Schema(
+ `(${idx})${(key === 'anyOf') ? '?' : '+'}`,
+ { schema: this, path: `${key}[${idx}]` }))
+ .parseFrom(subschema));
+ })
+ );
+ return this;
+ }
+}
+Schema.idx = 0;
+
+export default Schema;
diff --git a/website/assets/schemas/v2/measurement_schema.json b/website/assets/schemas/v2/measurement_schema.json
new file mode 100644
index 0000000..024c0d7
--- /dev/null
+++ b/website/assets/schemas/v2/measurement_schema.json
@@ -0,0 +1,172 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/measurement-message#v2",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "type": "object",
+ "description": "Contains information about the device",
+ "properties": {
+ "deviceID": {
+ "type": "string",
+ "description": "The unique ID of the device. As this is used to identify a device independently from time or location the ID itself must be stable and unique. The recommendation is to use a universally unique identifier (UUID).",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "operationalStatus": {
+ "type": "string",
+ "description": "The operationalStatus describes the status of a device. It is a string matching a definition in the Production Performance Manager"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "deviceID"
+ ]
+ },
+ "part": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "partID": {
+ "type": "string",
+ "description": "Identifies a part. This ID comes from a 3rd party system and thus we have no guarantees if this is unique or not.",
+ "maxLength": 256
+ },
+ "partTypeID": {
+ "type": "string",
+ "description": "Identifies a part type",
+ "maxLength": 256
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ }
+ },
+ "additionalProperties": false,
+ "required": []
+ },
+ "measurements": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 36
+ },
+ "limits": {
+ "type": "object",
+ "description": "Provides information about limits for data provided in the series element.",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "object",
+ "description": "The key shall be the name of a measurement point (element of series element). The value is a structure of different upper/lower limits.",
+ "properties": {
+ "lowerError": {
+ "type": "number",
+ "description": "Indicates an error if this limit is underrun"
+ },
+ "lowerWarn": {
+ "type": "number",
+ "description": "Indicates a warning if this limit is underrun"
+ },
+ "target": {
+ "type": "number",
+ "description": "Indicates the intented target value of the measurement"
+ },
+ "upperError": {
+ "type": "number",
+ "description": "Indicates an error if this limit is exceeded"
+ },
+ "upperWarn": {
+ "type": "number",
+ "description": "Indicates a warning if this limit is exceeded"
+ }
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": []
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ },
+ "series": {
+ "type": "object",
+ "description": "The series data collected for the measurements. Every entry matches a Measurement Point of the Device Type. In the case of a time series, one column contains the time offsets.",
+ "properties": {
+ "$_time": {
+ "type": "array",
+ "description": "The time offset in milliseconds (positive values in ascending order starting with 0) to the 'ts' field of the measurement",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "required": [
+ "$_time"
+ ],
+ "minProperties": 2,
+ "additionalProperties": false
+ },
+ "ts": {
+ "format": "date-time",
+ "type": "string",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ }
+ },
+ "required": [
+ "ts",
+ "series"
+ ]
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "content-spec",
+ "device",
+ "measurements"
+ ]
+}
diff --git a/website/assets/schemas/v2/message_schema.json b/website/assets/schemas/v2/message_schema.json
new file mode 100644
index 0000000..39d9cf2
--- /dev/null
+++ b/website/assets/schemas/v2/message_schema.json
@@ -0,0 +1,110 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/measurement-message#v2",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "type": "object",
+ "description": "Contains information about the device",
+ "properties": {
+ "deviceID": {
+ "type": "string",
+ "description": "The unique ID of the device. As this is used to identify a device independently from time or location the ID itself must be stable and unique. The recommendation is to use a universally unique identifier (UUID).",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "operationalStatus": {
+ "type": "string",
+ "description": "The operationalStatus describes the status of a device. It is a string matching a definition in the Production Performance Manager"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "deviceID"
+ ]
+ },
+ "messages": {
+ "minItems": 1,
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Collection of messages",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Code identifying the problem described in the message. The value often stems from the machine e.g. a PLC code. Is similar to code in measurement interface.",
+ "maxLength": 36
+ },
+ "description": {
+ "type": "string",
+ "description": "The description is used to describe the purpose of the message, e.g. the problem",
+ "maxLength": 2000
+ },
+ "hint": {
+ "type": "string",
+ "description": "In case a problem is reported, the hint can be used to point out a possible solution",
+ "maxLength": 2000
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "origin": {
+ "type": "string",
+ "description": "The origin of the message if not the device identified by deviceID in the header element. Could be used to identify a subsystem or a particular sensor/part of the device where the message actually relates to."
+ },
+ "severity": {
+ "type": "string",
+ "description": "Severity of the message",
+ "enum": [
+ "HIGH",
+ "MEDIUM",
+ "LOW",
+ "UNKNOWN"
+ ],
+ "default": "UNKNOWN"
+ },
+ "title": {
+ "type": "string",
+ "description": "Title of the message. If title not set the code will be stored as fallback",
+ "maxLength": 1000
+ },
+ "ts": {
+ "format": "date-time",
+ "type": "string",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of message. Default is DEVICE but can be set to TECHNICAL_INFO indicating a problem with the integration of the actual device. Allowed values: DEVICE, TECHNICAL_INFO",
+ "enum": [
+ "DEVICE",
+ "TECHNICAL_INFO"
+ ],
+ "default": "DEVICE"
+ }
+ },
+ "required": [
+ "ts",
+ "code"
+ ]
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "content-spec",
+ "device",
+ "messages"
+ ]
+}
diff --git a/website/assets/schemas/v2/process_schema.json b/website/assets/schemas/v2/process_schema.json
new file mode 100644
index 0000000..3c68074
--- /dev/null
+++ b/website/assets/schemas/v2/process_schema.json
@@ -0,0 +1,376 @@
+{
+ "definitions": {
+ "device": {
+ "type": "object",
+ "description": "Contains information about the device",
+ "properties": {
+ "deviceID": {
+ "type": "string",
+ "description": "The unique ID of the device. As this is used to identify a device independently from time or location the ID itself must be stable and unique. The recommendation is to use a universally unique identifier (UUID).",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "operationalStatus": {
+ "type": "string",
+ "description": "The operationalStatus describes the status of a device. It is a string matching a definition in the Production Performance Manager"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "deviceID"
+ ]
+ },
+ "limit": {
+ "description": "Provides information about limits for data provided in the series element. The limits is an JSON object where the key is the name of a Measurement Point (see also series element) and the value is a structure of upper/lower limits",
+ "type": "object",
+ "patternProperties": {
+ "^[^$]+": {
+ "oneOf": [{
+ "type": "object",
+ "description": "A constant limit for all corresponding measurements",
+ "properties": {
+ "lowerError": {
+ "description": "Indicates an error if this limit is underrun",
+ "type": "number"
+ },
+ "lowerWarn": {
+ "description": "Indicates a warning if this limit is underrun",
+ "type": "number"
+ },
+ "target": {
+ "description": "Indicates the intented target value of the measurement",
+ "type": "number"
+ },
+ "upperError": {
+ "description": "Indicates an error if this limit is exceeded",
+ "type": "number"
+ },
+ "upperWarn": {
+ "description": "Indicates a warning if this limit is exceeded",
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ }, {
+ "type": "object",
+ "description": "An array of limit values. The items of the array correspond to the respective measurements at the same position.",
+ "properties": {
+ "lowerError": {
+ "description": "Indicates an error if these limits is underrun. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "lowerWarn": {
+ "description": "Indicates a warning if these limits is underrun. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "target": {
+ "description": "Indicates the intented target values. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "upperError": {
+ "description": "Indicates an error if these limits is exceeded. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "upperWarn": {
+ "description": "Indicates a warning if these limits is exceeded. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "additionalProperties": false
+ }]
+ }
+ }
+ }
+ },
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/process-message#v2",
+ "description": "Defines what the format version is"
+ },
+ "device": { "$ref": "#/definitions/device" },
+ "part": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "partID": {
+ "type": "string",
+ "description": "Identifies a part. This ID comes from a 3rd party system and thus we have no guarantees if this is unique or not.",
+ "maxLength": 256
+ },
+ "partTypeID": {
+ "type": "string",
+ "description": "Identifies a part type",
+ "maxLength": 256
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "SINGLE",
+ "BATCH"
+ ],
+ "description": "Describes the type of the part. Type SINGLE means a single item is processed. Type BATCH means multiple items of the same type are processed.",
+ "default": "SINGLE"
+ }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+ "process": {
+ "type": "object",
+ "description": "Contains information about the process. If the process JSON object is set, then all information in measurements are process phases",
+ "properties": {
+ "externalProcessId": {
+ "type": "string",
+ "description": "The process Id identifies the process as part of long living process. The process Id can be used to connect multiple processes in a manufacturing chain. The Id has to be set and tracked by the different devices in the chain.",
+ "maxLength": 36
+ },
+ "metaData": {
+ "type": "object",
+ "properties": {},
+ "additionalProperties": true,
+ "description": "Additional key-value pairs in a JSON structure format. Key and value must be strings"
+ },
+ "program": {
+ "type": "object",
+ "description": "Contains information about the program that was used in the process.",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The ID of the program",
+ "maxLength": 36
+ },
+ "lastChangedDate": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date when the program was last changed"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the program",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "id"
+ ]
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ },
+ "shutoffPhase": {
+ "type": "string",
+ "description": "The ID of the phase that led to stop the process. The shutOffPhase is the phase of the process in which either pre-defined parameters are met to successfully finish the process or an error that stopped the process. That is not necessarily the last phase. The shutOffPhase should be sent when the last process phase is sent."
+ },
+ "shutoffValues": {
+ "type": "object",
+ "description": "The shutoff values contain the values of the process that stopped the process. The shutoffValues is a JSON object where the key is the name of a Measurement Point (see also series element) and the value is a structure of different upper/lower limits and the actual value as described below.",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "object",
+ "properties": {
+ "lowerError": {
+ "type": "number",
+ "description": "Indicates an error if this limit is underrun"
+ },
+ "lowerWarn": {
+ "type": "number",
+ "description": "Indicates a warning if this limit is underrun"
+ },
+ "target": {
+ "type": "number",
+ "description": "Indicates the intented target value of the measurement"
+ },
+ "ts": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Time of the measured value"
+ },
+ "upperWarn": {
+ "type": "number",
+ "description": "Indicates a warning if this limit is exceeded"
+ },
+ "upperError": {
+ "type": "number",
+ "description": "Indicates an error if this limit is exceeded"
+ },
+ "value": {
+ "type": "number",
+ "description": "The final value of the process"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "value"
+ ]
+ }
+ }
+ },
+ "ts": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Start time of the process"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ts"
+ ]
+ },
+ "measurements": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Contains the different phases of the process. Each phase represents an execution step in the process and contains information about that specific execution step. All phases should be sorted by the timestamp of the phase.",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 36
+ },
+ "limits": {
+ "$ref": "#/definitions/limit"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the process phase",
+ "maxLength": 256
+ },
+ "phase": {
+ "type": "string",
+ "description": "The id of the process phase",
+ "maxLength": 256
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ },
+ "specialValues": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Provides information about special or interesting values during the process phase.",
+ "properties": {
+ "$_time": {
+ "type": "integer",
+ "description": "The time offset in milliseconds to the 'ts' field of the measurement"
+ },
+ "name": {
+ "type": "string",
+ "description": "indicates the type of the specialValue (e.g. 'endanzug', 'turningPoint' etc.)"
+ },
+ "value": {
+ "type": "object",
+ "description": "Contains the actual (multidimensional) value of interest. Similarly to series, every entry matches a Measurement Point of the device",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "number"
+ }
+ },
+ "minProperties": 1
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "value"
+ ]
+ }
+ },
+ "series": {
+ "type": "object",
+ "description": "The series data collected for the measurements. Every entry matches a Measurement Point of the device. In the case of a time series, one column contains the time offset in milliseconds (positive values in ascending order starting with 0). In this case the value is the keyword $_time. The maximum size for the measurement value is 10 positions before the decimal point. The decimal places are truncated to 2 in the historical data.",
+ "properties": {
+ "$_time": {
+ "type": "array",
+ "description": "The time offset in milliseconds (positive values in ascending order starting with 0) to the 'ts' field of the measurement",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "ts": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "ts",
+ "series"
+ ]
+ }
+ }
+ },
+ "required": [
+ "content-spec",
+ "device",
+ "process",
+ "measurements"
+ ]
+}
diff --git a/website/assets/schemas/v3/definitions.json b/website/assets/schemas/v3/definitions.json
new file mode 100644
index 0000000..5ad9a9c
--- /dev/null
+++ b/website/assets/schemas/v3/definitions.json
@@ -0,0 +1,260 @@
+{
+ "definitions": {
+ "code": {
+ "type": "string",
+ "description": "The code is an addendum to the result which allows to pass information in the case the result was NOK. The value often stems from the integrated system e.g. a PLC code",
+ "maxLength": 128
+ },
+ "device": {
+ "type": "object",
+ "description": "Contains information about the device",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The unique identification of the device. As this is used to identify a device independently from time or location the id itself must be stable and unique. Recommended is to use a universally unique identifier (UUID).",
+ "maxLength": 36
+ },
+ "mode": {
+ "type": "string",
+ "description": "The operational mode indicates the functional state of the device. This is not restrictected to enum, since it is dependent on the machine, process or use case. Examples are 'auto', 'manual', 'test', 'wait', 'maintenance', 'run', 'stop', 'other' or 'unknown'"
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "INFO",
+ "WARN",
+ "ERROR",
+ "UNKNOWN"
+ ],
+ "default": "UNKNOWN",
+ "description": "The state describes the technical condition of a device."
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
+ "measurements": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "$ref": "#/definitions/code"
+ },
+ "context": {
+ "type": "object",
+ "description": "Provides additional information about the data provided in the series element. An entry in the context applies to the element in the series with the same key.",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "object",
+ "description": "The key shall be the name of a measurement point (element of series element). The value is a structure of additional context information.",
+ "properties": {
+ "accuracy": {
+ "oneOf": [
+ {
+ "type": "number",
+ "description": "A constant that describes the accuracy of the corresponding measurement as absolute value"
+ },
+ {
+ "type": "array",
+ "description": "An array of accuracy values. The items of the array correspond to the respective measurements at the same position.",
+ "items": {
+ "type": "number"
+ }
+ }
+ ]
+ },
+ "limits": {
+ "description": "Provides information about the limit for data provided in the series element. The limit corresponds to the measurement point (see also series element) with the same key. The value is a structure of upper/lower limits and applies to numeric values only.",
+ "type": "object",
+ "oneOf": [
+ {
+ "type": "object",
+ "description": "A constant limit for all corresponding measurements",
+ "properties": {
+ "lowerError": {
+ "description": "Indicates an error if this limit is underrun",
+ "type": "number"
+ },
+ "lowerWarn": {
+ "description": "Indicates a warning if this limit is underrun",
+ "type": "number"
+ },
+ "target": {
+ "description": "Indicates the intented target value of the measurement",
+ "type": "number"
+ },
+ "upperError": {
+ "description": "Indicates an error if this limit is exceeded",
+ "type": "number"
+ },
+ "upperWarn": {
+ "description": "Indicates a warning if this limit is exceeded",
+ "type": "number"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "description": "An array of limit values. The items of the array correspond to the respective measurements at the same position.",
+ "properties": {
+ "lowerError": {
+ "description": "Indicates an error if these limits is underrun. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "lowerWarn": {
+ "description": "Indicates a warning if these limits is underrun. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "target": {
+ "description": "Indicates the intented target values. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "upperError": {
+ "description": "Indicates an error if these limits is exceeded. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "upperWarn": {
+ "description": "Indicates a warning if these limits is exceeded. The values correspond to the respective measurements in the given order.",
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "offset": {
+ "description": "The offset applies to numeric data type only.",
+ "oneOf": [
+ {
+ "type": "number",
+ "description": "Describes the offset of the corresponding measurement as absolute value"
+ },
+ {
+ "type": "array",
+ "description": "An array of offset values. The items of the array correspond to the respective measurements at the same position.",
+ "items": {
+ "type": "number"
+ }
+ }
+ ]
+ },
+ "type": {
+ "type": "string",
+ "description": "The data type of the corresponding measurement value.",
+ "enum": ["BASE64", "BOOLEAN", "NUMBER", "OTHER", "REF", "STRING"],
+ "default": "NUMBER"
+ },
+ "unit": {
+ "type": "string",
+ "description": "Describes the unit of the corresponding measurement. It is recommended to use symbols as defined in https://tools.ietf.org/html/draft-ietf-core-senml-14#section-12.1"
+ }
+ },
+ "minProperties": 1
+ }
+ },
+ "required": []
+ },
+ "result": {
+ "$ref": "#/definitions/result"
+ },
+ "series": {
+ "type": "object",
+ "description": "The series data collected for the measurements. Every entry matches a Measurement Point of the Device Type. In the case of a time series, one column contains the time offsets.",
+ "properties": {
+ "time": {
+ "type": "array",
+ "description": "The time offset in milliseconds (positive values in ascending order starting with 0) to the 'ts' field of the measurement",
+ "items": {
+ "type": "integer"
+ }
+ }
+ },
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "array",
+ "items": {
+ "type": ["boolean", "number", "string"],
+ "description": "The type of this measurement series is dependendant on the context.type. It defaults to number"
+ }
+ }
+ },
+ "required": [
+ "time"
+ ],
+ "minProperties": 2
+ },
+ "ts": {
+ "format": "date-time",
+ "type": "string",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ }
+ },
+ "required": [
+ "ts",
+ "series"
+ ]
+ }
+ },
+ "part": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "$ref": "#/definitions/code"
+ },
+ "id": {
+ "type": "string",
+ "description": "Identifies a part. This id comes from a 3rd party system and thus we have no guarantees if this is unique or not.",
+ "maxLength": 256
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "SINGLE",
+ "BATCH"
+ ],
+ "description": "Describes the type of the part. Type SINGLE means a single item is processed. Type BATCH means multiple items of the same type are processed.",
+ "default": "SINGLE"
+ },
+ "typeId": {
+ "type": "string",
+ "description": "Identifies a part type",
+ "maxLength": 256
+ },
+ "result": {
+ "$ref": "#/definitions/result"
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
+ "result": {
+ "type": "string",
+ "enum": [
+ "OK",
+ "NOK",
+ "UNKNOWN"
+ ],
+ "description": "Information if the result was ok or not. This is only required if part information should be saved.",
+ "default": "UNKNOWN"
+ }
+ }
+}
\ No newline at end of file
diff --git a/website/assets/schemas/v3/measurement_schema.json b/website/assets/schemas/v3/measurement_schema.json
new file mode 100644
index 0000000..d529616
--- /dev/null
+++ b/website/assets/schemas/v3/measurement_schema.json
@@ -0,0 +1,24 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/machine-message#v3",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "$ref": "definitions.json#/definitions/device"
+ },
+ "part": {
+ "$ref": "definitions.json#/definitions/part"
+ },
+ "measurements": {
+ "$ref": "definitions.json#/definitions/measurements"
+ }
+ },
+ "required": [
+ "content-spec",
+ "device",
+ "measurements"
+ ]
+}
\ No newline at end of file
diff --git a/website/assets/schemas/v3/message_schema.json b/website/assets/schemas/v3/message_schema.json
new file mode 100644
index 0000000..f472f9b
--- /dev/null
+++ b/website/assets/schemas/v3/message_schema.json
@@ -0,0 +1,79 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/machine-message#v3",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "$ref": "definitions.json#/definitions/device"
+ },
+ "messages": {
+ "minItems": 1,
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Collection of messages",
+ "properties": {
+ "code": {
+ "$ref": "definitions.json#/definitions/code"
+ },
+ "description": {
+ "type": "string",
+ "description": "The description is used to describe the purpose of the message, e.g. the problem",
+ "maxLength": 2000
+ },
+ "hint": {
+ "type": "string",
+ "description": "In case a problem is reported, the hint can be used to point out a possible solution",
+ "maxLength": 2000
+ },
+ "origin": {
+ "type": "string",
+ "description": "The origin of the message if not the device identified by deviceID in the header element. Could be used to identify a subsystem or a particular sensor/part of the device where the message actually relates to."
+ },
+ "severity": {
+ "type": "string",
+ "description": "Severity of the message",
+ "enum": [
+ "HIGH",
+ "MEDIUM",
+ "LOW",
+ "UNKNOWN"
+ ],
+ "default": "UNKNOWN"
+ },
+ "title": {
+ "type": "string",
+ "description": "Title of the message. If title not set the code will be stored as fallback",
+ "maxLength": 1000
+ },
+ "ts": {
+ "format": "date-time",
+ "type": "string",
+ "description": "Start time of the the data measurment in ISO 8601 format"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of message. Default is DEVICE but can be set to TECHNICAL_INFO indicating a problem with the integration of the actual device. Allowed values: DEVICE, TECHNICAL_INFO",
+ "enum": [
+ "DEVICE",
+ "TECHNICAL_INFO"
+ ],
+ "default": "DEVICE"
+ }
+ },
+ "required": [
+ "ts",
+ "code"
+ ]
+ }
+ }
+ },
+ "required": [
+ "content-spec",
+ "device",
+ "messages"
+ ]
+}
\ No newline at end of file
diff --git a/website/assets/schemas/v3/process_schema.json b/website/assets/schemas/v3/process_schema.json
new file mode 100644
index 0000000..4e5945f
--- /dev/null
+++ b/website/assets/schemas/v3/process_schema.json
@@ -0,0 +1,127 @@
+{
+ "type": "object",
+ "properties": {
+ "content-spec": {
+ "type": "string",
+ "default": "urn:spec://eclipse.org/unide/process-message#v3",
+ "description": "Defines what the format version is"
+ },
+ "device": {
+ "$ref": "definitions.json#/definitions/device"
+ },
+ "part": {
+ "$ref": "definitions.json#/definitions/part"
+ },
+ "process": {
+ "type": "object",
+ "description": "Contains information about the process. If the process JSON object is set, then all information in measurements are process phases",
+ "properties": {
+ "externalId": {
+ "type": "string",
+ "description": "The process id identifies the process as part of long living process. The process id can be used to connect multiple processes in a manufacturing chain. The id has to be set and tracked by the different devices in the chain.",
+ "maxLength": 36
+ },
+ "program": {
+ "type": "object",
+ "description": "Contains information about the program that was used in the process.",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The program identifier",
+ "maxLength": 36
+ },
+ "lastChangedDate": {
+ "type": "string",
+ "format": "date-time",
+ "description": "The date when the program was last changed"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the program",
+ "maxLength": 256
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
+ "result": {
+ "$ref": "definitions.json#/definitions/result"
+ },
+ "shutoffPhase": {
+ "type": "string",
+ "description": "The id of the phase that led to stop the process. The shutOffPhase is the phase of the process in which either pre-defined parameters are met to successfully finish the process or an error that stopped the process. That is not necessarily the last phase. The shutOffPhase should be sent when the last process phase is sent."
+ },
+ "ts": {
+ "type": "string",
+ "format": "date-time",
+ "description": "Start time of the process"
+ }
+ },
+ "required": [
+ "ts"
+ ]
+ },
+ "measurements": {
+ "allOf": [
+ {
+ "$ref": "definitions.json#/definitions/measurements"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the process phase",
+ "maxLength": 256
+ },
+ "phase": {
+ "type": "string",
+ "description": "The id of the process phase",
+ "maxLength": 256
+ },
+ "specialValues": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "description": "Provides information about special or interesting values during the process phase.",
+ "properties": {
+ "time": {
+ "type": "integer",
+ "description": "The time offset in milliseconds to the 'ts' field of the measurement"
+ },
+ "name": {
+ "type": "string",
+ "description": "Indicates the type of the specialValue (e.g. 'shutoff', endanzug', 'turningPoint' etc.)"
+ },
+ "value": {
+ "type": "object",
+ "description": "Contains the actual (multidimensional) value of interest. Similarly to series, every entry matches a Measurement Point of the device",
+ "patternProperties": {
+ "^[^$]+": {
+ "type": "number"
+ }
+ },
+ "minProperties": 1
+ }
+ },
+ "required": [
+ "value"
+ ]
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "required": [
+ "content-spec",
+ "device",
+ "process",
+ "measurements"
+ ]
+}
\ No newline at end of file
diff --git a/website/assets/styles.scss b/website/assets/styles.scss
new file mode 100644
index 0000000..8697471
--- /dev/null
+++ b/website/assets/styles.scss
@@ -0,0 +1,112 @@
+@import "~assets/variables.scss";
+@import "~bulma/bulma";
+@import "~font-awesome/scss/font-awesome.scss";
+@import "~prismjs/themes/prism.css";
+
+body {
+ overflow: visible;
+}
+@include touch {
+ #__layout > div > .container {
+ margin-left: $gap;
+ margin-right: $gap;
+ }
+}
+
+a {
+ text-decoration: underline;
+ &:hover {
+ text-decoration: underline;
+ }
+}
+.footer, .navbar, .sidebar {
+ a {
+ text-decoration: none;
+ }
+}
+.title {
+ font-weight: normal;
+}
+
+.router-link-active {
+ font-weight: bold;
+}
+.footer {
+ font-size: 0.875em;
+ border-top: 1px solid $grey-lighter;
+ margin-left: -1.25rem;
+ margin-right: -1.25rem;
+ padding-top: 1.25rem;
+ margin-top: 1rem;
+ padding: 16px 0px 32px;
+ padding: 2rem 0;
+ span:not(:last-child)::after{
+ content: "\2219";
+ font-size: 1em;
+ font-weight: bold;
+ margin: 0 1em;
+ }
+}
+.is-loading {
+ position: relative;
+ * {
+ pointer-events: none;
+ opacity: 0.5;
+ }
+ &:after {
+ @include loader;
+ position: relative;
+ width: 1em;
+ position: absolute;
+ top: 4em;
+ left: calc(50% - 2.5em);
+ width: 5em;
+ height: 5em;
+ border-width: 0.25em;
+ }
+}
+.__nuxt-error-page {
+ position: relative;
+}
+.accordion {
+ margin-top: 2em;
+ > :first-child {
+ &, & > header {
+ border-top-left-radius: $radius-large;
+ border-top-right-radius: $radius-large;
+ }
+ }
+ :last-child {
+ & {
+ border-bottom-left-radius: $radius-large;
+ border-bottom-right-radius: $radius-large;
+ }
+ &.collapsed {
+ & > header {
+ border-bottom-left-radius: $radius-large;
+ border-bottom-right-radius: $radius-large;
+ }
+ }
+ }
+}
+
+/* prism */
+pre[class*="language-"] {
+ background: $light;
+ border-radius: $radius-large;
+ border: 1px solid $grey-lighter;
+ .number {
+ align-items: inherit;
+ background-color: inherit;
+ border-radius: inherit;
+ display: inherit;
+ font-size: inherit;
+ height: inherit;
+ justify-content: inherit;
+ margin-right: inherit;
+ min-width: inherit;
+ padding: inherit;
+ text-align: inherit;
+ vertical-align: inherit;
+ }
+}
diff --git a/website/assets/variables.scss b/website/assets/variables.scss
new file mode 100644
index 0000000..5414252
--- /dev/null
+++ b/website/assets/variables.scss
@@ -0,0 +1,102 @@
+// https://www.w3.org/WAI/ER/WD-AERT/#q100
+@function brightness($color) {
+ @return ((red($color) * .299) + (green($color) * .587) + (blue($color) * .114)) / 255 * 100%;
+}
+@function findColorInvert($color) {
+ @if (abs(brightness($color)) > 50) {
+ @return black;
+ }
+ @return white;
+}
+
+$fa-font-path: "~font-awesome/fonts";
+
+// Bosch
+$bosch-prussianblue: rgb(0, 50, 100);
+$bosch-matisse: rgb(58, 90, 130);
+$bosch-wildblueyonder: rgb(110, 140, 178);
+$bosch-spindle: rgb(168, 186, 210);
+$bosch-red: rgb(226, 0, 21);
+$bosch-aluminium: rgb(128, 130, 133);
+$bosch-darkgray: rgb(167, 167, 167);
+$bosch-gainsboro: rgb(221, 221, 221);
+
+/*
+rgb(168, 1, 99)
+rgb(63, 19, 108)
+rgb(8, 66, 126)
+rgb(14, 120, 197)
+rgb(19, 153, 160)
+rgb(103, 180, 25)
+rgb(10, 81, 57)
+rgb(66, 76, 88)
+*/
+
+//New CD colors:
+$bosch-eggplant: rgb(185, 2, 118);
+$bosch-windsor: rgb(80, 35, 127);
+$bosch-cobalt: rgb(0, 86, 145);
+$bosch-pacificblue: rgb(0, 142, 207);
+$bosch-bondiblue: rgb(0, 168, 176);
+$bosch-lima: rgb(120, 190, 32);
+$bosch-watercourse: rgb(0, 98, 73);
+$bosch-fiord: rgb(82, 95, 107);
+
+$bosch-prussianblue-invert: findColorInvert($bosch-prussianblue);
+$bosch-matisse-invert: findColorInvert($bosch-matisse);
+$bosch-wildblueyonder-invert: findColorInvert($bosch-wildblueyonder);
+$bosch-spindle-invert: findColorInvert($bosch-spindle);
+$bosch-red-invert: findColorInvert($bosch-red);
+$bosch-aluminium-invert: findColorInvert($bosch-aluminium);
+$bosch-darkgray-invert: findColorInvert($bosch-darkgray);
+$bosch-gainsboro-invert: findColorInvert($bosch-gainsboro);
+$bosch-eggplant-invert: findColorInvert($bosch-eggplant);
+$bosch-windsor-invert: findColorInvert($bosch-windsor);
+$bosch-cobalt-invert: findColorInvert($bosch-cobalt);
+$bosch-pacificblue-invert: findColorInvert($bosch-pacificblue);
+$bosch-bondiblue-invert: findColorInvert($bosch-bondiblue);
+$bosch-lima-invert: findColorInvert($bosch-lima);
+$bosch-watercourse-invert: findColorInvert($bosch-watercourse);
+$bosch-fiord-invert: findColorInvert($bosch-fiord);
+
+$bosch-colors: (
+ "bosch-prussianblue": ($bosch-prussianblue, $bosch-prussianblue-invert),
+ "bosch-matisse": ($bosch-matisse, $bosch-matisse-invert),
+ "bosch-wildblueyonder": ($bosch-wildblueyonder, $bosch-wildblueyonder-invert),
+ "bosch-spindle": ($bosch-spindle, $bosch-spindle-invert),
+ "bosch-red": ($bosch-red, $bosch-red-invert),
+ "bosch-aluminium": ($bosch-aluminium, $bosch-aluminium-invert),
+ "bosch-darkgray": ($bosch-darkgray, $bosch-darkgray-invert),
+ "bosch-gainsboro": ($bosch-gainsboro, $bosch-gainsboro-invert),
+ "bosch-eggplant": ($bosch-eggplant, $bosch-eggplant-invert),
+ "bosch-windsor": ($bosch-windsor, $bosch-windsor-invert),
+ "bosch-cobalt": ($bosch-cobalt, $bosch-cobalt-invert),
+ "bosch-pacificblue": ($bosch-pacificblue, $bosch-pacificblue-invert),
+ "bosch-bondiblue": ($bosch-bondiblue, $bosch-bondiblue-invert),
+ "bosch-lima": ($bosch-lima, $bosch-lima-invert),
+ "bosch-watercourse": ($bosch-watercourse, $bosch-watercourse-invert),
+ "bosch-fiord": ($bosch-fiord, $bosch-fiord-invert)
+);
+
+$primary: $bosch-windsor;
+$success: $bosch-lima;
+$info: $bosch-pacificblue;
+$warning: $bosch-eggplant;
+$danger: $bosch-red;
+
+$primary-invert: findColorInvert($primary);
+$success-invert: white;
+$info-invert: findColorInvert($info);
+$warning-invert: findColorInvert($warning);
+$danger-invert: findColorInvert($danger);
+
+$link: $bosch-windsor;
+$link-hover: $bosch-lima;
+$link-focus-border: $bosch-windsor;
+// $card-cap-bg: $gray-lightest;
+
+$family-sans-serif: Arial, Tahoma, Verdana, FontAwesome;
+@import "~bulma/sass/utilities/_all.sass";
+
+$widescreen: $desktop;
+$fullhd: $desktop;
diff --git a/website/blog/DZone-article-published.md b/website/blog/DZone-article-published.md
new file mode 100644
index 0000000..3a867b5
--- /dev/null
+++ b/website/blog/DZone-article-published.md
@@ -0,0 +1,7 @@
+---
+title: DZone article published
+date: 2017-10-06 00:00:00
+tags: "media"
+---
+A new article about PPMP and the Eclipse Unide project was published at [DZone](https://dzone.com/articles/eclipse-unide-a-way-to-establish-an-open-industry)!
+It explains how to use the [PPMP validator](https://www.eclipse.org/unide/2017/06/29/Validator-Online/), gives an overview of the InfluxDB / Grafana visualisation and how this setup can be used in an Eclipse Testbed.
diff --git a/website/blog/New-process-message-spec.md b/website/blog/New-process-message-spec.md
new file mode 100644
index 0000000..5e2ab3f
--- /dev/null
+++ b/website/blog/New-process-message-spec.md
@@ -0,0 +1,6 @@
+---
+title: New PPMP-Specification for processes
+date: 2017-06-01 00:00:00
+tags: "process message"
+---
+We’re happy to announce, that the process message specification is online! You can find it at [http://www.eclipse.org/unide/specification](http://www.eclipse.org/unide/specification). With this type of messages you have a standard format for sending data out of discrete and possibly complex processes. ![alt text](/unide/images/processPayload.png)
diff --git a/website/blog/New-website.md b/website/blog/New-website.md
new file mode 100644
index 0000000..f458a6d
--- /dev/null
+++ b/website/blog/New-website.md
@@ -0,0 +1,8 @@
+---
+title: Updated Website
+date: 2018-01-26 00:00:00
+tags: "media"
+---
+It turned out that even with multiple reviews, it is possible to have small mistakes in the PPMP documentation. In order to avoid such contradictions between diagrams, specification, json-schema and eventual implementation, we decided to rework the project structure and fixed [the JSON Schemas](https://github.com/eclipse/unide/issues/21). The corresponding uml diagrams are generated with [plantuml](http://plantuml.com/). For even better understandibility, the attributes are sorted lexicographically.
+
+Although the website has the same look, it is completely reworked as a [single-page application](https://en.wikipedia.org/wiki/Single-page_application) to generate the specification directly from the json-schema. Instead of using [hexo](https://hexo.io/) it is now based on [nuxt.js](https://nuxtjs.org/). [Vue.js](https://vuejs.org/) as a basis for nuxt is also used in the [new PPMP client application called binsa](https://github.com/eclipse/unide/tree/master/clients/binsa).
diff --git a/website/blog/News-coverage.md b/website/blog/News-coverage.md
new file mode 100644
index 0000000..204a692
--- /dev/null
+++ b/website/blog/News-coverage.md
@@ -0,0 +1,12 @@
+---
+title: News Coverage
+date: 2016-09-27 09:14:27
+tags: "media"
+---
+After the [Official launch](/unide/2016/09/21/Official%20launch/) of unide and PPMP, there was some media coverage about the project.
+
+Triggered by a statement by [Bosch CEO Volkmar Denner](http://www.bosch.com/en/com/bosch_group/board_management/dr_rer_nat_volkmar_denner/volkmar-denner.html) on *["initiating new machine language for Industry 4.0"](http://www.bosch-presse.de/pressportal/en/bosch-initiates-new-machine-language-for-industry-4-0-65216.html)*, twitter, blogs and magazines mention PPMP, e.g.:
+* [electormagazine](https://www.elektormagazine.com/news/free-ppmp-from-bosch-makes-industry-4-0-open-for-all)
+* [computer-automation](http://www.computer-automation.de/feldebene/vernetzung/artikel/134233/) (de)
+
+Looking forward to spreading the word further.
diff --git a/website/blog/Official-launch.md b/website/blog/Official-launch.md
new file mode 100644
index 0000000..623b7ca
--- /dev/null
+++ b/website/blog/Official-launch.md
@@ -0,0 +1,17 @@
+---
+title: Official launch
+date: 2016-09-21 09:47:43
+tags: "project start"
+---
+Today, we officially launch Unide. In the last days, we have redesigned the logo, published Blog posts and started work on the initial (code) contributions.
+It even seems like good timing, since there was a [survey in Germany about open platforms & standards in industry 4.0](http://m.heise.de/newsticker/meldung/Umfrage-Unternehmen-fordern-offene-Plattform-fuer-die-Industrie-4-0-3327135.html), basically asking for something like Unide/PPMP.
+
+### the logo
+Unide and PPMP's goal is to enable you to connect machines and receive their measurements / alerts. The logo represents that. It has you ("*U*") highlighted and connects to rings. As a side note, we found that the words almost look like *you-nice*.
+
+### blog entries
+If you are interested in further readings, check out the post at [blog.bosch-si.com](http://blog.bosch-si.com).
+
+### initial contributions
+We are working on creating the initial contributions for Unide. Since there are a few legal aspects we have to consider, stay tuned. The code will be published to our [github repository](https://github.com/eclipse/unide).
+
diff --git a/website/blog/Project-approved.md b/website/blog/Project-approved.md
new file mode 100644
index 0000000..cb657a3
--- /dev/null
+++ b/website/blog/Project-approved.md
@@ -0,0 +1,15 @@
+---
+title: Eclipse Project approved
+date: 2016-09-16 12:16:37
+tags: "project start"
+---
+Unide proposal has been approved to be an Eclipse Project! You can now find all relevant information at [https://projects.eclipse.org/projects/iot.unide](https://projects.eclipse.org/projects/iot.unide).
+
+There's still some paperwork pending, but it looks promising! Next steps are
+* creating a proper homepage with relevant information and the PPMP specification
+* license checking of initial commitment code.
+* getting in touch with Eclipse community
+* making plans for the upcoming months
+
+If you are interested in industry 4.0, IoT stack in manufacturing or you are building industry machines and want to find out more about the possiblities with PPMP, let us know: [unide-inbox@eclipse.org](mailto:unide-inbox@eclipse.org?subject=Interested%20in%20contributing)
+
diff --git a/website/blog/Release-0.2.0.md b/website/blog/Release-0.2.0.md
new file mode 100644
index 0000000..6c7c6dc
--- /dev/null
+++ b/website/blog/Release-0.2.0.md
@@ -0,0 +1,128 @@
+---
+title: "Unide 0.2.0 released"
+date: 2018-03-26 10:39:00
+tags: "releases"
+---
+Finally, the second version (0.2.0) of the Eclipse unide project is released! The [REST Server on the Testserver](http://unide.eclipse.org) has been updated as well.
+
+# Quick start
+## Binsa chrome app
+Download the binsa chrome app from [download page](http://download.eclipse.org/unide/binsa.crx). Open your chrome browser at [chrome://extensions](chrome://extensions) and drag the binsa.crx file onto the page. You should be able to see your new chrome app in [chrome://apps](chrome://apps)
+
+## REST Server
+Download the REST server file from [repo.eclipse.org](https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-server/0.2.0/ppmp-server-0.2.0.jar), create a simple configuration file (e.g. application_conf.json):
+```json
+{
+ "http.port": 8090,
+ "persistence.enable": false
+}
+
+```
+and start the server
+```bash
+java -jar ppmp-server-0.2.0.jar -conf application_conf.json
+```
+Point your browser to http://localhost:8090 and see the servers documentation running on your local server! At this point, PPMP validation (via HTTP POST to `/rest/v2/validate`) is enabled, but no persistence.
+
+If you want to send data to the server, a quick way is via [Postman App](https://www.getpostman.com/), which is available as native app or [Chrome app](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en). Once installed and started, you can easily use the "Import > Import From Link" feature to get the prepared [unide.postman_collection.json](https://raw.githubusercontent.com/eclipse/unide/f4d349bc4a0096d3f99e14cf5f8b9f53a5145fdd/servers/rest/assets/postman/unide.postman_collection.json) and the corresponding [unide.postman_environment](https://raw.githubusercontent.com/eclipse/unide/f4d349bc4a0096d3f99e14cf5f8b9f53a5145fdd/servers/rest/assets/postman/unide.postman_environment.json). You should now have Machine/Measurement/Process messages and requests prepared in the Collections tab. In order to send, you could extend the URL with "/validate" and hit "Send" button. If you get the response
+> Ppmp Message of type 'xy' is valid
+
+the unide REST server works as expected!
+
+# Persistence
+## Influx DB
+[Download](https://portal.influxdata.com/downloads) the InfluxDB Time-Series Data Storage and unzip or install it on your system. By default, it opens an http port at 8086. In order to make use of it, the configuration file should be modified, e.g. to:
+```json
+{
+ "http.port": 8090,
+ "persistence.enable": true,
+ "persistence.system": "influxDb",
+ "influxDb.url": "http://localhost:8086",
+ "influxDb.user": "root",
+ "influxDb.password": "root"
+}
+```
+After starting the database and the unide REST server, it should be possible to send POST requests to `http://localhost:8090/rest/v2`. This path receives all message types. To query the database after, use:
+[http://localhost:8086/query?pretty=true&u=root&p=root&db=Measurements&q=SELECT * FROM "ppmp_measurements"](http://localhost:8086/query?pretty=true&u=root&p=root&db=Measurements&q=SELECT%20*%20FROM%20%22ppmp_measurements%22) or the other databases that are documented on the [running server instance](http://localhost:8090/#influxdb_schema_design), respectively.
+
+## SQL (timescale, h2)
+Download the appropriate jdbc driver, e.g. [h2-*.jar](http://repo1.maven.org/maven2/com/h2database/h2/1.4.197/h2-1.4.197.jar), modify the configuration file, e.g. for h2:
+```json
+{
+ "http.port": 8090,
+ "persistence.enable": true,
+ "persistence.system": "sql",
+ "sqlDb.driver": "org.h2.Driver",
+ "sqlDb.url": "jdbc:h2:./test",
+ "sqlDb.user": "sa",
+ "sqlDb.password": ""
+}
+```
+Start the PPMP Server with the jdbc dependency on the classpath, e.g.:
+```bash
+java -cp "h2-1.4.197.jar;ppmp-server-0.2.0.jar" io.vertx.core.Launcher org.eclipse.iot.unide.server.MainVerticle -conf application.conf
+```
+Now, all the data send to the REST server is persisted in the file `test.mv.db`.
+For concurrent db actions (reading while writing), use the h2 tcp server instead. h2 is not recommended for production use!
+
+# Background
+
+## Download
+
+Available artifacts for download:
+* [PPMP Schema v2](https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-schema/2.0.0/)
+* [PPMP java Binding](https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-java-binding/0.2.0/)
+* [PPMP Python Binding](https://pypi.python.org/packages/d5/af/c90911d1da56a1ed0238338ba01068d43b8cd0137e9ca52b0f52a279f73e/unide_python-0.2.0-py2.py3-none-any.whl#md5=ca67bcd536b3a4015f72f5fa53d36543)
+* [PPMP Server](https://repo.eclipse.org/content/repositories/unide-releases/org/eclipse/iot/unide/ppmp/ppmp-server/0.2.0/)
+* [binsa client chrome app](http://download.eclipse.org/unide/binsa.crx)
+
+Source code:
+* [unide](https://github.com/eclipse/unide/releases/tag/v0.2.0)
+* [java binding](https://github.com/eclipse/unide.java/releases/tag/v0.2.0)
+* [python binding](https://github.com/eclipse/unide.python/releases/tag/v0.2.0)
+
+
+## Release notes
+### REST Server improvements (refactoring & persistence)
+* Added persistence to timeseries/postgres db
+* Outfactored schema files
+* Adjusted maven file
+* Added unit tests
+* Added documentation & java docs
+* Adjusted error handling
+* Removed unused code
+* Added postman collections
+* Added grafana configuration file
+
+### New HTML5 simulation client
+* Progressive Webapp runs as website (see https://unide.eclipse.org/binsa), browser app, native client (via [nw.js](https://nwjs.io/)) or app (via [Apache cordova](https://cordova.apache.org/))
+
+### PPMP JSON Schema files
+* Introduced separate bundle for schemas
+* general fixes
+ * make schema draft-06 compliant
+ * added 'id' and 'descriptions' where applicable
+ * added 'type' and 'default' for enums
+ * added 'required' fields where necessary
+ * made 'additionalProperties': true explicit for 'metaData'
+ * sorted the properties for improved readability
+* message_schema fixes
+ * added minItems: 1 to messages
+* measurement_schema fixes
+ * completed 'limits' specification
+ * added 'patternProperties' and minProperties detail to 'series'
+ * added minItems: 1 to measurements
+* process_schema fixes
+ * made 'id' and 'name' of a 'program' mandatory
+ * fixed 'shutoffValues', having properties not items
+ * fixed 'limits', having properties not items and number values rather than object values as limits
+ * fixed 'specialValues' to be an array of specialValue items with 'name' for indicating the nature, rather than one single object with its keys indicating the nature. Offering optional '$_time' tag to be consistent with measurements.
+ * completed 'series' definition
+
+### Website
+* Autogenerating PPMP specification from JSON schemas to avoid discrepancies
+* Generating UML schemas with plantuml
+* Using similar HTML5 stack as simulation client for SPA website
+
+### Other
+* java and new python bindings in separate github repositories
diff --git a/website/blog/Template-for-PPMP-transformation.md b/website/blog/Template-for-PPMP-transformation.md
new file mode 100644
index 0000000..e547884
--- /dev/null
+++ b/website/blog/Template-for-PPMP-transformation.md
@@ -0,0 +1,153 @@
+---
+title: "PPMP Use Cases: Template for PPMP transformation"
+date: 2018-09-04 00:00:00
+tags: "use cases"
+---
+
+# Quick start
+In [a previous blog post](https://www.eclipse.org/unide/blog/2018/2/11/Transform-PPMP-with-camel/), I have already introduced Apache Camel as a tool to transform to PPMP. In this post, I want to dive a little deeper to get you started with your own transformation.
+You can find corresponding source code with some transformation examples [in the repository of the Eclipse PPM Testbed](https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement/tree/master/camel-integrator). After download or checkout of the project, you can easily package everything necessary for an installation via [Apache Maven](https://maven.apache.org/) and java 8+:
+```bash
+git clone https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement.git
+cd eclipseiot-testbed-productionperformancemanagement
+cd camel-integrator
+mvn package
+```
+After successful build, you should get a zip file at `target/camel-integrator-*-assembly.zip` with the following content
+* `bin`
+The IntegratorStarter\* files for Windows and Linux can be used to start the integrator manually. WinServiceInstaller.bat und WinServiceUninstaller.bat can be executed with Admin permissions in Windows to register/unregister this java application as Windows Service called "Integrator Service".
+* `conf`
+This is where the main configuration file `application-context.xml`, further included spring xml configurations, as well as the configuration for logging `log4j.properties` and a key-value-file for quick configuration `application.properties` can be found. After modification of any of them, the integrator should be restarted.
+* `lib`
+Contains all java dependencies and their dependencies as individual jar files
+* `log`
+After the first start, you will find an additional directory that contains the logs of every execution, as defined in the `conf/log4j.properties` file.
+
+So this `camel-integrator-*-assembly.zip` is all you need, ready to being shipped and installed in your target system.
+
+# How can I modify this?
+
+In the `conf` folder of the output or `src/main/resources` src folder, you'll find multiple examples on how to use Apache Camel with Production Performance Management Protocol. Most of the examples are based on [spring xml](https://github.com/apache/camel/blob/master/components/camel-spring/src/main/docs/spring.adoc).
+The most important terms to understand them are:
+
+| xml tag | meaning |
+|-|-|
+| bean | additional functionality, coded as java class / function |
+| camelContext | the main, camel specific configurations |
+| route | describes the data flow as process |
+| from / to | entry / exit points for the data flow. This is also, were external systems are accessed via [components](https://github.com/apache/camel/tree/camel-2.21.0/components) |
+| onException | error handling for the data flow |
+| pipeline, multicast, ... | routing of data via [Enterprise Integration pattern](http://camel.apache.org/enterprise-integration-patterns.html) |
+
+Among others, you'll find:
+
+
+* `application-context.xml`
+ Main entry file to start camel routes. It contains a general PPMP validation REST endpoint that reuses the route from `ppmp-validate-context.xml`
+* `mqtt-context.xml`
+ A simple example of converting transport protocol (mqtt to REST), without looking at the payload
+* `ppmp-splitAndRewrite-context.xml`
+ Shows how to receive (PPMP-) payload via different REST paths (/rest or /ppm), and each forwarding to two seperate endpoints (/rest and /ppm)
+ * `ppmpRewrite.xml` and `ppmRewrite.xml`
+ mapping examples to rewrite the urls
+* `ppmp-validate-context.xml`
+ A simple validation route for PPMP messages that can be reused in many other routes.
+* `psi6000-transform-context.xml`
+ A more advanced example of converting a psi6000 JSON format, converting it to plain old java object (POJO), transforming that to PPMP POJOs (using [unide.java](https://github.com/eclipse/unide.java)) and forwarding these to actual REST endpoints
+* `kistler.xml`
+ This example takes html files with a structure similar to the test file in [`src/test/data/00000855.html`](https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement/blob/master/camel-integrator/src/test/data/00000855.html), cleans the html structure, retrieves the relevant parts via [XPath](https://en.wikipedia.org/wiki/XPath) and creates a PPMP process message out of that
+* `application.properties`
+ Contains key/value pairs that can be used in the camel context configurations.
+* `log4j.properties`
+ The configuration for logging. For testing purposes, the log4j.properties in /src/test/resources is used.
+
+In order to get familiar with these transformations, I suggest you:
+* open the `application-context.xml` in your favorite editor
+* remove the ` ` statements
+* add your own `... `, maybe as simple as
+ ```xml
+
+
+
+ hello world!
+
+
+ ```
+* start a run directly (with bundling to a zip file) with:
+ ```bash
+ mvn exec:java
+ ```
+* and review the result. With the example above, just open the url http://localhost:9090 and see the `hello world!` in your browser
+
+If you prefer a visual model of these camel xml definitions, you could also make use of [JBoss Fuse Tooling](https://tools.jboss.org/features/fusetools.html) which is available for [Eclipse Workbench 4.3+](https://projects.eclipse.org/releases/oxygen) through [the Marketplace](https://marketplace.eclipse.org/content/jboss-tools). Be aware that this might cause additional overhead.
+
+
+If you want to make use of any other of the (as of camel 2.21.0) [281+ components](https://github.com/apache/camel/tree/camel-2.21.0/components), you should add the respective maven dependency to the `pom.xml`. For example:
+```xml
+
+ ...
+
+
+ org.apache.camel
+ camel-amqp
+ ${camel.version}
+
+ ...
+
+ ...
+
+```
+
+# Testing
+
+Testing is an important part of the development cycle, especially for the core components that have to work reliably in a production environment.
+The project includes example tests in the `src/test` folder:
+* `java`
+ contains the actual java unit tests that make use of [`CamelSpringTestSupport`](https://github.com/apache/camel/blob/61a58836da57bab38ce719cbd1effd36253687a4/docs/user-manual/en/spring-testing.adoc) to wire xml CamelContext configuration, test data and expected results together
+* `resources`
+ contains the spring xml configuration that is used by the java test classes and resamble the actual configurations from `src/main/resources`
+* `data`
+ contains testdata for the data flows and the transformation
+
+Tests can easily be run from within an IDE (eclipse, visual code studio etc.) or via commandline
+```bash
+mvn test
+```
+You will see the output of the test runs. If it looks like this, it works as expected:
+```bash
+Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.846 sec
+
+Results :
+
+Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
+
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 32.267 s
+[INFO] Finished at: 2018-04-09T15:25:25+02:00
+[INFO] Final Memory: 25M/85M
+[INFO] ------------------------------------------------------------------------
+```
+
+# Summary
+The provided camel project template facilitates the creation of simple connectors. You can download it, modify or extend it, package the integrator to a zip file and deploy it on a target server. The included scripts help registering the integrator as an operating system service to run 24/7.
\ No newline at end of file
diff --git a/website/blog/Transform-PPMP-with-camel.md b/website/blog/Transform-PPMP-with-camel.md
new file mode 100644
index 0000000..233955d
--- /dev/null
+++ b/website/blog/Transform-PPMP-with-camel.md
@@ -0,0 +1,672 @@
+---
+title: "PPMP Use Cases: Simple Transformation with Apache Camel"
+date: 2018-02-11 00:00:00
+tags: "use cases"
+---
+The Production Performance Management Protocol (PPMP) is a simple structure to send out machine data. Unide, as its hosting project, is supposed to provide exemplary implementations.
+
+We have already published [a REST server](https://github.com/eclipse/unide/tree/master/servers/rest), [java-](https://github.com/eclipse/unide.java) and [python-](https://github.com/eclipse/unide.python) bindings and an [html5-client](https://github.com/eclipse/unide/tree/master/clients/binsa). But how are these implementations used in real life?
+
+# The Challenge
+
+
+In the automotive industry, [welding spots](https://en.wikipedia.org/wiki/Spot_welding) are crucial for the quality of a car and the security of the passenger. In modern production lines, hundreds of welding spots have to be precisely set in a single shift. In order to reduce product rework, scrap, destructible tests and machine downtime, the quality should be monitored consistently. That's what special welding controller in machines do. Unfortunately, this data is often only used locally, for a short period of time and in proprietary formats. Just enough to determine the immediate process outcome. In that case, further opportunities of analysing the information are not taken. With the continuous increase in complexity, price and time pressure, the demand for further processing and optimization grows. The data could be used to prevent or even predict maintenance or just store the data in long time archives in case of legal disputes.
+
+One prerequisite for such connectivity is the hardware and its connectivity. Older generations of welding controllers can only be accessed with proprietary stacks (like the [PSI 6000](https://www.boschrexroth.com/en/xc/products/product-groups/welding-technology/controllers-with-power-section/mf-system-psi6000/index)) whereas newer generations (like the [PRC 7000](https://www.boschrexroth.com/en/xc/company/press/index2-29696)) are much more flexible in terms of networking and communication. In general, there are two aspects that make up the communication: the transport protocol and the structure of the payload. This is similar to our daily life: if you want to chat with your friends, you need to use the same messenger or communication technology (phone, email) and you need speak the same language (English, German etc.).
+
+In the following sections, let's assume we need to transform the transport protocol as well as the payload. The data is generated by a welding controller and should be passed to [the unide REST server](https://unide.eclipse.org) for persisting it in a dedicated timeseries database.
+
+# The Approach
+We want to find a way to receive the data, transform it into PPMP and store it into a database in our [REST Server](https://unide.eclipse.org).
+
+First, we need to understand which interfaces the controller has, which communication protocol is used, and how the payload would be interpreted. In the case of the PSI 6000, it was configured to publish the quality data to a [mqtt](https://de.wikipedia.org/wiki/MQTT) message broker (here: [Eclipse mosquitto](https://mosquitto.org/)). We don't have an extensive documentation of the payload, but we can look at samples of it (some Curve data shortened at the end):
+```json
+{
+ "Name": "WeldLog/UIR Testrack 24/",
+ "WeldTimer": "UIR Testrack 24",
+ "TimeStamp": "2018-01-17T10:41:00.0008436+01:00",
+ "OutputFormat": "JSON",
+ "Message": {
+ "WeldLog": {
+ "protRecord_ID": 734827,
+ "dateTime": "2018-01-15T16:52:32.09",
+ "timerName": "UIR Testrack 24",
+ "progNo": 0,
+ "spotName": "",
+ "wear": 8312480,
+ "wearPerCent": 0,
+ "monitorState": 0,
+ "regulationState": 0,
+ "measureState": 0,
+ "powerState": 0,
+ "sequenceState": 0,
+ "sequenceStateAdd": 0,
+ "sequenceRepeat": 0,
+ "monitorMode": 1,
+ "iDemandStd": 3,
+ "ilsts": 13.14,
+ "regulationStd": 0,
+ "iDemand1": 3,
+ "iActual1": 0,
+ "regulation1": 4,
+ "iDemand2": 3,
+ "iActual2": 13.16,
+ "regulation2": 4,
+ "iDemand3": 3,
+ "iActual3": 0,
+ "regulation3": 4,
+ "phaStd": 24.96,
+ "pha1": 0,
+ "pha2": 24.64,
+ "pha3": 0,
+ "t_iDemandStd": 0,
+ "tActualStd": 878,
+ "partIdentString": "",
+ "tipDressCounter": 0,
+ "electrodeNo": 0,
+ "sgForceSetPoint": null,
+ "sgSheetThicknessSetPoint": null,
+ "sgSagGpSetPoint": null,
+ "sgSpotWithSg": null,
+ "sgMotorCurrent": null,
+ "sgMotorTemp": null,
+ "sgForce": null,
+ "sgSheetThickness": null,
+ "sgSagGp": null,
+ "sgSagGc": null,
+ "regUsrUspJunction": 0,
+ "regUsrUspMax": 0,
+ "regSpotDiaActual": 0,
+ "regSpotDiaMinDemand": 0,
+ "regSplashTime": 0,
+ "nuggetDiameter": 0,
+ "usp": 0,
+ "normingTime": 0,
+ "regulationStartTime": 0,
+ "returnToConstantCurrent": 0,
+ "declineUsp": 0,
+ "offsetUsp": 0,
+ "currentFactor": 0,
+ "triggerTime": 0,
+ "xqrMeasuringActive": 0,
+ "xqrRegulationActive": 0,
+ "xqrMonitoringActive": 0,
+ "xqrWeldTimeProlongationActive": 0,
+ "voltageActualValue": 0.03,
+ "voltageRefValue": 0.03,
+ "currentActualValue": 13.17,
+ "currentReferenceValue": 13.95,
+ "weldTimeActualValue": 876,
+ "weldTimeRefValue": 760,
+ "energyActualValue": 395.1261,
+ "energyRefValue": 342,
+ "powerActualValue": 395.133,
+ "powerRefValue": 449.35,
+ "resistanceActualValue": 2,
+ "resistanceRefValue": 2,
+ "pulseWidthActualValue": 25.02,
+ "pulseWidthRefValue": 26.19,
+ "stabilisationFactorActValue": 55,
+ "stabilisationFactorRefValue": 100,
+ "thresholdStabilisationFactor": 0,
+ "wldEffectStabilisationFactor": 100,
+ "uipActualValue": 126,
+ "uipRefValue": 100,
+ "uirExpulsionTime": 0,
+ "uirMeasuringActive": 1,
+ "uirRegulationActive": 1,
+ "uirMonitoringActive": 0,
+ "uirWeldTimeProlongationActive": 1,
+ "uirQStoppRefCntValue": 9,
+ "uirQStoppActCntValue": 0,
+ "uirUipUpperTol": 100,
+ "uirUipLowerTol": 100,
+ "uirUipCondTol": 100,
+ "uirPsfLowerTol": 100,
+ "uirPsfCondTol": 100,
+ "weldSpotCustDataP16_1": null,
+ "weldSpotCustDataP16_2": null,
+ "weldSpotCustDataP16_3": null,
+ "weldSpotCustDataP16_4": null,
+ "weldSpotCustDataP16_5": null,
+ "weldSpotCustDataP32_6": null,
+ "weldSpotCustDataP16_7": null,
+ "weldSpotCustDataP16_8": null,
+ "weldSpotCustDataP16_9": null,
+ "weldSpotCustDataP16_10": null,
+ "weldSpotCustDataP16_11": null,
+ "weldSpotCustDataP32_12": null,
+ "weldSpotCustDataP16_13": null,
+ "weldSpotCustDataP16_14": null,
+ "weldSpotCustDataP16_15": null,
+ "weldSpotCustDataP16_16": null,
+ "weldSpotCustDataP16_17": null,
+ "weldSpotCustDataP32_18": null,
+ "uipMonCondUpperTol": 100,
+ "fqfActualValue": 0,
+ "fqfRefValue": 100,
+ "fqfMonUpperTol": 100,
+ "fqfMonLowerTol": 100,
+ "fqfMonCondUpperTol": 100,
+ "fqfMonCondLowerTol": 100,
+ "fqfMeasuringActive": 0,
+ "xqrModeOff": 0,
+ "reweldActive": 0,
+ "weldspotRefIdent": "UIR_PART",
+ "sg_Torque_Gp": null,
+ "sg_Force_Corr": null,
+ "sg_Weldspot_Geo_Wear": null,
+ "sg_Wear_Length": null,
+ "sg_Beam_UpArching": null,
+ "CurrentCurve": [
+ 11621,
+ 15434,
+ ...
+ ],
+ "VoltageCurve": [
+ 39,
+ 29,
+ ...
+ ],
+ "ForceCurve": [
+ 49,
+ 49,
+ ...
+ ]
+ }
+ }
+}
+```
+That's already very detailed, but it's unclear which device / welding spot the data comes from and what the timing of the curves was. Let's get some more structure in with PPMP!
+
+In PPMP, we have the option to differentiate between discrete manufacturing data (MES - part produced) by using the [measurement-message](/unide/specification/measurement-message) and detailed process data by using the [process-message](https://www.eclipse.org/unide/specification/process-message). In the welding payload, that's all combined in one message. So we also want to split this payload into two.
+
+## Introducing Apache Camel
+
+
+[Apache Camel](https://en.wikipedia.org/wiki/Apache_Camel) is a java-based Open Source framework, that can transform and route data. It supports most of the [Enterprise Integration Patterns](https://en.wikipedia.org/wiki/Enterprise_Integration_Patterns) and hundreds(!) of [connectors / components](http://camel.apache.org/components.html). Think of it as an extensive transformation and workflow automation engine. In fact, it's so powerful and versatile, that it unfortunately doesn't come with a visual user interface or a plug-and-play installer. Luckily, for everyone who doesn't happen to be a java expert, there's also an xml configuration (via [spring xml](https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xsd-configuration.html)). And that's mostly all we need!
+
+## Transforming the Communication Protocol
+We will use Spring XML to configure Apache Camel. The workflow in Camel are called ````. So let's create a route that transforms our mqtt to REST protocol:
+```xml
+
+
+
+
+
+
+
+
+
+```
+That's it! A ```` that reads```` mqtt and forwards ```` http. Not so difficult, is it? We could use many of the other [connectors / components](http://camel.apache.org/components.html) in the example above as well to transform from/to different protocols.
+
+But wait! The welding payload above was not PPMP. So we also need to normalize the payload.
+
+## Normalizing the Payload
+
+Now that we can easily convert protocols, let's address the structure of the payload. Overall, we want to have a workflow that looks as described in the diagram below:
+
+
+The extra steps here are:
+1. transform the PSI 6000 JSON String payload to a java object
+2. transform the PSI 6000 java object to two PPMP-java objects ([measurement-message](/unide/specification/measurement-message) and [process-message](https://www.eclipse.org/unide/specification/process-message))
+3. split up the two PPMP objects
+4. route the objects individually
+5. transform each PPMP object back to a String
+
+### Create the PSI 6000 Java Object
+Luckily, there are helpers for transforming json (or xml) to plain old java objects (POJOs). We are using [jsonschema2pojo](http://www.jsonschema2pojo.org/) to convert the above json sample to POJOs with Jackson 2.x annotation. I name the resulting data type class ``PSI6000DataType`` and organize it in the package ``org.eclipse.iot.unide.integrators``. Based on the given testdata, jsonschema2pojo cannot fully deduct all attribute types correctly. In order to allow floating point values, we would rename all ``Integer`` and ``Object`` types to ``Number`` in the WeldLog.java file. Also in the same file, we would change the type of the ``dateTime`` field from String to ``LocalDateTime`` to be more accurate:
+```java
+...
+@JsonProperty("dateTime")
+@JsonSerialize(using = LocalDateTimeSerializer.class)
+@JsonDeserialize(using = LocalDateTimeDeserializer.class)
+private LocalDateTime dateTime;
+...
+```
+For that, we also need to include the respective imports:
+```java
+...
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+...
+```
+and adjust the getter (``getDateTime()``), setter (``setDateTime()``) and the type in the constructor (``public WeldLog(...)``) accordingly.
+
+Camel will be able to transform ("*unmarshal*") this datatype from a string to a POJO after adding the definition to the above Spring XML:
+```xml
+...
+
+
+
+
+ ...
+
+```
+
+### Use unide.java binding for PPMP Java Objects
+For eventually transforming the PPMP objects back to String ("*marshal*"), we can make use of the [unide PPMP java binding](https://github.com/eclipse/unide.java). Just adjust the dataFormats section of the Spring XML so that it reads:
+```xml
+...
+
+
+
+
+
+
+ ...
+
+```
+
+### Create the Workflow
+In order to better structure data flow, we use multiple ````-s: one for retrieving the data and two more after the split of the payload. They are connected via the virtual camel protocol "*direct*". In the following Spring XML, you can also find some ```` points and additional steps to set http header (````) for posting to the unide server:
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ application/json; charset=utf-8
+
+
+ POST
+
+
+
+
+
+
+
+ {"result": true }
+
+
+
+
+
+
+ ${body[0]}
+
+
+
+
+
+
+
+ body.length
+
+
+
+
+
+
+
+
+ ${body[1]}
+
+
+
+
+
+
+
+ body.length
+
+
+
+
+
+
+```
+
+You might have noticed that we have not yet discussed one important item in this workflow: how do we actually transform the payload from one format to another?
+
+### Transforming from PSI 6000 POJO to PPMP POJOs
+One thing that we'll hardwire as java code is the transformation from the source to the target structure. The same functionality could be achieved with scripting components (e.g. [groovy](http://camel.apache.org/groovy.html), but that would be less powerful and worse performance. Since we don't expect the format to change but mostly the workflow or endpoints, implementing a java bean is not too much effort. Here's how:
+Apache Camel offers a ``Processor`` interface that can be used to override the ``process()`` function. This function receives the complete message (``exchange``) and can modify it in any way. Since we have created the PSI 6000 Java Object already and want to produce PPMP java objects, the logic is mostly about creating the child objects and wiring the suitable getter to corresponding setter.
+
+```java
+package org.eclipse.iot.unide.integrators;
+
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.eclipse.iot.unide.ppmp.commons.Device;
+import org.eclipse.iot.unide.ppmp.commons.MetaData;
+import org.eclipse.iot.unide.ppmp.measurements.MeasurementsWrapper;
+import org.eclipse.iot.unide.ppmp.process.Process;
+import org.eclipse.iot.unide.ppmp.process.ProcessWrapper;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+public class PSI6000 implements Processor {
+
+ public PSI6000() {}
+
+ private org.eclipse.iot.unide.ppmp.measurements.SeriesMap addMeasurementPoint(
+ org.eclipse.iot.unide.ppmp.measurements.SeriesMap map, String name, Number value) {
+ if (value != null) {
+ map.setSeriesValue(name, Arrays.asList(value));
+ }
+ return map;
+ }
+
+ @Override
+ public void process(Exchange exchange) throws JsonProcessingException, Exception {
+ Message msg = exchange.getIn();
+ PSI6000DataType doc = msg.getBody(PSI6000DataType.class);
+
+ Object []bundle = new Object[2];
+ bundle[0] = transformMeasurement(doc);
+ bundle[1] = transformProcess(doc);
+ msg.setBody(bundle);
+ exchange.setOut(msg);
+ }
+
+ private void setSpotName(Device device, WeldLog wl) {
+ String spotName = wl.getSpotName();
+ if (spotName != null && spotName.length() > 0) {
+ MetaData md = new MetaData();
+ md.setMetaDataValue("spotName", wl.getSpotName());
+ device.setMetaData(md);
+ }
+ }
+
+ private ProcessWrapper transformProcess(PSI6000DataType doc) {
+ ProcessWrapper wrapper = new ProcessWrapper();
+ WeldLog wl = doc.getMessage().getWeldLog();
+ OffsetDateTime odt = OffsetDateTime.of(wl.getDateTime(), ZoneOffset.UTC);
+
+ // device
+ Device device = new Device();
+ device.setDeviceID(doc.getMessage().getWeldLog().getTimerName());
+ setSpotName(device, wl);
+ wrapper.setDevice(device);
+
+ // part
+ String partId = wl.getPartIdentString();
+ if (partId != null && partId.length() > 0) {
+ org.eclipse.iot.unide.ppmp.process.Part part = new org.eclipse.iot.unide.ppmp.process.Part();
+ part.setPartID(partId);
+ wrapper.setPart(part);
+ }
+
+ // process
+ Process process = new Process();
+ process.setTimestamp(odt);
+ process.setExternalProcessId(String.valueOf(wl.getProtRecordID()));
+ wrapper.setProcess(process);
+
+ // measurements
+ List measurements = new LinkedList();
+ org.eclipse.iot.unide.ppmp.process.Measurements measurement = new org.eclipse.iot.unide.ppmp.process.Measurements();
+
+ measurement.setTimestamp(odt);
+
+ //values
+ org.eclipse.iot.unide.ppmp.process.SeriesMap seriesMap = new org.eclipse.iot.unide.ppmp.process.SeriesMap();
+ seriesMap.setSeriesValue("curentCurve", wl.getCurrentCurve());
+ seriesMap.setSeriesValue("voltageCurve", wl.getVoltageCurve());
+ seriesMap.setSeriesValue("forceCurve", wl.getForceCurve());
+
+ measurement.setSeriesMap(seriesMap);
+ measurements.add(measurement);
+ wrapper.setMeasurements(measurements);
+
+ return wrapper;
+ }
+
+ private MeasurementsWrapper transformMeasurement(PSI6000DataType doc) {
+ MeasurementsWrapper wrapper = new MeasurementsWrapper();
+ WeldLog wl = doc.getMessage().getWeldLog();
+
+ // device
+ Device device = new Device();
+ device.setDeviceID(doc.getMessage().getWeldLog().getTimerName());
+ setSpotName(device, wl);
+ wrapper.setDevice(device);
+
+ // part
+ String partId = wl.getPartIdentString();
+ if (partId != null && partId.length() > 0) {
+ org.eclipse.iot.unide.ppmp.measurements.Part part = new org.eclipse.iot.unide.ppmp.measurements.Part();
+ part.setPartID(partId);
+ wrapper.setPart(part);
+ }
+
+ // measurements
+ List measurements = new LinkedList();
+ org.eclipse.iot.unide.ppmp.measurements.Measurements measurement = new org.eclipse.iot.unide.ppmp.measurements.Measurements();
+
+ measurement.setTimestamp(OffsetDateTime.of(wl.getDateTime(), ZoneOffset.UTC));
+
+ // values
+ org.eclipse.iot.unide.ppmp.measurements.SeriesMap seriesMap = new org.eclipse.iot.unide.ppmp.measurements.SeriesMap();
+ seriesMap.setSeriesValue("$_time", Arrays.asList(0));
+
+ addMeasurementPoint(seriesMap, "wear", wl.getWear());
+ addMeasurementPoint(seriesMap, "wearPerCent", wl.getWearPerCent());
+ addMeasurementPoint(seriesMap, "monitorState", wl.getMonitorState());
+ addMeasurementPoint(seriesMap, "regulationState", wl.getRegulationState());
+ addMeasurementPoint(seriesMap, "measureState", wl.getMeasureState());
+ addMeasurementPoint(seriesMap, "powerState", wl.getPowerState());
+ addMeasurementPoint(seriesMap, "sequenceState", wl.getSequenceState());
+ addMeasurementPoint(seriesMap, "sequenceStateAdd", wl.getSequenceStateAdd());
+ addMeasurementPoint(seriesMap, "sequenceRepeat", wl.getSequenceRepeat());
+ addMeasurementPoint(seriesMap, "monitorMode", wl.getMonitorMode());
+ addMeasurementPoint(seriesMap, "iDemandStd", wl.getIDemandStd());
+ addMeasurementPoint(seriesMap, "ilsts", wl.getIlsts());
+ addMeasurementPoint(seriesMap, "regulationStd", wl.getRegulationStd());
+ addMeasurementPoint(seriesMap, "iDemand1", wl.getIDemand1());
+ addMeasurementPoint(seriesMap, "iActual1", wl.getIActual1());
+ addMeasurementPoint(seriesMap, "regulation1", wl.getRegulation1());
+ addMeasurementPoint(seriesMap, "iDemand2", wl.getIDemand2());
+ addMeasurementPoint(seriesMap, "iActual2", wl.getIActual2());
+ addMeasurementPoint(seriesMap, "regulation2", wl.getRegulation2());
+ addMeasurementPoint(seriesMap, "iDemand3", wl.getIDemand3());
+ addMeasurementPoint(seriesMap, "iActual3", wl.getIActual3());
+ addMeasurementPoint(seriesMap, "regulation3", wl.getRegulation3());
+ addMeasurementPoint(seriesMap, "phaStd", wl.getPhaStd());
+ addMeasurementPoint(seriesMap, "pha1", wl.getPha1());
+ addMeasurementPoint(seriesMap, "pha2", wl.getPha2());
+ addMeasurementPoint(seriesMap, "pha3", wl.getPha3());
+ addMeasurementPoint(seriesMap, "t_iDemandStd", wl.getIDemandStd());
+ addMeasurementPoint(seriesMap, "tActualStd", wl.getTActualStd());
+ // addMeasurementPoint(seriesMap, "partIdentString",
+ // wl.getPartIdentString());
+ addMeasurementPoint(seriesMap, "tipDressCounter", wl.getTipDressCounter());
+ addMeasurementPoint(seriesMap, "electrodeNo", wl.getElectrodeNo());
+ addMeasurementPoint(seriesMap, "sgForceSetPoint", wl.getSgForceSetPoint());
+ addMeasurementPoint(seriesMap, "sgSheetThicknessSetPoint", wl.getSgSheetThicknessSetPoint());
+ addMeasurementPoint(seriesMap, "sgSagGpSetPoint", wl.getSgSagGpSetPoint());
+ addMeasurementPoint(seriesMap, "sgSpotWithSg", wl.getSgSpotWithSg());
+ addMeasurementPoint(seriesMap, "sgMotorCurrent", wl.getSgMotorCurrent());
+ addMeasurementPoint(seriesMap, "sgMotorTemp", wl.getSgMotorTemp());
+ addMeasurementPoint(seriesMap, "sgForce", wl.getSgForce());
+ addMeasurementPoint(seriesMap, "sgSheetThickness", wl.getSgSheetThickness());
+ addMeasurementPoint(seriesMap, "sgSagGp", wl.getSgSagGp());
+ addMeasurementPoint(seriesMap, "sgSagGc", wl.getSgSagGc());
+ addMeasurementPoint(seriesMap, "regUsrUspJunction", wl.getRegUsrUspJunction());
+ addMeasurementPoint(seriesMap, "regUsrUspMax", wl.getRegUsrUspMax());
+ addMeasurementPoint(seriesMap, "regSpotDiaActual", wl.getRegSpotDiaActual());
+ addMeasurementPoint(seriesMap, "regSpotDiaMinDemand", wl.getRegSpotDiaMinDemand());
+ addMeasurementPoint(seriesMap, "regSplashTime", wl.getRegSplashTime());
+ addMeasurementPoint(seriesMap, "nuggetDiameter", wl.getNuggetDiameter());
+ addMeasurementPoint(seriesMap, "usp", wl.getUsp());
+ addMeasurementPoint(seriesMap, "normingTime", wl.getNormingTime());
+ addMeasurementPoint(seriesMap, "regulationStartTime", wl.getRegulationStartTime());
+ addMeasurementPoint(seriesMap, "returnToConstantCurrent", wl.getReturnToConstantCurrent());
+ addMeasurementPoint(seriesMap, "declineUsp", wl.getDeclineUsp());
+ addMeasurementPoint(seriesMap, "offsetUsp", wl.getOffsetUsp());
+ addMeasurementPoint(seriesMap, "currentFactor", wl.getCurrentFactor());
+ addMeasurementPoint(seriesMap, "triggerTime", wl.getTriggerTime());
+ addMeasurementPoint(seriesMap, "xqrMeasuringActive", wl.getXqrMeasuringActive());
+ addMeasurementPoint(seriesMap, "xqrRegulationActive", wl.getXqrRegulationActive());
+ addMeasurementPoint(seriesMap, "xqrMonitoringActive", wl.getXqrMonitoringActive());
+ addMeasurementPoint(seriesMap, "xqrWeldTimeProlongationActive", wl.getXqrWeldTimeProlongationActive());
+ addMeasurementPoint(seriesMap, "voltageActualValue", wl.getVoltageActualValue());
+ addMeasurementPoint(seriesMap, "voltageRefValue", wl.getVoltageRefValue());
+ addMeasurementPoint(seriesMap, "currentActualValue", wl.getCurrentActualValue());
+ addMeasurementPoint(seriesMap, "currentReferenceValue", wl.getCurrentReferenceValue());
+ addMeasurementPoint(seriesMap, "weldTimeActualValue", wl.getWeldTimeActualValue());
+ addMeasurementPoint(seriesMap, "weldTimeRefValue", wl.getWeldTimeRefValue());
+ addMeasurementPoint(seriesMap, "energyActualValue", wl.getEnergyActualValue());
+ addMeasurementPoint(seriesMap, "energyRefValue", wl.getEnergyRefValue());
+ addMeasurementPoint(seriesMap, "powerActualValue", wl.getPowerActualValue());
+ addMeasurementPoint(seriesMap, "powerRefValue", wl.getPowerRefValue());
+ addMeasurementPoint(seriesMap, "resistanceActualValue", wl.getResistanceActualValue());
+ addMeasurementPoint(seriesMap, "resistanceRefValue", wl.getResistanceRefValue());
+ addMeasurementPoint(seriesMap, "pulseWidthActualValue", wl.getPulseWidthActualValue());
+ addMeasurementPoint(seriesMap, "pulseWidthRefValue", wl.getPulseWidthRefValue());
+ addMeasurementPoint(seriesMap, "stabilisationFactorActValue", wl.getStabilisationFactorActValue());
+ addMeasurementPoint(seriesMap, "stabilisationFactorRefValue", wl.getStabilisationFactorRefValue());
+ addMeasurementPoint(seriesMap, "thresholdStabilisationFactor", wl.getThresholdStabilisationFactor());
+ addMeasurementPoint(seriesMap, "wldEffectStabilisationFactor", wl.getWldEffectStabilisationFactor());
+ addMeasurementPoint(seriesMap, "uipActualValue", wl.getUipActualValue());
+ addMeasurementPoint(seriesMap, "uipRefValue", wl.getUipRefValue());
+ addMeasurementPoint(seriesMap, "uirExpulsionTime", wl.getUirExpulsionTime());
+ addMeasurementPoint(seriesMap, "uirMeasuringActive", wl.getUirMeasuringActive());
+ addMeasurementPoint(seriesMap, "uirRegulationActive", wl.getUirRegulationActive());
+ addMeasurementPoint(seriesMap, "uirMonitoringActive", wl.getUirMonitoringActive());
+ addMeasurementPoint(seriesMap, "uirWeldTimeProlongationActive", wl.getUirWeldTimeProlongationActive());
+ addMeasurementPoint(seriesMap, "uirQStoppRefCntValue", wl.getUirQStoppRefCntValue());
+ addMeasurementPoint(seriesMap, "uirQStoppActCntValue", wl.getUirQStoppActCntValue());
+ addMeasurementPoint(seriesMap, "uirUipUpperTol", wl.getUirUipUpperTol());
+ addMeasurementPoint(seriesMap, "uirUipLowerTol", wl.getUirUipLowerTol());
+ addMeasurementPoint(seriesMap, "uirUipCondTol", wl.getUirUipCondTol());
+ addMeasurementPoint(seriesMap, "uirPsfLowerTol", wl.getUirPsfLowerTol());
+ addMeasurementPoint(seriesMap, "uirPsfCondTol", wl.getUirPsfCondTol());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_1", wl.getWeldSpotCustDataP161());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_2", wl.getWeldSpotCustDataP162());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_3", wl.getWeldSpotCustDataP163());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_4", wl.getWeldSpotCustDataP164());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_5", wl.getWeldSpotCustDataP165());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP32_6", wl.getWeldSpotCustDataP326());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_7", wl.getWeldSpotCustDataP167());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_8", wl.getWeldSpotCustDataP168());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_9", wl.getWeldSpotCustDataP169());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_10", wl.getWeldSpotCustDataP1610());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_11", wl.getWeldSpotCustDataP1611());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP32_12", wl.getWeldSpotCustDataP3212());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_13", wl.getWeldSpotCustDataP1613());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_14", wl.getWeldSpotCustDataP1614());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_15", wl.getWeldSpotCustDataP1615());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_16", wl.getWeldSpotCustDataP1616());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP16_17", wl.getWeldSpotCustDataP1617());
+ addMeasurementPoint(seriesMap, "weldSpotCustDataP32_18", wl.getWeldSpotCustDataP3218());
+ addMeasurementPoint(seriesMap, "uipMonCondUpperTol", wl.getUipMonCondUpperTol());
+ addMeasurementPoint(seriesMap, "fqfActualValue", wl.getFqfActualValue());
+ addMeasurementPoint(seriesMap, "fqfRefValue", wl.getFqfRefValue());
+ addMeasurementPoint(seriesMap, "fqfMonUpperTol", wl.getFqfMonUpperTol());
+ addMeasurementPoint(seriesMap, "fqfMonLowerTol", wl.getFqfMonLowerTol());
+ addMeasurementPoint(seriesMap, "fqfMonCondUpperTol", wl.getFqfMonCondUpperTol());
+ addMeasurementPoint(seriesMap, "fqfMonCondLowerTol", wl.getFqfMonCondLowerTol());
+ addMeasurementPoint(seriesMap, "fqfMeasuringActive", wl.getFqfMeasuringActive());
+ addMeasurementPoint(seriesMap, "xqrModeOff", wl.getXqrModeOff());
+ addMeasurementPoint(seriesMap, "reweldActive", wl.getReweldActive());
+ // addMeasurementPoint(seriesMap, "weldspotRefIdent",
+ // wl.getWeldspotRefIdent());
+ addMeasurementPoint(seriesMap, "sg_Torque_Gp", wl.getSgTorqueGp());
+ addMeasurementPoint(seriesMap, "sg_Force_Corr", wl.getSgForceCorr());
+ addMeasurementPoint(seriesMap, "sg_Weldspot_Geo_Wear", wl.getSgWeldspotGeoWear());
+ addMeasurementPoint(seriesMap, "sg_Wear_Length", wl.getSgWearLength());
+ addMeasurementPoint(seriesMap, "sg_Beam_UpArching", wl.getSgBeamUpArching());
+
+ measurement.setSeriesMap(seriesMap);
+ measurements.add(measurement);
+ wrapper.setMeasurements(measurements);
+
+ return wrapper;
+ }
+}
+```
+
+# Summary
+It takes a while to understand the involved software components. Yet, once the set up is running, it gets much easier to adapt it to another Use Case. And another. The pattern of wiring protocols and transforming the payload is very similar. The involved frameworks are powerful enough to support many Use Cases. This article is supposed to show that there are simple possibilities to transform transport protocols and payloads, so that you can focus on addressing functional challenges.
diff --git a/website/blog/Unide-at-BCX.md b/website/blog/Unide-at-BCX.md
new file mode 100644
index 0000000..10b078a
--- /dev/null
+++ b/website/blog/Unide-at-BCX.md
@@ -0,0 +1,17 @@
+---
+title: Unide at Bosch Hackaton
+date: 2017-03-23 17:00:00
+tags: "media"
+---
+Unide and PPMP were used in Bosch Connected Experience Hackaton by students and developers to connect sensors to backend solutions in just two days!
+They even took a professional video:
+
+VIDEO
+
+
+Also in the same conference, Bosch CEO Dr. Volkmar Denner refered to PPMP again :
+
+ On a more practical level, the product performance management protocol, or PPMP, is being tried out at the Bosch plant in Homburg, Germany, as part of a joint Industrie 4.0 and IIC testbed. Bosch itself developed the PPMP, which is available to all at no cost. It allows small and medium-sized enterprises to transmit data from their sensors quickly, simply, and securely to the production systems of large companies. This helps remove some of the obstacles preventing entry into connected manufacturing. This first practical experience will be used to further refine the new protocol – work which will be done by Eclipse, an open-source community. Once again, we see that openness is our life blood.
+ Dr. Volkmar Denner, Bosch CEO
+
+
diff --git a/website/blog/Unide-proposal-online.md b/website/blog/Unide-proposal-online.md
new file mode 100644
index 0000000..d93c202
--- /dev/null
+++ b/website/blog/Unide-proposal-online.md
@@ -0,0 +1,17 @@
+---
+title: Unide proposal online
+date: 2016-09-12 09:26:37
+tags: "project start"
+---
+We're happy to announce, that the proposal for our new Eclipse Project is online! You can find it at [https://projects.eclipse.org/proposals/unide](https://projects.eclipse.org/proposals/unide). For further discussions, there's the [forum post](https://www.eclipse.org/forums/index.php/t/1080186/) as well.
+Now, it's time to study all details about Eclipse processes and [license regulations](https://eclipse.org/legal/eplfaq.php#3RDPARTY).
+
+
+
+
+ The projects name is derived from un derstand i ndustry de vices. Other ideas like co nnect i ndustry ma chines turned out to have meanings in foreign languages or being trademarked already.
+
+
+
diff --git a/website/blog/Validator-Online.md b/website/blog/Validator-Online.md
new file mode 100644
index 0000000..e7c47b5
--- /dev/null
+++ b/website/blog/Validator-Online.md
@@ -0,0 +1,18 @@
+---
+title: First PPMP-Validator Online
+date: 2017-06-29 00:00:00
+tags: "validator"
+---
+Our first PPMP-Validator as a HTTP-server is online!
+
+What we already contribtuted as sourcecode to the Unide-project we've also installed on an eclipse sandbox server. Now you are able to validate your PPMP-messages through the internet without running the server on your local machine. The intention is to make the latest specification validator accessible to everyone at anytime.
+
+You can reach the server by sending POST-requests to the following endpoints:
+
+
+http://unide.eclipse.org/rest/v2/message?validate=true
+http://unide.eclipse.org/rest/v2/measurement?validate=true
+http://unide.eclipse.org/rest/v2/process?validate=true
+
+
+Further functions of the sandbox server will be also visualization and storaging of incoming PPMP-messages.
diff --git a/website/blog/grinding-machine-scenario.md b/website/blog/grinding-machine-scenario.md
new file mode 100644
index 0000000..da1aa68
--- /dev/null
+++ b/website/blog/grinding-machine-scenario.md
@@ -0,0 +1,191 @@
+---
+title: "PPMP Use Cases: Unide and the Eclipse Production Performance Management Testbed"
+date: 2018-02-13 00:00:00
+tags: "use cases"
+---
+
+## Abstract
+
+In this blog post we present a real world condition monitoring scenario used in
+the [Eclipse Production Performance Management Testbed][1], where Unide and
+PPMP plays a crucial role. Moreover, we also provide a code repository and
+instructions so that you can recreate the scenario in your own computer and
+learn about its components and the communication with each other.
+
+
+## Introduction
+
+In the context of the [Eclipse Production Performance Management Testbed][1], a
+real world condition monitoring scenario has been recreated, in which a
+grinding machine is being continuously monitored allowing to have real time
+health checks and prevent unexpected failures.
+
+This scenario consists of the following building blocks: device, gateway,
+backend. The communication between them happens seamlessly thanks to the
+Production Performance management Protocol (PPMP).
+
+- The device, i.e. the grinding machine, has been retrofitted with an
+ acceleration sensor attached to one of its critical components. The data
+ provided by this sensor is routed to the gateway in the form of a [PPMP
+ Measurement Message][2].
+
+- The gateway receives the raw acceleration measurements, calculates some
+ statistical characteristics and and applies some machine learning techniques
+ to them in order to evaluate the condition of the grinding machine. Then both
+ the statistical values and the condition are routed to the backend, again in
+ the form of a PPMP Measurement Message.
+
+- The backend, usually in the cloud, is any component that "speaks PPMP" and
+ performs meaningful operations on the incoming messages. Most frequently it
+ is responsible for storing the arriving data and making it available to apps
+ that want to consume it. Common responsibilities of these apps are the
+ representation or display of the data (e.g. dashboards), or workflows
+ management (e.g. the grinding machine is in bad condition and an inspection
+ must be carried out).
+
+ The backend can be swapped effortless with any entity adhering to PPMP standard.
+ In the Eclipse PPM Testbed at least two different backends have been used:
+ - One directly based on [Unide][3]
+ - One based on [CONTACT Elements for IoT][4].
+
+
+## Hands-on demonstration
+
+In order to make this scenario more hands-on and interesting, within the
+[Production Performance Management Testbed repository][5] project in Github, we
+have set up a [subproject for the grinding machine scenario][7]. There you can
+find a thorough description and code to simulate the device and the gateway,
+and route messages to a given backend. The only requirements are git and conda
+(the easiest way to get conda is to [install miniconda][6]).
+
+So, let's get started! First of all, open your terminal and clone the
+repository:
+
+```bash
+$ git clone https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement eclipse-testbed-ppm
+$ cd eclipse-testbed-ppm/grinding-machine
+```
+
+Then move to the grinding machine subproject directory:
+
+```bash
+$ cd eclipse-testbed-ppm/grinding-machine
+```
+
+In that folder you will see two subfolders. The first one
+`unide-grinding-machine` contains a Python program that simulates grinding
+machine and the second one `unide-grinding-machine-gateway` simulates the
+gateway.
+
+
+### Grinding Machine simulator
+
+Let's start with the first component. First `cd` to `unide-grinding-machine`
+and then create the conda environment:
+
+```bash
+$ conda env create --prefix=env
+```
+
+And then in order to use this environment, we need to activate it.
+
+```bash
+$ source activate env # or in windows: activate env
+```
+
+Run `unide-grinding-machine -h` to get familiar with the CLI. With this
+executable we can generate some machine grinding data, and (for the moment)
+print messages to the console. To do so, run `unide-grinding-machine send
+random` and you should get a large message on the console. This is the PPMP
+message ought to be sent to the gateway.
+
+We don't have a gateway so far, but don't worry, we will get to that in a
+minute. Don't close this console!
+
+
+### Gateway simulator
+
+Open a new console, and similarly to the previous point, first `cd` to
+`unide-grinding-machine-gateway`, create the environment (`conda env
+create --prefix=env`) and activate it (`source activate env`).
+
+The run the command `unide-grinding-machine-gateway -h` to test that everything
+is in place. You should get the CLI documentation.
+
+Now, let's fire up the gateway by calling `unide-grinding-machine-gateway
+start_server`, and a message like this should show up:
+
+```bash
+Running
+Listening on http://127.0.0.1:5000
+Press Ctrl-C to stop...
+```
+
+We are getting closer. Leave the gateway running.
+
+
+### Communication Device-Gateway
+
+Let's go back to the previous console where we had the `unide-grinding-machine`
+environment and call again the `unide-grinding-machine` program, but this time
+passing the as an argument where the gateway is listening to messages.
+
+```bash
+$ unide-grinding-machine send random --endpoint=http://127.0.0.1:5000
+```
+
+If you take peek at the gateway output, you should see new information printed
+out, which is a PPMP message containing the result of the classification
+algorithms applied to the device data we just sent to it.
+
+We are getting somewhere! But still, it is not extremely useful to print some
+characters into a console, is it?
+
+
+### Communication Device-Gateway-Backend
+
+There is only a small but relevant point missing: the routing from the gateway
+to the backend. We need a backend and the Unide project provides a service that
+can be used as a playground for these purposes. So let's restart the gateway,
+this time passing the Unide endpoint:
+
+```bash
+$ unide-grinding-machine-gateway start_server --endpoint=https://unide.eclipse.org/rest/v2
+```
+
+Now we can use the `unide-grinding-machine` to send raw data to the gateway
+which in turn sends its results to the backend. In order to be able to
+identify this data later, we are going to define a proper device ID (argument
+`--device-id`), and also tell it to send data once each 10 seconds (argument
+`--period`):
+
+```bash
+$ unide-grinding-machine send random --endpoint=http://127.0.0.1:5000 --device-id=IoT-000028--3 --period=10
+```
+
+Once started, a continuous flow of data is pumped through each component until
+it reaches the backend, allowing us to use the applications that consume this
+data. For instance, the basic backend provided by Unide offers a [Grafana][8] based
+dashboard that offers live monitoring of the statistical values calculated in the
+gateway:
+
+![Grafana based dashboard monitoring grinding machine][9]
+
+If instead of that we use the the [CONTACT Elements for IoT][4] based backend,
+we can see a different and richer dashboard: charts, 3D models, list of
+maintenance events, device master data and the Activity Stream, a place where
+different parties can exchange information related to the grinding machine:
+
+![CONTACT Elements for IoT Dashboard][10]
+
+[1]: https://iot.eclipse.org/testbeds/production-performance-management/#
+[2]: https://www.eclipse.org/unide/specification/measurement-message#messageDetail
+[3]: https://github.com/eclipse/unide
+[4]: https://www.contact-software.com/en/products/elements-for-iot/
+[5]: https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement
+[6]: https://conda.io/miniconda.html
+[7]: https://github.com/eclipselabs/eclipseiot-testbed-productionperformancemanagement/tree/master/grinding-machine
+[8]: https://grafana.com/
+[9]: /unide/images/blog/grinding-machine-grafana-dashboard.png
+[10]: /unide/images/blog/grinding-machine-ce4iot-dashboard.png
+
diff --git a/website/blog/i40-testbed-started.md b/website/blog/i40-testbed-started.md
new file mode 100644
index 0000000..226bb4d
--- /dev/null
+++ b/website/blog/i40-testbed-started.md
@@ -0,0 +1,8 @@
+---
+title: Unide is part of Industry 4.0 Testbed
+date: 2017-10-19 00:00:00
+tags: "testbed"
+---
+The Eclipse IoT Working group has started another testbed around Production Performance Management. Together with other Eclipse projects but also manufacturing companies, we aim to showcase and test the software in real life scenarios.
+[Contact Software](https://www.contact-software.com), [Eurotech](https://www.eurotech.com) and [Eclipse 4diac](https://www.eclipse.org/4diac/) provide bindings to actual machines, Unide and PPMP will be used for structuring and normalizing the information, [Ecipse Hono](https://projects.eclipse.org/projects/iot.hono) and other provide the advanced infrastructure and [influx data](https://www.influxdata.com/) persists the data.
+You can find more information in the [Press Release](https://eclipse.org/org/press-release/20171019_industry40_testbed.php) or the [homepage of the testbed](https://iot.eclipse.org/testbeds/production-performance-management/#).
diff --git a/website/components/blogArchives.vue b/website/components/blogArchives.vue
new file mode 100644
index 0000000..0d925c7
--- /dev/null
+++ b/website/components/blogArchives.vue
@@ -0,0 +1,45 @@
+
+
+
+ Blog Archives
+
+
+
+
+ {{ post | timeStamp }}
+
+ ({{ post.count }})
+
+
+
+
+
+
+
+
+
diff --git a/website/components/collapsibleCard.vue b/website/components/collapsibleCard.vue
new file mode 100644
index 0000000..8c22658
--- /dev/null
+++ b/website/components/collapsibleCard.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
diff --git a/website/components/cookieCheck.vue b/website/components/cookieCheck.vue
new file mode 100644
index 0000000..ae50782
--- /dev/null
+++ b/website/components/cookieCheck.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+ This website uses cookies for reasons of functionality, convenience, and statistics. For information on deleting the cookies, please consult your browser’s help function.
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/website/components/eclipseFooter.vue b/website/components/eclipseFooter.vue
new file mode 100644
index 0000000..551b8c8
--- /dev/null
+++ b/website/components/eclipseFooter.vue
@@ -0,0 +1,26 @@
+
+
+
\ No newline at end of file
diff --git a/website/components/navbar.vue b/website/components/navbar.vue
new file mode 100644
index 0000000..815b3b5
--- /dev/null
+++ b/website/components/navbar.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
diff --git a/website/components/recentPosts.vue b/website/components/recentPosts.vue
new file mode 100644
index 0000000..5a53e89
--- /dev/null
+++ b/website/components/recentPosts.vue
@@ -0,0 +1,34 @@
+
+
+
+ Recent Posts
+
+
+
+
+ {{ post.title }}
+
+
+
+
+
+
+
+
+
diff --git a/website/components/schemaDetail.vue b/website/components/schemaDetail.vue
new file mode 100644
index 0000000..3efc6d5
--- /dev/null
+++ b/website/components/schemaDetail.vue
@@ -0,0 +1,356 @@
+
+
+
+
+
+ Structure of the payload
+
+
+
+
+
+
+
+
+
+ Fields definition
+
+
+
+
+
+
+
+ Description:
+
+
+ {{ schema.description }}
+
+
+ A simple {{ schema.type | capitalize }}
+
+
+
+
+ Parent:
+
+
+
+
+
+
+
+
+
+ Type:
+
+
+ {{ schema.type | capitalize(schema) }}
+
+
+
+
+
+ Possible values:
+
+
+
+ {{ schema.enum.join(', ') }}
+
+
+
+
+
+ Defaults to:
+
+
+
+ {{ schema.default }}
+
+
+
+
+
+ Maximum length:
+
+
+
+ {{ schema.maxLength }}
+
+
+
+
+
+ Restriction on subfields:
+
+
+
+
+ Matching regular expressions:
+
+
+
+ Ordered items of type:
+
+
none
+
+
+
+
+ Minimum amount of subfields:
+
+
+
+ {{ schema.minProperties }}
+
+
+
+
+
+ Minimum amount of items:
+
+
+
+ {{ schema.minItems }}
+
+
+
+
+
+ Allows additional fields:
+
+
+
+ if fulfilling
+
+
+
+
+ Restriction with boolean logic:
+
+
+
+ Not fulfilling
+
+
+ Fulfilling exactly one of:
+
+
+ Fulfilling all of:
+
+
+ Fulfilling one of:
+
+
+
+
+
+ Required fields:
+
+
+ {{ schema.required.join(', ') }}
+
+
+
+
+ Example:
+
+
+
{{ example | stringify }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/components/schemaLink.vue b/website/components/schemaLink.vue
new file mode 100644
index 0000000..148154c
--- /dev/null
+++ b/website/components/schemaLink.vue
@@ -0,0 +1,45 @@
+
+
+
+
+ yes
+
+
+ no
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/components/schemaToc.vue b/website/components/schemaToc.vue
new file mode 100644
index 0000000..6c565cf
--- /dev/null
+++ b/website/components/schemaToc.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/layouts/default.vue b/website/layouts/default.vue
new file mode 100644
index 0000000..eecdf82
--- /dev/null
+++ b/website/layouts/default.vue
@@ -0,0 +1,40 @@
+
+
+
+
+ Home
+
+
+ Proposal
+
+
+ Specification
+
+
+ Blog Archives
+
+
+ FAQ
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/layouts/sidebar.vue b/website/layouts/sidebar.vue
new file mode 100644
index 0000000..7a69f2a
--- /dev/null
+++ b/website/layouts/sidebar.vue
@@ -0,0 +1,62 @@
+
+
+
+
+ Home
+
+
+ Proposal
+
+
+ Specification
+
+
+ Blog Archives
+
+
+ FAQ
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/modules/postsIdxPlugin.js b/website/modules/postsIdxPlugin.js
new file mode 100644
index 0000000..cb83408
--- /dev/null
+++ b/website/modules/postsIdxPlugin.js
@@ -0,0 +1,192 @@
+const fs = require('fs'),
+ path = require('path'),
+ VirtualModulePlugin = require('webpack-virtual-modules'),
+ fm = require('front-matter'),
+ Prism = require('prismjs'),
+ marked = new (require('markdown-it'))({
+ html: true,
+ linkify: true,
+ breaks: true,
+ plugins: [
+ require('markdown-it-decorate')
+ ],
+ highlight: (code, lang) => {
+ let prismLanguage = Prism.languages[lang];
+ if(!prismLanguage) {
+ try {
+ require(`prismjs/components/prism-${lang}`);
+ prismLanguage = Prism.languages[lang];
+ if(!prismLanguage) {
+ throw new Error();
+ }
+ } catch(e) {
+ throw new Error(`Prism language not registered: '${lang}'`);
+ }
+ }
+ return `${Prism.highlight(code, prismLanguage)}
`;
+ }
+ }),
+ postFiles = fs.readdirSync(path.join(__dirname, '..', 'blog'))
+ .filter(filename => filename.endsWith('.md'))
+ .map(filename => {
+ const filepath = path.join(__dirname, '..', 'blog', filename),
+ data = fs.readFileSync(filepath),
+ {
+ attributes,
+ body
+ } = fm(data.toString()),
+ name = `${filename.substr(0, filename.length - 3)}`;
+ if(attributes.date) {
+ attributes.date = new Date(attributes.date);
+ } else {
+ return null;
+ }
+ if(attributes.tags) {
+ if(!(attributes.tags instanceof Array)) {
+ attributes.tags = [attributes.tags];
+ }
+ } else {
+ attributes.tags = [];
+ }
+ return Object.assign({
+ name,
+ content: marked.render(body),
+ url: attributes.url || (attributes.date && `/blog/${attributes.date.getFullYear()}/${attributes.date.getMonth() + 1}/${attributes.date.getDate()}/${name}`)
+ }, attributes);
+ }).filter(f => f).sort((a, b) => a.date - b.date);
+
+postFiles.forEach((file, idx) => {
+ if(idx) {
+ const prev = postFiles[idx - 1];
+ prev.next = {
+ url: file.url,
+ title: file.title
+ };
+ file.prev = {
+ url: prev.url,
+ title: prev.title
+ };
+ }
+});
+
+module.exports = function(options) {
+ this.options.build = this.options.build || {};
+ const extend = this.options.build.extend,
+ postStructure = postFiles.reduce((l, file) => {
+ const f = {
+ url: file.url,
+ title: file.title,
+ date: file.date
+ };
+ if(!f.date) {
+ return l;
+ }
+ // eslint-disable-next-line one-var
+ const year = f.date.getFullYear(),
+ month = f.date.getMonth() + 1,
+ day = f.date.getDate();
+ if(!l.hierarchy[year]) {
+ l.hierarchy[year] = {};
+ l.list[`${year}`] = [];
+ }
+ if(!l.hierarchy[year][month]) {
+ l.hierarchy[year][month] = {};
+ l.list[`${year}/${month}`] = [];
+ }
+ if(!l.hierarchy[year][month][day]) {
+ l.hierarchy[year][month][day] = 0;
+ l.list[`${year}/${month}/${day}`] = [];
+ }
+
+ l.list[`${year}`].push(f);
+ l.list[`${year}/${month}`].push(f);
+ l.list[`${year}/${month}/${day}`].push(f);
+ l.hierarchy[year][month][day]++;
+ return l;
+ }, {
+ hierarchy: {},
+ list: {}
+ });
+
+ // render all the posts
+ postFiles.forEach((file, idx) => {
+ if(file.url) {
+ this.options.generate.routes.push({
+ route: file.url,
+ payload: file
+ });
+ }
+ });
+
+ // render the year/month/day indexes
+ Object.entries(postStructure.list).forEach(([postPath, list]) => {
+ this.options.generate.routes.push({
+ route: `/blog/${postPath}`,
+ payload: list
+ });
+ });
+
+ // don't extend routes for every post as this is part of every (spa) page (router config)
+ this.options.router = this.options.router || {};
+ this.options.router.extendRoutes = (routes, resolve) => {
+ routes.push({
+ path: `/blog/:year/:month/:day/:name`,
+ component: resolve(path.join(__dirname, '..', 'pages', 'article.vue'))
+ }, {
+ path: `/blog/:year?/:month?/:day?`,
+ component: resolve(path.join(__dirname, '..', 'pages', 'blog.vue'))
+ });
+ };
+
+ this.options.build.extend = function(config, ctx) {
+ // virtual pages
+ config.plugins.push(
+ new VirtualModulePlugin({
+ 'node_modules/posts/recent.json': JSON.stringify(postFiles.slice(-5).map(file => ({
+ url: file.url,
+ title: file.title,
+ date: file.date
+ }))),
+ 'node_modules/posts/archives.json': JSON.stringify(Object.entries(postStructure.hierarchy).reduce((l, [year, months]) => {
+ Object.entries(months).forEach(([month, days]) => {
+ l.push({
+ year: year,
+ month: month,
+ url: `/blog/${year}/${month}`,
+ count: Object.values(days).reduce((count, day) => {
+ count += day;
+ return count;
+ }, 0)
+ });
+ });
+ return l;
+ }, []))
+ })
+ );
+
+ config.plugins.push({
+ apply(compiler) {
+ compiler.plugin('emit', (compilation, callback) => {
+ postFiles.forEach(file => {
+ const str = JSON.stringify(file);
+ compilation.fileDependencies.push(path.join(__dirname, '..', 'blog', `${file.name}.md`));
+ compilation.assets[`posts/${file.name}.json`] = {
+ source: () => str,
+ size: () => str.length
+ };
+ });
+ Object.entries(postStructure.list).forEach(([postPath, list]) => {
+ const str = JSON.stringify(list);
+ compilation.assets[`posts/${postPath}.json`] = {
+ source: () => str,
+ size: () => str.length
+ };
+ });
+ return callback();
+ });
+ }
+ });
+
+ return extend.apply(this, arguments);
+ };
+};
diff --git a/website/nuxt.config.js b/website/nuxt.config.js
new file mode 100644
index 0000000..536abf0
--- /dev/null
+++ b/website/nuxt.config.js
@@ -0,0 +1,76 @@
+module.exports = {
+ head: {
+ title: 'Welcome',
+ titleTemplate: 'Eclipse unide - %s',
+ meta: [{
+ charset: 'utf-8'
+ }, {
+ name: 'viewport',
+ content: 'width=device-width, initial-scale=1'
+ }, {
+ hid: 'description',
+ name: 'description',
+ content: 'Eclipse Unide: Understand Industry devices'
+ }],
+ link: [
+ { rel: 'icon', type: 'image/x-icon', href: '/unide/favicon.ico' }
+ ]
+ },
+ css: [{
+ src: '~assets/styles.scss',
+ lang: 'scss'
+ }],
+ render: {
+ resourceHints: false
+ },
+ loading: { color: '#50237f' },
+ build: {
+ extend(config, ctx) {
+ if(ctx.isClient && ctx.isDev) {
+ // only fails in client.js in dev mode, so no real need for:
+ /* if(!(config.entry.app instanceof Array)) {
+ config.entry.app = [ config.entry.app ];
+ }
+ config.entry.app.unshift('core-js/fn/array/filter'); */
+ config.module.rules.push({
+ enforce: 'pre',
+ test: /\.(js|vue)$/,
+ loader: 'eslint-loader',
+ exclude: /(node_modules)/
+ });
+ }
+ config.module.rules.push({
+ test: /schema\.json$/,
+ exclude: /node_modules/,
+ loader: 'json-schema-loader',
+ options: {}
+ });
+ },
+ postcss: {
+ plugins: {
+ 'postcss-custom-properties': false
+ }
+ },
+ extractCSS: true,
+ publicPath: '/files/',
+ babel: {
+ presets: [['vue-app', {
+ targets: { ie: 9 }
+ }]],
+ plugins: ['transform-runtime']
+ }
+ },
+
+ plugins: [{
+ src: '~/plugins/ga.js'
+ }, {
+ src: '~/plugins/prismjs.js'
+ }],
+
+ router: {
+ base: '/unide/'
+ //, fallback: true
+ },
+
+ modules: [['~modules/postsIdxPlugin', {}]]
+};
diff --git a/website/package-lock.json b/website/package-lock.json
new file mode 100644
index 0000000..ceeb6a4
--- /dev/null
+++ b/website/package-lock.json
@@ -0,0 +1,12309 @@
+{
+ "name": "unide",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz",
+ "integrity": "sha512-yd7CkUughvHQoEahQqcMdrZw6o/6PwUxiRkfZuVDVHCDe77mysD/suoNyk5mK6phTnRW1kyIbPHyCJgxw++LXg==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.0",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz",
+ "integrity": "sha512-c+DAyp8LMm2nzSs2uXEuxp4LYGSUYEyHtU3fU57avFChjsnTmmpWmXj2dv0yUxHTEydgVAv5fIzA+4KJwoqWDA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "7.0.0-beta.31",
+ "@babel/template": "7.0.0-beta.31",
+ "@babel/traverse": "7.0.0-beta.31",
+ "@babel/types": "7.0.0-beta.31"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz",
+ "integrity": "sha512-m7rVVX/dMLbbB9NCzKYRrrFb0qZxgpmQ4Wv6y7zEsB6skoJHRuXVeb/hAFze79vXBbuD63ci7AVHXzAdZSk9KQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "7.0.0-beta.31"
+ }
+ },
+ "@babel/template": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.31.tgz",
+ "integrity": "sha512-97IRmLvoDhIDSQkqklVt3UCxJsv0LUEVb/0DzXWtc8Lgiyxj567qZkmTG9aR21CmcJVVIvq2Y/moZj4oEpl5AA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.31",
+ "@babel/types": "7.0.0-beta.31",
+ "babylon": "7.0.0-beta.31",
+ "lodash": "4.17.4"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.31.tgz",
+ "integrity": "sha512-6lm2mV3S51yEnKmQQNnswoABL1U1H1KHoCCVwdwI3hvIv+W7ya4ki7Aw4o4KxtUHjNKkK5WpZb22rrMMOcJXJQ==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.31.tgz",
+ "integrity": "sha512-3N+VJW+KlezEjFBG7WSYeMyC5kIqVLPb/PGSzCDPFcJrnArluD1GIl7Y3xC7cjKiTq2/JohaLWHVPjJWHlo9Gg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.31",
+ "@babel/helper-function-name": "7.0.0-beta.31",
+ "@babel/types": "7.0.0-beta.31",
+ "babylon": "7.0.0-beta.31",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.31.tgz",
+ "integrity": "sha512-6lm2mV3S51yEnKmQQNnswoABL1U1H1KHoCCVwdwI3hvIv+W7ya4ki7Aw4o4KxtUHjNKkK5WpZb22rrMMOcJXJQ==",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.31.tgz",
+ "integrity": "sha512-exAHB+NeFGxkfQ5dSUD03xl3zYGneeSk2Mw2ldTt/nTvYxuDiuSp3DlxgUBgzbdTFG4fbwPk0WtKWOoTXCmNGg==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "@nuxtjs/youch": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@nuxtjs/youch/-/youch-4.2.3.tgz",
+ "integrity": "sha512-XiTWdadTwtmL/IGkNqbVe+dOlT+IMvcBu7TvKI7plWhVQeBCQ9iKhk3jgvVWFyiwL2yHJDlEwOM5v9oVES5Xmw==",
+ "requires": {
+ "cookie": "0.3.1",
+ "mustache": "2.3.0",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "@std/esm": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@std/esm/-/esm-0.19.1.tgz",
+ "integrity": "sha512-4Ph4hdaDIkt5sChK565oU16Wa9jcBwLbiNAMEB6fyQZlBw5uz3UpxTo/ZohjeILgJfNtb/l1HzVql1ys5s74Ww=="
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
+ "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w=="
+ },
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "requires": {
+ "acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.1.tgz",
+ "integrity": "sha1-s4u4h22ehr7plJVqBOch6IskjrI=",
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I="
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "requires": {
+ "micromatch": "3.1.5",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "dev": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-filter": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw="
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.2",
+ "es-abstract": "1.10.0"
+ }
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI="
+ },
+ "array-reduce": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys="
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
+ "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+ },
+ "async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
+ "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10="
+ },
+ "autoprefixer": {
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.4.tgz",
+ "integrity": "sha512-am8jJ7Rbh1sy7FvLvNxxQScWvhv2FwLAS3bIhvrZpx9HbX5PEcc/7v6ecgpWuiu0Dwlj+p/z/1boHd8x60JFwA==",
+ "requires": {
+ "browserslist": "2.11.0",
+ "caniuse-lite": "1.0.30000789",
+ "normalize-range": "0.1.2",
+ "num2fraction": "1.2.2",
+ "postcss": "6.0.16",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz",
+ "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=",
+ "requires": {
+ "follow-redirects": "1.2.5",
+ "is-buffer": "1.1.6"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "babel-eslint": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.0.3.tgz",
+ "integrity": "sha512-7D4iUpylEiKJPGbeSAlNddGcmA41PadgZ6UAb6JVyh003h3d0EbZusYFBR/+nBgqtaVJM2J2zUVa3N0hrpMH6g==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.31",
+ "@babel/traverse": "7.0.0-beta.31",
+ "@babel/types": "7.0.0-beta.31",
+ "babylon": "7.0.0-beta.31"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.31",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.31.tgz",
+ "integrity": "sha512-6lm2mV3S51yEnKmQQNnswoABL1U1H1KHoCCVwdwI3hvIv+W7ya4ki7Aw4o4KxtUHjNKkK5WpZb22rrMMOcJXJQ==",
+ "dev": true
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "requires": {
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-explode-assignable-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
+ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-vue-jsx-merge-props": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
+ "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-loader": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz",
+ "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==",
+ "requires": {
+ "find-cache-dir": "1.0.0",
+ "loader-utils": "1.1.0",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-jsx-event-modifiers": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jsx-event-modifiers/-/babel-plugin-jsx-event-modifiers-2.0.5.tgz",
+ "integrity": "sha512-tWGnCk0whZ+nZcj9tYLw4+y08tPJXqaEjIxRJZS6DkUUae72Kz4BsoGpxt/Kow7mmgQJpvFCw8IPLSNh5rkZCg=="
+ },
+ "babel-plugin-jsx-v-model": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jsx-v-model/-/babel-plugin-jsx-v-model-2.0.3.tgz",
+ "integrity": "sha512-SIx3Y3XxwGEz56Q1atwr5GaZsxJ2IRYmn5dl38LFkaTAvjnbNQxsZHO+ylJPsd+Hmv+ixJBYYFEekPBTHwiGfQ==",
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "html-tags": "2.0.0",
+ "svg-tags": "1.0.0"
+ }
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU="
+ },
+ "babel-plugin-syntax-dynamic-import": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+ "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo="
+ },
+ "babel-plugin-syntax-exponentiation-operator": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+ "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4="
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM="
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ }
+ },
+ "babel-plugin-transform-exponentiation-operator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
+ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-runtime": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
+ "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-vue-jsx": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-3.5.0.tgz",
+ "integrity": "sha512-5vCg8K7aiiLwrFJ45ZF/b4cIiFpGAoYL5uNZpbgiZFptBc5LkueBCQXTVexrd1IFlpTV7XndqFjtWjcJ54JGUQ==",
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
+ "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+ }
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
+ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.11.0",
+ "invariant": "2.2.2",
+ "semver": "5.4.1"
+ }
+ },
+ "babel-preset-vue": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-vue/-/babel-preset-vue-2.0.0.tgz",
+ "integrity": "sha512-mu6A9xkq9kDd31eZHrXxGei/3PiSpJZ8FYzVcb2HCl2pwntqbczzyBDAw8iK1vDDpMWppllnatCgyTLe+HSWsw==",
+ "requires": {
+ "babel-helper-vue-jsx-merge-props": "2.0.3",
+ "babel-plugin-jsx-event-modifiers": "2.0.5",
+ "babel-plugin-jsx-v-model": "2.0.3",
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-plugin-transform-vue-jsx": "3.5.0"
+ }
+ },
+ "babel-preset-vue-app": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-vue-app/-/babel-preset-vue-app-2.0.0.tgz",
+ "integrity": "sha512-w81q5FMPvD+VNC1Sc1vXeSkNb8hVehQzhoUrESt4edzghuBgb3twLWkknbNxh5W4SN5Cz75b/rUPOvxDuh2low==",
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "6.18.0",
+ "babel-plugin-transform-object-rest-spread": "6.26.0",
+ "babel-plugin-transform-runtime": "6.23.0",
+ "babel-preset-env": "1.6.1",
+ "babel-preset-vue": "2.0.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.3",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.5",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.0",
+ "pascalcase": "0.1.1"
+ }
+ },
+ "base64-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
+ "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw=="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
+ },
+ "binary-extensions": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU="
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ },
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.15"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+ },
+ "boom": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
+ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
+ "dev": true,
+ "requires": {
+ "hoek": "4.2.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz",
+ "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==",
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.1",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.1"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browserify-aes": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
+ "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "requires": {
+ "browserify-aes": "1.1.1",
+ "browserify-des": "1.0.0",
+ "evp_bytestokey": "1.0.3"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "randombytes": "2.0.5"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "elliptic": "6.4.0",
+ "inherits": "2.0.3",
+ "parse-asn1": "5.1.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "requires": {
+ "pako": "1.0.6"
+ }
+ },
+ "browserslist": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.0.tgz",
+ "integrity": "sha512-mNYp0RNeu1xueGuJFSXkU+K0nH+dBE/gcjtyhtNKfU8hwdrVIfoA7i5iFSjOmzkGdL2QaO7YX9ExiVPE7AY9JA==",
+ "requires": {
+ "caniuse-lite": "1.0.30000789",
+ "electron-to-chromium": "1.3.30"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "requires": {
+ "base64-js": "1.2.1",
+ "ieee754": "1.1.8",
+ "isarray": "1.0.0"
+ }
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+ },
+ "bulma": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.6.1.tgz",
+ "integrity": "sha1-XyGnfAwG99gAUcBmKMI1Fggb1kk="
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "cacache": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.2.tgz",
+ "integrity": "sha512-dljb7dk1jqO5ogE+dRpoR9tpHYv5xz9vPSNunh1+0wRuNdYxmzp9WmsyokgW/DUF1FDRVA/TMsmxt027R8djbQ==",
+ "requires": {
+ "bluebird": "3.5.1",
+ "chownr": "1.0.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lru-cache": "4.1.1",
+ "mississippi": "1.3.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.2",
+ "ssri": "5.0.0",
+ "unique-filename": "1.1.0",
+ "y18n": "3.2.1"
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "requires": {
+ "no-case": "2.3.2",
+ "upper-case": "1.1.3"
+ }
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ }
+ }
+ },
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000789",
+ "lodash.memoize": "4.1.2",
+ "lodash.uniq": "4.5.0"
+ },
+ "dependencies": {
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "1.0.30000789",
+ "electron-to-chromium": "1.3.30"
+ }
+ }
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30000789",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000789.tgz",
+ "integrity": "sha1-XPP+x1SABBqxYsoGQTFTFB4jQyU="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000789",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000789.tgz",
+ "integrity": "sha1-Lj2TeyZxM/Y2Ne9/RB+sZjYPyIk="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ },
+ "dependencies": {
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
+ },
+ "chokidar": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.0.tgz",
+ "integrity": "sha512-OgXCNv2U6TnG04D3tth0gsvdbV4zdbxFG3sYUqcoQMoEFVd1j1pZR6TZ8iknC45o9IJ6PeQI/J6wT/+cHcniAw==",
+ "requires": {
+ "anymatch": "2.0.0",
+ "async-each": "1.0.1",
+ "braces": "2.3.0",
+ "fsevents": "1.1.3",
+ "glob-parent": "3.1.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "4.0.0",
+ "normalize-path": "2.1.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE="
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "requires": {
+ "chalk": "1.1.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.5.tgz",
+ "integrity": "sha1-F+eTEDdQ+WJ7IXbqNM/RtWWQPIA=",
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "lazy-cache": "2.0.2",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "clean-css": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz",
+ "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=",
+ "requires": {
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
+ },
+ "clipboard": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz",
+ "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=",
+ "optional": true,
+ "requires": {
+ "good-listener": "1.2.2",
+ "select": "1.1.2",
+ "tiny-emitter": "2.0.2"
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs="
+ },
+ "clone-deep": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz",
+ "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=",
+ "dev": true,
+ "requires": {
+ "for-own": "1.0.0",
+ "is-plain-object": "2.0.4",
+ "kind-of": "3.2.2",
+ "shallow-clone": "0.1.2"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ }
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "requires": {
+ "clone": "1.0.3",
+ "color-convert": "1.9.1",
+ "color-string": "0.3.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8="
+ }
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "requires": {
+ "color": "0.11.4",
+ "css-color-names": "0.0.4",
+ "has": "1.0.1"
+ }
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz",
+ "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "compressible": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz",
+ "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=",
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "compression": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz",
+ "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=",
+ "requires": {
+ "accepts": "1.3.4",
+ "bytes": "3.0.0",
+ "compressible": "2.0.12",
+ "debug": "2.6.9",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "connect": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz",
+ "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=",
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.0.6",
+ "parseurl": "1.3.2",
+ "utils-merge": "1.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "requires": {
+ "date-now": "0.1.4"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "consolidate": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz",
+ "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=",
+ "requires": {
+ "bluebird": "3.5.1"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU="
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "requires": {
+ "aproba": "1.2.0",
+ "fs-write-stream-atomic": "1.0.10",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2",
+ "run-queue": "1.0.3"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cosmiconfig": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz",
+ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==",
+ "requires": {
+ "is-directory": "0.3.1",
+ "js-yaml": "3.7.0",
+ "minimist": "1.2.0",
+ "object-assign": "4.1.1",
+ "os-homedir": "1.0.2",
+ "parse-json": "2.2.0",
+ "require-from-string": "1.2.1"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "elliptic": "6.4.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
+ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
+ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "cryptiles": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
+ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
+ "dev": true,
+ "requires": {
+ "boom": "5.2.0"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
+ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
+ "dev": true,
+ "requires": {
+ "hoek": "4.2.0"
+ }
+ }
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "requires": {
+ "browserify-cipher": "1.0.0",
+ "browserify-sign": "4.0.4",
+ "create-ecdh": "4.0.0",
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "diffie-hellman": "5.0.2",
+ "inherits": "2.0.3",
+ "pbkdf2": "3.0.14",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.5",
+ "randomfill": "1.0.3"
+ }
+ },
+ "css-color-function": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/css-color-function/-/css-color-function-1.3.3.tgz",
+ "integrity": "sha1-jtJMLAIFBzM5+voAS8jBQfzLKC4=",
+ "requires": {
+ "balanced-match": "0.1.0",
+ "color": "0.11.4",
+ "debug": "3.1.0",
+ "rgb": "0.1.0"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.1.0.tgz",
+ "integrity": "sha1-tQS9BYabOSWd0MXvw12EMXbczEo="
+ }
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
+ },
+ "css-hot-loader": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/css-hot-loader/-/css-hot-loader-1.3.5.tgz",
+ "integrity": "sha512-wErl3yRqftt2YAe/cBidwIyJW+vhc/VqcqJ0tIAb5NzNPllz+pT0oA2f6SI3vL1Y/wHAVjW8fz/yLtkKp0z4NQ==",
+ "requires": {
+ "loader-utils": "1.1.0",
+ "normalize-url": "1.9.1"
+ }
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.1"
+ }
+ },
+ "css-selector-tokenizer": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz",
+ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=",
+ "requires": {
+ "cssesc": "0.1.0",
+ "fastparse": "1.1.1",
+ "regexpu-core": "1.0.0"
+ },
+ "dependencies": {
+ "regexpu-core": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
+ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ }
+ }
+ },
+ "css-unit-converter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
+ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY="
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0="
+ },
+ "cssesc": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
+ "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q="
+ },
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "requires": {
+ "autoprefixer": "6.7.7",
+ "decamelize": "1.2.0",
+ "defined": "1.0.0",
+ "has": "1.0.1",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-calc": "5.3.1",
+ "postcss-colormin": "2.2.2",
+ "postcss-convert-values": "2.6.1",
+ "postcss-discard-comments": "2.0.4",
+ "postcss-discard-duplicates": "2.1.0",
+ "postcss-discard-empty": "2.1.0",
+ "postcss-discard-overridden": "0.1.1",
+ "postcss-discard-unused": "2.2.3",
+ "postcss-filter-plugins": "2.0.2",
+ "postcss-merge-idents": "2.1.7",
+ "postcss-merge-longhand": "2.0.2",
+ "postcss-merge-rules": "2.1.2",
+ "postcss-minify-font-values": "1.0.5",
+ "postcss-minify-gradients": "1.0.5",
+ "postcss-minify-params": "1.2.2",
+ "postcss-minify-selectors": "2.1.1",
+ "postcss-normalize-charset": "1.1.1",
+ "postcss-normalize-url": "3.0.8",
+ "postcss-ordered-values": "2.2.3",
+ "postcss-reduce-idents": "2.4.0",
+ "postcss-reduce-initial": "1.0.1",
+ "postcss-reduce-transforms": "1.0.4",
+ "postcss-svgo": "2.1.6",
+ "postcss-unique-selectors": "2.0.2",
+ "postcss-value-parser": "3.3.0",
+ "postcss-zindex": "2.2.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000789",
+ "normalize-range": "0.1.2",
+ "num2fraction": "1.2.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "1.0.30000789",
+ "electron-to-chromium": "1.3.30"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "requires": {
+ "clap": "1.2.3",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "cuint": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
+ "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs="
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "requires": {
+ "array-find-index": "1.0.2"
+ }
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA="
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "requires": {
+ "es5-ext": "0.10.37"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+ },
+ "de-indent": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
+ "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.0.1.tgz",
+ "integrity": "sha512-VIPwiMJqJ13ZQfaCsIFnp5Me9tnjURiaIFxfz7EH0Ci0dTSQpZtSLrqOicXqEd/z2r+z+Klk9GzmnRsgpgbOsQ=="
+ },
+ "define-properties": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
+ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "requires": {
+ "foreach": "2.0.5",
+ "object-keys": "1.0.11"
+ }
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegate": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.0.5"
+ }
+ },
+ "doctrine": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.2.tgz",
+ "integrity": "sha512-y0tm5Pq6ywp3qSTZ1vPgVdAnbDEoeoc5wlOHXoY1c4Wug/a7JvqHIl7BTvwodaHmejWkK/9dSb3sCYfyo/om8A==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom-converter": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz",
+ "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=",
+ "requires": {
+ "utila": "0.3.3"
+ },
+ "dependencies": {
+ "utila": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
+ "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY="
+ }
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "requires": {
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw="
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI="
+ },
+ "domhandler": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz",
+ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=",
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
+ },
+ "duplexify": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz",
+ "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==",
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "stream-shift": "1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "ejs": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz",
+ "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo="
+ },
+ "electron-releases": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/electron-releases/-/electron-releases-2.1.0.tgz",
+ "integrity": "sha512-cyKFD1bTE/UgULXfaueIN1k5EPFzs+FRc/rvCY5tIynefAPqopQEgjr0EzY+U3Dqrk/G4m9tXSPuZ77v6dL/Rw=="
+ },
+ "electron-to-chromium": {
+ "version": "1.3.30",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.30.tgz",
+ "integrity": "sha512-zx1Prv7kYLfc4OA60FhxGbSo4qrEjgSzpo1/37i7l9ltXPYOoQBtjQxY9KmsgfHnBxHlBGXwLlsbt/gub1w5lw==",
+ "requires": {
+ "electron-releases": "2.1.0"
+ }
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0",
+ "hash.js": "1.1.3",
+ "hmac-drbg": "1.0.1",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "encodeurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz",
+ "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA="
+ },
+ "encoding": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "requires": {
+ "iconv-lite": "0.4.19"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
+ "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "memory-fs": "0.4.1",
+ "object-assign": "4.1.1",
+ "tapable": "0.2.8"
+ }
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA="
+ },
+ "errno": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz",
+ "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==",
+ "requires": {
+ "prr": "1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "requires": {
+ "is-arrayish": "0.2.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ }
+ }
+ },
+ "error-stack-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.1.tgz",
+ "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=",
+ "requires": {
+ "stackframe": "1.0.4"
+ }
+ },
+ "es-abstract": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz",
+ "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "1.1.1",
+ "function-bind": "1.1.1",
+ "has": "1.0.1",
+ "is-callable": "1.1.3",
+ "is-regex": "1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+ "dev": true,
+ "requires": {
+ "is-callable": "1.1.3",
+ "is-date-object": "1.0.1",
+ "is-symbol": "1.0.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.37",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz",
+ "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=",
+ "requires": {
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37",
+ "es6-iterator": "2.0.3",
+ "es6-set": "0.1.5",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.2.tgz",
+ "integrity": "sha512-LSas5vsuA6Q4nEdf9wokY5/AJYXry98i0IzXsv49rYsgDGDNDPbqAYR1Pe23iFxygfbGZNR/5VrHXBCh2BhvUQ=="
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "requires": {
+ "es6-map": "0.1.5",
+ "es6-weak-map": "2.0.2",
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint": {
+ "version": "4.13.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.13.1.tgz",
+ "integrity": "sha512-UCJVV50RtLHYzBp1DZ8CMPtRSg4iVZvjgO9IJHIKyWU/AnJVjtdRikoUPLB29n5pzMB7TnsLQWf0V6VUJfoPfw==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.1",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.3.0",
+ "concat-stream": "1.6.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "doctrine": "2.0.2",
+ "eslint-scope": "3.7.1",
+ "espree": "3.5.2",
+ "esquery": "1.0.0",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "functional-red-black-tree": "1.0.1",
+ "glob": "7.1.2",
+ "globals": "11.1.0",
+ "ignore": "3.3.7",
+ "imurmurhash": "0.1.4",
+ "inquirer": "3.0.6",
+ "is-resolvable": "1.0.1",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
+ "require-uncached": "1.0.3",
+ "semver": "5.4.1",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "4.0.2",
+ "text-table": "0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "globals": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz",
+ "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-standard": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz",
+ "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=",
+ "dev": true
+ },
+ "eslint-config-vue": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-vue/-/eslint-config-vue-2.0.2.tgz",
+ "integrity": "sha1-o6sQBImeSTJ6lMY+JNR6OWsvSEg=",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz",
+ "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "resolve": "1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-loader": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.9.0.tgz",
+ "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==",
+ "dev": true,
+ "requires": {
+ "loader-fs-cache": "1.0.1",
+ "loader-utils": "1.1.0",
+ "object-assign": "4.1.1",
+ "object-hash": "1.2.0",
+ "rimraf": "2.6.2"
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz",
+ "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "pkg-dir": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2"
+ }
+ }
+ }
+ },
+ "eslint-plugin-babel": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz",
+ "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=",
+ "dev": true
+ },
+ "eslint-plugin-html": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.1.tgz",
+ "integrity": "sha512-w8mmUJQjtDMUNbw3NOa4+PjOH/r4W5T+RN2nCmYgXv+QHx+NiBodnbPHXmJFJgo7Dr0Yk4G/2LCIRhfKceNmNA==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "3.9.2"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
+ "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.4.1",
+ "domutils": "1.5.1",
+ "entities": "1.1.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz",
+ "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1",
+ "contains-path": "0.1.0",
+ "debug": "2.6.9",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "0.3.1",
+ "eslint-module-utils": "2.1.1",
+ "has": "1.0.1",
+ "lodash.cond": "4.5.2",
+ "minimatch": "3.0.4",
+ "read-pkg-up": "2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-node": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz",
+ "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==",
+ "dev": true,
+ "requires": {
+ "ignore": "3.3.7",
+ "minimatch": "3.0.4",
+ "resolve": "1.5.0",
+ "semver": "5.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz",
+ "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==",
+ "dev": true
+ },
+ "eslint-plugin-react": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz",
+ "integrity": "sha512-YGSjB9Qu6QbVTroUZi66pYky3DfoIPLdHQ/wmrBGyBRnwxQsBXAov9j2rpXt/55i8nyMv6IRWJv2s4d4YnduzQ==",
+ "dev": true,
+ "requires": {
+ "doctrine": "2.0.2",
+ "has": "1.0.1",
+ "jsx-ast-utils": "2.0.1",
+ "prop-types": "15.6.0"
+ }
+ },
+ "eslint-plugin-standard": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz",
+ "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=",
+ "dev": true
+ },
+ "eslint-plugin-vue": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-2.1.0.tgz",
+ "integrity": "sha1-UO0LfpojidkOaJdDo8wmtQJEG2k=",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-html": "3.2.2",
+ "eslint-plugin-react": "7.5.1"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
+ "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "eslint-plugin-html": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-3.2.2.tgz",
+ "integrity": "sha512-sSuafathF6ImPrzF2vUKEJY6Llq06d/riMTMzlsruDRDhNsQMYp2viUKo+jx+JRr1QevskeUpQcuptp2gN1XVQ==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "3.9.2",
+ "semver": "5.4.1"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.4.1",
+ "domutils": "1.5.1",
+ "entities": "1.1.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "espree": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz",
+ "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.2.1",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "requires": {
+ "estraverse": "4.2.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37"
+ }
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.0",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "requires": {
+ "fill-range": "2.2.3"
+ },
+ "dependencies": {
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "express": {
+ "version": "4.16.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz",
+ "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=",
+ "requires": {
+ "accepts": "1.3.4",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.2",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "finalhandler": "1.1.0",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "2.0.2",
+ "qs": "6.5.1",
+ "range-parser": "1.2.0",
+ "safe-buffer": "5.1.1",
+ "send": "0.16.1",
+ "serve-static": "1.13.1",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.3.1",
+ "type-is": "1.6.15",
+ "utils-merge": "1.0.1",
+ "vary": "1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "external-editor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
+ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
+ "requires": {
+ "chardet": "0.4.2",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.3.tgz",
+ "integrity": "sha512-AyptZexgu7qppEPq59DtN/XJGZDrLcVxSHai+4hdgMMS9EpF4GBvygcWWApno8lL9qSjVpYt7Raao28qzJX1ww==",
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.0",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.1"
+ }
+ },
+ "extract-text-webpack-plugin": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz",
+ "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==",
+ "requires": {
+ "async": "2.6.0",
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0",
+ "webpack-sources": "1.1.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastparse": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz",
+ "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg="
+ },
+ "fbjs": {
+ "version": "0.8.16",
+ "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
+ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
+ "dev": true,
+ "requires": {
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.17"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+ "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=",
+ "dev": true
+ }
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "file-loader": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.6.tgz",
+ "integrity": "sha512-873ztuL+/hfvXbLDJ262PGO6XjERnybJu2gW1/5j8HUfxSiFJI9Hj/DhZ50ZGRUxBvuNiazb/cM2rh9pqrxP6Q==",
+ "requires": {
+ "loader-utils": "1.1.0",
+ "schema-utils": "0.3.0"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
+ },
+ "filesize": {
+ "version": "3.5.11",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz",
+ "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g=="
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz",
+ "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "requires": {
+ "commondir": "1.0.1",
+ "make-dir": "1.1.0",
+ "pkg-dir": "2.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ }
+ },
+ "flatten": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
+ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I="
+ },
+ "flush-write-stream": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz",
+ "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.2.5.tgz",
+ "integrity": "sha512-lMhwQTryFbG+wYsAIEKC1Kf5IGDlVNnONRogIBllh7LLoV7pNIxW0z9fhjRar9NBql+hd2Y49KboVVNxf6GEfg==",
+ "requires": {
+ "debug": "2.6.9"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "font-awesome": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
+ "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
+ "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "format-util": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.3.tgz",
+ "integrity": "sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU="
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "friendly-errors-webpack-plugin": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.6.1.tgz",
+ "integrity": "sha1-4yeBxHIvVGoGqbXXp8+ihSA3XXA=",
+ "requires": {
+ "chalk": "1.1.3",
+ "error-stack-parser": "2.0.1",
+ "string-length": "1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "front-matter": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.3.0.tgz",
+ "integrity": "sha1-cgOviWzjV+4E4qpFFp6pHtf2dQQ=",
+ "requires": {
+ "js-yaml": "3.10.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ }
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
+ "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
+ "optional": true,
+ "requires": {
+ "nan": "2.8.0",
+ "node-pre-gyp": "0.6.39"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.2.9"
+ }
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "bundled": true,
+ "optional": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true,
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "bundled": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "bundled": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.7",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true,
+ "optional": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "bundled": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true,
+ "optional": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true,
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.15"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1"
+ }
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aproba": "1.1.1",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "bundled": true
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "bundled": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "bundled": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "bundled": true
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.0",
+ "sshpk": "1.13.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true,
+ "optional": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.3",
+ "verror": "1.3.6"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.27.0",
+ "bundled": true
+ },
+ "mime-types": {
+ "version": "2.1.15",
+ "bundled": true,
+ "requires": {
+ "mime-db": "1.27.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "node-pre-gyp": {
+ "version": "0.6.39",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "1.0.2",
+ "hawk": "3.1.3",
+ "mkdirp": "0.5.1",
+ "nopt": "4.0.1",
+ "npmlog": "4.1.0",
+ "rc": "1.2.1",
+ "request": "2.81.0",
+ "rimraf": "2.6.1",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "tar-pack": "3.4.0"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.0",
+ "osenv": "0.1.4"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "bundled": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.9",
+ "bundled": true,
+ "requires": {
+ "buffer-shims": "1.0.0",
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "1.0.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "request": {
+ "version": "2.81.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "4.2.1",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.15",
+ "oauth-sign": "0.8.2",
+ "performance-now": "0.2.0",
+ "qs": "6.4.0",
+ "safe-buffer": "5.0.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.2",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "bundled": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "bundled": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "sshpk": {
+ "version": "1.13.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jodid25519": "1.0.2",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "bundled": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "tar-pack": {
+ "version": "3.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "2.6.8",
+ "fstream": "1.0.11",
+ "fstream-ignore": "1.0.5",
+ "once": "1.4.0",
+ "readable-stream": "2.2.9",
+ "rimraf": "2.6.1",
+ "tar": "2.2.1",
+ "uid-number": "0.0.6"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "optional": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "gaze": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
+ "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
+ "dev": true,
+ "requires": {
+ "globule": "1.2.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U="
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "globule": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
+ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4"
+ }
+ },
+ "good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
+ "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
+ "optional": true,
+ "requires": {
+ "delegate": "3.2.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "requires": {
+ "duplexer": "0.1.1"
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.1",
+ "har-schema": "2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "requires": {
+ "function-bind": "1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ="
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "hawk": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
+ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
+ "dev": true,
+ "requires": {
+ "boom": "4.3.1",
+ "cryptiles": "3.1.2",
+ "hoek": "4.2.0",
+ "sntp": "2.1.0"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0="
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "hoek": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
+ "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg=="
+ },
+ "html-comment-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz",
+ "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4="
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
+ },
+ "html-minifier": {
+ "version": "3.5.8",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.8.tgz",
+ "integrity": "sha512-WX7D6PB9PFq05fZ1/CyxPUuyqXed6vh2fGOM80+zJT5wAO93D/cUjLs0CcbBFjQmlwmCgRvl97RurtArIpOnkw==",
+ "requires": {
+ "camel-case": "3.0.0",
+ "clean-css": "4.1.9",
+ "commander": "2.12.2",
+ "he": "1.1.1",
+ "ncname": "1.0.0",
+ "param-case": "2.1.1",
+ "relateurl": "0.2.7",
+ "uglify-js": "3.3.5"
+ }
+ },
+ "html-tags": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
+ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos="
+ },
+ "html-webpack-plugin": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz",
+ "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=",
+ "requires": {
+ "bluebird": "3.5.1",
+ "html-minifier": "3.5.8",
+ "loader-utils": "0.2.17",
+ "lodash": "4.17.4",
+ "pretty-error": "2.1.1",
+ "toposort": "1.0.6"
+ },
+ "dependencies": {
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
+ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.1.0",
+ "domutils": "1.1.6",
+ "readable-stream": "1.0.34"
+ },
+ "dependencies": {
+ "domutils": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz",
+ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=",
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
+ }
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.3.1"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
+ },
+ "icss-replace-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0="
+ },
+ "icss-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
+ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
+ "requires": {
+ "postcss": "6.0.16"
+ }
+ },
+ "ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q="
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "in-publish": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+ "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "inquirer": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz",
+ "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=",
+ "requires": {
+ "ansi-escapes": "1.4.0",
+ "chalk": "1.1.3",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx": "4.1.0",
+ "string-width": "2.1.1",
+ "strip-ansi": "3.0.1",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ="
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
+ "ipaddr.js": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz",
+ "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A="
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY="
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.1.tgz",
+ "integrity": "sha1-wt/DhquqDD4zxI2z/ocFnmkGXv0="
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "1.11.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz",
+ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE="
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-odd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz",
+ "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=",
+ "requires": {
+ "is-number": "3.0.0"
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.1"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz",
+ "integrity": "sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "requires": {
+ "html-comment-regex": "1.1.1"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
+ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isnumeric": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/isnumeric/-/isnumeric-0.2.0.tgz",
+ "integrity": "sha1-ojR7o2DeGeM9D/1ZD933dVy/LmQ="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "isomorphic-fetch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+ "dev": true,
+ "requires": {
+ "node-fetch": "1.6.3",
+ "whatwg-fetch": "2.0.3"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.0.tgz",
+ "integrity": "sha512-Wehd+7Pf9tFvGb+ydPm9TjYjV8X1YHOVyG8QyELZxEMqOhemVwGRmoG8iQ/soqI3n8v4xn59zaLxiCJiaaRzKA=="
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "2.7.3"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ },
+ "json-loader": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
+ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w=="
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-loader": {
+ "version": "git://github.com/joshheyse/json-schema-loader.git#649e1d49a3128f72721641cefc14a286bca54227",
+ "requires": {
+ "json-schema-ref-parser": "3.3.1",
+ "loader-utils": "1.1.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "json-schema-ref-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-3.3.1.tgz",
+ "integrity": "sha512-stQTMhec2R/p2L9dH4XXRlpNCP0mY8QrLd/9Kl+8SHJQmwHtE1nDfXH4wbsSM+GkJMl8t92yZbI0OIol432CIQ==",
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "debug": "3.1.0",
+ "es6-promise": "4.2.2",
+ "js-yaml": "3.11.0",
+ "ono": "4.0.5",
+ "z-schema": "3.20.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
+ },
+ "js-yaml": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
+ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ }
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
+ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
+ "dev": true,
+ "requires": {
+ "array-includes": "3.0.3"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "launch-editor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.0.0.tgz",
+ "integrity": "sha512-xMKZAWUscctypaGelDzA5IUUa3DEWHIqMal4+GidvQN5NSssBmanD2QY5qBl38XAE2vUIwTUYai+JAd520OvMw==",
+ "requires": {
+ "chalk": "2.3.0",
+ "shell-quote": "1.6.1"
+ }
+ },
+ "launch-editor-middleware": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.1.0.tgz",
+ "integrity": "sha512-9Upf3HIqeD1SA1BxHY4DuY+tSJI5R0UZvWo9bbux/MyhorphNuqTi87Dj9aGDyMCyVt57ejQe0+ZjeyQgRodeA==",
+ "requires": {
+ "launch-editor": "2.0.0"
+ }
+ },
+ "lazy-cache": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
+ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=",
+ "requires": {
+ "set-getter": "0.1.0"
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "linkify-it": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz",
+ "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=",
+ "requires": {
+ "uc.micro": "1.0.3"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "loader-fs-cache": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz",
+ "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "0.1.1",
+ "mkdirp": "0.5.1"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+ "dev": true,
+ "requires": {
+ "commondir": "1.0.1",
+ "mkdirp": "0.5.1",
+ "pkg-dir": "1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2"
+ }
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz",
+ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI="
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
+ },
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.cond": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
+ "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
+ "dev": true
+ },
+ "lodash.endswith": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/lodash.endswith/-/lodash.endswith-4.2.1.tgz",
+ "integrity": "sha1-/tWawXOO0+I27dcGTsRWRIs3vAk="
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
+ },
+ "lodash.isfunction": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz",
+ "integrity": "sha1-TbcJ/IG8So/XEnpFilNGxc3OLGs="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
+ },
+ "lodash.mergewith": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz",
+ "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=",
+ "dev": true
+ },
+ "lodash.startswith": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz",
+ "integrity": "sha1-xZjErc4YiiflMUVzHNxsDnF3YAw="
+ },
+ "lodash.tail": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
+ "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.templatesettings": "4.1.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "requires": {
+ "lodash._reinterpolate": "3.0.0"
+ }
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+ },
+ "log-symbols": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz",
+ "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==",
+ "requires": {
+ "chalk": "2.3.0"
+ }
+ },
+ "loglevelnext": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.3.tgz",
+ "integrity": "sha512-OCxd/b78TijTB4b6zVqLbMrxhebyvdZKwqpL0VHUZ0pYhavXaPD4l6Xrr4n5xqTYWiqtb0i7ikSoJY/myQ/Org=="
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "requires": {
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "macaddress": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz",
+ "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI="
+ },
+ "make-dir": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
+ "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
+ "requires": {
+ "pify": "3.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "markdown-it": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz",
+ "integrity": "sha512-tNuOCCfunY5v5uhcO2AUMArvKAyKMygX8tfup/JrgnsDqcCATQsAExBq7o5Ml9iMmO82bk6jYNLj6khcrl0JGA==",
+ "requires": {
+ "argparse": "1.0.9",
+ "entities": "1.1.1",
+ "linkify-it": "2.0.3",
+ "mdurl": "1.0.1",
+ "uc.micro": "1.0.3"
+ }
+ },
+ "markdown-it-decorate": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/markdown-it-decorate/-/markdown-it-decorate-1.2.2.tgz",
+ "integrity": "sha1-8eEdEdg3rniQYZj4osl08OZGrLc="
+ },
+ "math-expression-evaluator": {
+ "version": "1.2.17",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
+ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw="
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "0.1.6",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "2.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.4.0",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ }
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz",
+ "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==",
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.0",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "extglob": "2.0.3",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.7",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.0",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ }
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE="
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg="
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "mississippi": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz",
+ "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=",
+ "requires": {
+ "concat-stream": "1.6.0",
+ "duplexify": "3.5.1",
+ "end-of-stream": "1.4.0",
+ "flush-write-stream": "1.0.2",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "1.0.3",
+ "pumpify": "1.3.5",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz",
+ "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==",
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "mixin-object": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
+ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
+ "dev": true,
+ "requires": {
+ "for-in": "0.1.8",
+ "is-extendable": "0.1.1"
+ },
+ "dependencies": {
+ "for-in": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
+ "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
+ "dev": true
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ }
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "requires": {
+ "aproba": "1.2.0",
+ "copy-concurrently": "1.0.5",
+ "fs-write-stream-atomic": "1.0.10",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.2",
+ "run-queue": "1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "mustache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.0.tgz",
+ "integrity": "sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ },
+ "nan": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz",
+ "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo="
+ },
+ "nanomatch": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz",
+ "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==",
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "is-odd": "1.0.0",
+ "kind-of": "5.1.0",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.0",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "ncname": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
+ "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+ "requires": {
+ "xml-char-classes": "1.0.0"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "requires": {
+ "lower-case": "1.1.4"
+ }
+ },
+ "node-fetch": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz",
+ "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=",
+ "requires": {
+ "encoding": "0.1.12",
+ "is-stream": "1.1.0"
+ }
+ },
+ "node-gyp": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
+ "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
+ "dev": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.2",
+ "osenv": "0.1.4",
+ "request": "2.83.0",
+ "rimraf": "2.6.2",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
+ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+ "requires": {
+ "assert": "1.4.1",
+ "browserify-zlib": "0.2.0",
+ "buffer": "4.9.1",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.12.0",
+ "domain-browser": "1.1.7",
+ "events": "1.1.1",
+ "https-browserify": "1.0.0",
+ "os-browserify": "0.3.0",
+ "path-browserify": "0.0.0",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "readable-stream": "2.3.3",
+ "stream-browserify": "2.0.1",
+ "stream-http": "2.7.2",
+ "string_decoder": "1.0.3",
+ "timers-browserify": "2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4"
+ }
+ },
+ "node-sass": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.6.1.tgz",
+ "integrity": "sha512-0zQQ7tjEK5W8RfW9LiQrkzfo7uLZ0QtZGV69rdKn5cFzdweHLJ14lR6xLPvI6UimkXMO8m0qDsXwUCNdnqV3sA==",
+ "dev": true,
+ "requires": {
+ "async-foreach": "0.1.3",
+ "chalk": "1.1.3",
+ "cross-spawn": "3.0.1",
+ "gaze": "1.1.2",
+ "get-stdin": "4.0.1",
+ "glob": "7.1.2",
+ "in-publish": "2.0.0",
+ "lodash.assign": "4.2.0",
+ "lodash.clonedeep": "4.5.0",
+ "lodash.mergewith": "4.6.0",
+ "meow": "3.7.0",
+ "mkdirp": "0.5.1",
+ "nan": "2.8.0",
+ "node-gyp": "3.6.2",
+ "npmlog": "4.1.2",
+ "request": "2.83.0",
+ "sass-graph": "2.2.4",
+ "stdout-stream": "1.4.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "which": "1.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.4.1",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "prepend-http": "1.0.4",
+ "query-string": "4.3.4",
+ "sort-keys": "1.1.2"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "requires": {
+ "boolbase": "1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "nuxt": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-1.0.0.tgz",
+ "integrity": "sha512-OBt0K8aFhQgd2jUOEGkbuXPzz66aI/Sn/r4C7Zrsoi8Eqqo8Ed2p/v9ghn89DcjBkTkaEhGNh0+ewhpGzC78FA==",
+ "requires": {
+ "@nuxtjs/youch": "4.2.3",
+ "ansi-html": "0.0.7",
+ "autoprefixer": "7.2.4",
+ "babel-core": "6.26.0",
+ "babel-loader": "7.1.2",
+ "babel-preset-vue-app": "2.0.0",
+ "caniuse-lite": "1.0.30000789",
+ "chalk": "2.3.0",
+ "chokidar": "2.0.0",
+ "clone": "2.1.1",
+ "compression": "1.7.1",
+ "connect": "3.6.5",
+ "css-hot-loader": "1.3.5",
+ "css-loader": "0.28.8",
+ "debug": "3.1.0",
+ "es6-promise": "4.2.2",
+ "etag": "1.8.1",
+ "extract-text-webpack-plugin": "3.0.2",
+ "file-loader": "1.1.6",
+ "fresh": "0.5.2",
+ "friendly-errors-webpack-plugin": "1.6.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "hash-sum": "1.0.2",
+ "html-minifier": "3.5.8",
+ "html-webpack-plugin": "2.30.1",
+ "launch-editor": "2.0.0",
+ "launch-editor-middleware": "2.1.0",
+ "lodash": "4.17.4",
+ "lru-cache": "4.1.1",
+ "memory-fs": "0.4.1",
+ "minimist": "1.2.0",
+ "opencollective": "1.0.3",
+ "postcss": "6.0.16",
+ "postcss-cssnext": "3.0.2",
+ "postcss-import": "11.0.0",
+ "postcss-loader": "2.0.10",
+ "postcss-url": "7.3.0",
+ "pretty-error": "2.1.1",
+ "progress-bar-webpack-plugin": "1.10.0",
+ "serialize-javascript": "1.4.0",
+ "serve-static": "1.13.1",
+ "server-destroy": "1.0.1",
+ "source-map": "0.6.1",
+ "style-resources-loader": "1.0.0",
+ "uglifyjs-webpack-plugin": "1.1.6",
+ "upath": "1.0.2",
+ "url-loader": "0.6.2",
+ "vue": "2.5.13",
+ "vue-loader": "13.7.0",
+ "vue-meta": "1.4.2",
+ "vue-router": "3.0.1",
+ "vue-server-renderer": "2.5.13",
+ "vue-template-compiler": "2.5.13",
+ "vuex": "3.0.1",
+ "webpack": "3.10.0",
+ "webpack-bundle-analyzer": "2.9.2",
+ "webpack-dev-middleware": "2.0.4",
+ "webpack-hot-middleware": "2.21.0",
+ "webpack-node-externals": "1.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "css-loader": {
+ "version": "0.28.8",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.8.tgz",
+ "integrity": "sha512-4jGj7Ag6WUZ5lQyE4te9sJLn0lgkz6HI3WDE4aw98AkW1IAKXPP4blTpPeorlLDpNsYvojo0SYgRJOdz2KbuAw==",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "css-selector-tokenizer": "0.7.0",
+ "cssnano": "3.10.0",
+ "icss-utils": "2.1.0",
+ "loader-utils": "1.1.0",
+ "lodash.camelcase": "4.3.0",
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-modules-extract-imports": "1.1.0",
+ "postcss-modules-local-by-default": "1.2.0",
+ "postcss-modules-scope": "1.1.0",
+ "postcss-modules-values": "1.3.0",
+ "postcss-value-parser": "3.3.0",
+ "source-list-map": "2.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ }
+ }
+ },
+ "object-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz",
+ "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
+ "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "requires": {
+ "define-properties": "1.1.2",
+ "function-bind": "1.1.1",
+ "has-symbols": "1.0.0",
+ "object-keys": "1.0.11"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onecolor": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.0.5.tgz",
+ "integrity": "sha1-Nu/zIgE3nv3xGA+0ReUajiQl+fY="
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "ono": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/ono/-/ono-4.0.5.tgz",
+ "integrity": "sha512-ZVNuV9kJbr/2tWs83I2snrYo+WIS0DISF/xUfX9p9b6GyDD6F5N9PzHjW+p/dep6IGwSYylf1HCub5I/nM0R5Q==",
+ "requires": {
+ "format-util": "1.0.3"
+ }
+ },
+ "opencollective": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz",
+ "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=",
+ "requires": {
+ "babel-polyfill": "6.23.0",
+ "chalk": "1.1.3",
+ "inquirer": "3.0.6",
+ "minimist": "1.2.0",
+ "node-fetch": "1.6.3",
+ "opn": "4.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "opener": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz",
+ "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg="
+ },
+ "opn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
+ "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+ "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw="
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "requires": {
+ "p-limit": "1.1.0"
+ }
+ },
+ "pako": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "requires": {
+ "no-case": "2.3.2"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "requires": {
+ "asn1.js": "4.9.2",
+ "browserify-aes": "1.1.1",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.14"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "requires": {
+ "pify": "2.3.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
+ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "requires": {
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pixrem": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-4.0.1.tgz",
+ "integrity": "sha1-LaSh3m7EQjxfw3lOkwuB1EkOxoY=",
+ "requires": {
+ "browserslist": "2.11.0",
+ "postcss": "6.0.16",
+ "reduce-css-calc": "1.3.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "requires": {
+ "find-up": "2.1.0"
+ }
+ },
+ "pleeease-filters": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/pleeease-filters/-/pleeease-filters-4.0.0.tgz",
+ "integrity": "sha1-ZjKy+wVkjSdY2GU4T7zteeHMrsc=",
+ "requires": {
+ "onecolor": "3.0.5",
+ "postcss": "6.0.16"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "postcss": {
+ "version": "6.0.16",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz",
+ "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==",
+ "requires": {
+ "chalk": "2.3.0",
+ "source-map": "0.6.1",
+ "supports-color": "5.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz",
+ "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "postcss-apply": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/postcss-apply/-/postcss-apply-0.8.0.tgz",
+ "integrity": "sha1-FOVEu7XLbxweBIhXll15rgZrE0M=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "balanced-match": "0.4.2",
+ "postcss": "6.0.16"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "postcss-attribute-case-insensitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-2.0.0.tgz",
+ "integrity": "sha1-lNxCLI+QmX8WvTOjZUu77AhJY7Q=",
+ "requires": {
+ "postcss": "6.0.16",
+ "postcss-selector-parser": "2.2.3"
+ }
+ },
+ "postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-message-helpers": "2.0.0",
+ "reduce-css-calc": "1.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-color-function": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-4.0.1.tgz",
+ "integrity": "sha1-QCs/LOvD9pR+YY+2vjZU++zvZEQ=",
+ "requires": {
+ "css-color-function": "1.3.3",
+ "postcss": "6.0.16",
+ "postcss-message-helpers": "2.0.0",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-color-gray": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-4.1.0.tgz",
+ "integrity": "sha512-L4iLKQLdqChz6ZOgGb6dRxkBNw78JFYcJmBz1orHpZoeLtuhDDGegRtX9gSyfoCIM7rWZ3VNOyiqqvk83BEN+w==",
+ "requires": {
+ "color": "2.0.1",
+ "postcss": "6.0.16",
+ "postcss-message-helpers": "2.0.0",
+ "reduce-function-call": "1.0.2"
+ },
+ "dependencies": {
+ "color": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz",
+ "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==",
+ "requires": {
+ "color-convert": "1.9.1",
+ "color-string": "1.5.2"
+ }
+ },
+ "color-string": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz",
+ "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=",
+ "requires": {
+ "color-name": "1.1.3",
+ "simple-swizzle": "0.2.2"
+ }
+ }
+ }
+ },
+ "postcss-color-hex-alpha": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-3.0.0.tgz",
+ "integrity": "sha1-HlPmyKyyN5Vej9CLfs2xuLgwn5U=",
+ "requires": {
+ "color": "1.0.3",
+ "postcss": "6.0.16",
+ "postcss-message-helpers": "2.0.0"
+ },
+ "dependencies": {
+ "color": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz",
+ "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=",
+ "requires": {
+ "color-convert": "1.9.1",
+ "color-string": "1.5.2"
+ }
+ },
+ "color-string": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz",
+ "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=",
+ "requires": {
+ "color-name": "1.1.3",
+ "simple-swizzle": "0.2.2"
+ }
+ }
+ }
+ },
+ "postcss-color-hsl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-hsl/-/postcss-color-hsl-2.0.0.tgz",
+ "integrity": "sha1-EnA2ZvoxBDDj8wpFTawThjF9WEQ=",
+ "requires": {
+ "postcss": "6.0.16",
+ "postcss-value-parser": "3.3.0",
+ "units-css": "0.4.0"
+ }
+ },
+ "postcss-color-hwb": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-hwb/-/postcss-color-hwb-3.0.0.tgz",
+ "integrity": "sha1-NAKxnvTYSXVAwftQcr6YY8qVVx4=",
+ "requires": {
+ "color": "1.0.3",
+ "postcss": "6.0.16",
+ "postcss-message-helpers": "2.0.0",
+ "reduce-function-call": "1.0.2"
+ },
+ "dependencies": {
+ "color": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz",
+ "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=",
+ "requires": {
+ "color-convert": "1.9.1",
+ "color-string": "1.5.2"
+ }
+ },
+ "color-string": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz",
+ "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=",
+ "requires": {
+ "color-name": "1.1.3",
+ "simple-swizzle": "0.2.2"
+ }
+ }
+ }
+ },
+ "postcss-color-rebeccapurple": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-3.0.0.tgz",
+ "integrity": "sha1-7rrwPTY7QwC5Z5K9MIHBntZlE9M=",
+ "requires": {
+ "postcss": "6.0.16",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-color-rgb": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-rgb/-/postcss-color-rgb-2.0.0.tgz",
+ "integrity": "sha1-FFOcinExSUtILg3RzCZf9lFLUmM=",
+ "requires": {
+ "postcss": "6.0.16",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-color-rgba-fallback": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz",
+ "integrity": "sha1-N9XJNToHoJJwkSqCYGu0Kg1wLAQ=",
+ "requires": {
+ "postcss": "6.0.16",
+ "postcss-value-parser": "3.3.0",
+ "rgb-hex": "2.1.0"
+ }
+ },
+ "postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "requires": {
+ "colormin": "1.1.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-cssnext": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-cssnext/-/postcss-cssnext-3.0.2.tgz",
+ "integrity": "sha512-jA6kGdcUMZqLUgw6MdpyNWGFhk0LIITVhC/jTnLRZLoXSTR88qT2cFOn3LbY06udt1PVdTCHDG3plBjxVKf8BQ==",
+ "requires": {
+ "autoprefixer": "7.2.4",
+ "caniuse-api": "2.0.0",
+ "chalk": "2.3.0",
+ "pixrem": "4.0.1",
+ "pleeease-filters": "4.0.0",
+ "postcss": "6.0.16",
+ "postcss-apply": "0.8.0",
+ "postcss-attribute-case-insensitive": "2.0.0",
+ "postcss-calc": "6.0.1",
+ "postcss-color-function": "4.0.1",
+ "postcss-color-gray": "4.1.0",
+ "postcss-color-hex-alpha": "3.0.0",
+ "postcss-color-hsl": "2.0.0",
+ "postcss-color-hwb": "3.0.0",
+ "postcss-color-rebeccapurple": "3.0.0",
+ "postcss-color-rgb": "2.0.0",
+ "postcss-color-rgba-fallback": "3.0.0",
+ "postcss-custom-media": "6.0.0",
+ "postcss-custom-properties": "6.2.0",
+ "postcss-custom-selectors": "4.0.1",
+ "postcss-font-family-system-ui": "2.1.2",
+ "postcss-font-variant": "3.0.0",
+ "postcss-image-set-polyfill": "0.3.5",
+ "postcss-initial": "2.0.0",
+ "postcss-media-minmax": "3.0.0",
+ "postcss-nesting": "4.2.1",
+ "postcss-pseudo-class-any-link": "4.0.0",
+ "postcss-pseudoelements": "5.0.0",
+ "postcss-replace-overflow-wrap": "2.0.0",
+ "postcss-selector-matches": "3.0.1",
+ "postcss-selector-not": "3.0.1"
+ },
+ "dependencies": {
+ "caniuse-api": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-2.0.0.tgz",
+ "integrity": "sha1-sd21pZZrFvSNxJmERNS7xsfZ2DQ=",
+ "requires": {
+ "browserslist": "2.11.0",
+ "caniuse-lite": "1.0.30000789",
+ "lodash.memoize": "4.1.2",
+ "lodash.uniq": "4.5.0"
+ }
+ },
+ "postcss-calc": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.1.tgz",
+ "integrity": "sha1-PSQXG79udinUIqQ26/5t2VEfQzA=",
+ "requires": {
+ "css-unit-converter": "1.1.1",
+ "postcss": "6.0.16",
+ "postcss-selector-parser": "2.2.3",
+ "reduce-css-calc": "2.1.3"
+ }
+ },
+ "reduce-css-calc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.3.tgz",
+ "integrity": "sha1-Y8TGMl/7v06mwj8dTetHw5U/O4E=",
+ "requires": {
+ "css-unit-converter": "1.1.1",
+ "postcss-value-parser": "3.3.0"
+ }
+ }
+ }
+ },
+ "postcss-custom-media": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-6.0.0.tgz",
+ "integrity": "sha1-vlMnhBEOyylQRPtTlaGABushpzc=",
+ "requires": {
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-custom-properties": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-6.2.0.tgz",
+ "integrity": "sha512-eNR2h9T9ciKMoQEORrPjH33XeN/nuvVuxArOKmHtsFbGbNss631tgTrKou3/pmjAZbA4QQkhLIkPQkIk3WW+8w==",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-custom-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-4.0.1.tgz",
+ "integrity": "sha1-eBOC+UxS5yfvXKR3bqKt9JphE4I=",
+ "requires": {
+ "postcss": "6.0.16",
+ "postcss-selector-matches": "3.0.1"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-filter-plugins": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz",
+ "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=",
+ "requires": {
+ "postcss": "5.2.18",
+ "uniqid": "4.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-font-family-system-ui": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-font-family-system-ui/-/postcss-font-family-system-ui-2.1.2.tgz",
+ "integrity": "sha512-k9PNkX0sBbGevSdCPYuijNdgs1nxStR/X3a0EU7PO61ab6g4WMVZETnuoEjVVDPQR6ZL/IUSNxNxkMkh3dYpag==",
+ "requires": {
+ "@std/esm": "0.19.1",
+ "postcss": "6.0.16",
+ "postcss-value-parser": "3.3.0"
+ }
+ },
+ "postcss-font-variant": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz",
+ "integrity": "sha1-CMzIj2BQuoLtjvLMdsDGprQfGD4=",
+ "requires": {
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-image-set-polyfill": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/postcss-image-set-polyfill/-/postcss-image-set-polyfill-0.3.5.tgz",
+ "integrity": "sha1-Dxk0E3AM8fgr05Bm7wFtZaShgYE=",
+ "requires": {
+ "postcss": "6.0.16",
+ "postcss-media-query-parser": "0.2.3"
+ }
+ },
+ "postcss-import": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.0.0.tgz",
+ "integrity": "sha1-qWLi34LTvFptpqOGhBdHIE9B71s=",
+ "requires": {
+ "postcss": "6.0.16",
+ "postcss-value-parser": "3.3.0",
+ "read-cache": "1.0.0",
+ "resolve": "1.5.0"
+ }
+ },
+ "postcss-initial": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-2.0.0.tgz",
+ "integrity": "sha1-cnFfczbgu3k1HZnuZcSiU6hEG6Q=",
+ "requires": {
+ "lodash.template": "4.4.0",
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-load-config": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz",
+ "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=",
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1",
+ "postcss-load-options": "1.2.0",
+ "postcss-load-plugins": "2.3.0"
+ }
+ },
+ "postcss-load-options": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz",
+ "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=",
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1"
+ }
+ },
+ "postcss-load-plugins": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz",
+ "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=",
+ "requires": {
+ "cosmiconfig": "2.2.2",
+ "object-assign": "4.1.1"
+ }
+ },
+ "postcss-loader": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.10.tgz",
+ "integrity": "sha512-xQaDcEgJ/2JqFY18zpFkik8vyYs7oS5ZRbrjvDqkP97k2wYWfPT4+qA0m4o3pTSCsz0u26PNqs8ZO9FRUWAqrA==",
+ "requires": {
+ "loader-utils": "1.1.0",
+ "postcss": "6.0.16",
+ "postcss-load-config": "1.2.0",
+ "schema-utils": "0.3.0"
+ }
+ },
+ "postcss-media-minmax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz",
+ "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=",
+ "requires": {
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-media-query-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+ "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ="
+ },
+ "postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-api": "1.6.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3",
+ "vendors": "1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "1.0.30000789",
+ "electron-to-chromium": "1.3.30"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4="
+ },
+ "postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "uniqs": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-selector-parser": "2.2.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz",
+ "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
+ "requires": {
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
+ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
+ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+ "requires": {
+ "css-selector-tokenizer": "0.7.0",
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-modules-values": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
+ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+ "requires": {
+ "icss-replace-symbols": "1.1.0",
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-nesting": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-4.2.1.tgz",
+ "integrity": "sha512-IkyWXICwagCnlaviRexi7qOdwPw3+xVVjgFfGsxmztvRVaNxAlrypOIKqDE5mxY+BVxnId1rnUKBRQoNE2VDaA==",
+ "requires": {
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "requires": {
+ "is-absolute-url": "2.1.0",
+ "normalize-url": "1.9.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-pseudo-class-any-link": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz",
+ "integrity": "sha1-kVKgYT00UHIFE+iJKFS65C0O5o4=",
+ "requires": {
+ "postcss": "6.0.16",
+ "postcss-selector-parser": "2.2.3"
+ }
+ },
+ "postcss-pseudoelements": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz",
+ "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=",
+ "requires": {
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "requires": {
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "requires": {
+ "postcss": "5.2.18"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-replace-overflow-wrap": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz",
+ "integrity": "sha1-eU22+qVPjbEAhUOSqTr0V2i04ls=",
+ "requires": {
+ "postcss": "6.0.16"
+ }
+ },
+ "postcss-selector-matches": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-3.0.1.tgz",
+ "integrity": "sha1-5WNAEeE5UIgYYbvdWMLQER/8lqs=",
+ "requires": {
+ "balanced-match": "0.4.2",
+ "postcss": "6.0.16"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "postcss-selector-not": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-3.0.1.tgz",
+ "integrity": "sha1-Lk2y8JZTNsAefOx9tsYN/3ZzNdk=",
+ "requires": {
+ "balanced-match": "0.4.2",
+ "postcss": "6.0.16"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "requires": {
+ "flatten": "1.0.2",
+ "indexes-of": "1.0.1",
+ "uniq": "1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "requires": {
+ "is-svg": "2.1.0",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0",
+ "svgo": "0.7.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "requires": {
+ "alphanum-sort": "1.0.2",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-url": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.0.tgz",
+ "integrity": "sha512-VBP6uf6iL3AZra23nkPkOEkS/5azj1xf/toRrjfkolfFEgg9Gyzg9UhJZeIsz12EGKZTNVeGbPa2XtaZm/iZvg==",
+ "requires": {
+ "mime": "1.6.0",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "postcss": "6.0.16",
+ "xxhashjs": "0.2.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
+ "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU="
+ },
+ "postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "requires": {
+ "has": "1.0.1",
+ "postcss": "5.2.18",
+ "uniqs": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "1.1.3",
+ "js-base64": "2.4.0",
+ "source-map": "0.5.7",
+ "supports-color": "3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+ },
+ "prettier": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.10.1.tgz",
+ "integrity": "sha512-lPTx4BsvN5v9w/JXBRNlvTXCJBKrr7VW4NOl1rdX00x+YuOLqNYAOGk2x7v+4PI4hx/SyW1Z3AEg9MeB87yYcQ=="
+ },
+ "pretty-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+ "requires": {
+ "renderkid": "2.0.1",
+ "utila": "0.4.0"
+ }
+ },
+ "prismjs": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.9.0.tgz",
+ "integrity": "sha1-+j4tntw8OIfB8fMJXUHx+bQgDw8=",
+ "requires": {
+ "clipboard": "1.7.1"
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "progress": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74="
+ },
+ "progress-bar-webpack-plugin": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/progress-bar-webpack-plugin/-/progress-bar-webpack-plugin-1.10.0.tgz",
+ "integrity": "sha1-4LEGOqA8eeKYqTQFmFkLth7++aQ=",
+ "requires": {
+ "chalk": "1.1.3",
+ "object.assign": "4.1.0",
+ "progress": "1.1.8"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "dev": true,
+ "requires": {
+ "asap": "2.0.6"
+ }
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+ },
+ "prop-types": {
+ "version": "15.6.0",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz",
+ "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=",
+ "dev": true,
+ "requires": {
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz",
+ "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=",
+ "requires": {
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.5.2"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "public-encrypt": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
+ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "parse-asn1": "5.1.0",
+ "randombytes": "2.0.5"
+ }
+ },
+ "pump": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
+ "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz",
+ "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=",
+ "requires": {
+ "duplexify": "3.5.1",
+ "inherits": "2.0.3",
+ "pump": "1.0.3"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "strict-uri-encode": "1.1.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
+ "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
+ "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
+ "requires": {
+ "randombytes": "2.0.5",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+ "requires": {
+ "pify": "2.3.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.3",
+ "set-immediate-shim": "1.0.1"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
+ }
+ },
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "requires": {
+ "balanced-match": "0.4.2",
+ "math-expression-evaluator": "1.2.17",
+ "reduce-function-call": "1.0.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
+ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "requires": {
+ "balanced-match": "0.4.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg=="
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz",
+ "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=",
+ "requires": {
+ "extend-shallow": "2.0.1"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "requires": {
+ "jsesc": "0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
+ "renderkid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz",
+ "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=",
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-converter": "0.1.4",
+ "htmlparser2": "3.3.0",
+ "strip-ansi": "3.0.1",
+ "utila": "0.3.3"
+ },
+ "dependencies": {
+ "utila": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz",
+ "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY="
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "request": {
+ "version": "2.83.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
+ "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.7.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.1",
+ "har-validator": "5.0.3",
+ "hawk": "6.0.2",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "performance-now": "2.1.0",
+ "qs": "6.5.1",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.1.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-from-string": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
+ "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "rgb": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/rgb/-/rgb-0.1.0.tgz",
+ "integrity": "sha1-vieykej+/+rBvZlylyG/pA/AN7U="
+ },
+ "rgb-hex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-2.1.0.tgz",
+ "integrity": "sha1-x3PF/iJoolV42SU5qCp6XOU77aY="
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "requires": {
+ "aproba": "1.2.0"
+ }
+ },
+ "rx": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+ "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "sass-graph": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "scss-tokenizer": "0.2.3",
+ "yargs": "7.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ }
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "1.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "1.4.0",
+ "read-pkg-up": "1.0.1",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "1.0.2",
+ "which-module": "1.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "5.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "dev": true,
+ "requires": {
+ "camelcase": "3.0.0"
+ }
+ }
+ }
+ },
+ "sass-loader": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz",
+ "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==",
+ "dev": true,
+ "requires": {
+ "async": "2.6.0",
+ "clone-deep": "0.3.0",
+ "loader-utils": "1.1.0",
+ "lodash.tail": "4.1.1",
+ "pify": "3.0.0"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "schema-utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+ "requires": {
+ "ajv": "5.5.1"
+ }
+ },
+ "scss-tokenizer": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "dev": true,
+ "requires": {
+ "js-base64": "2.4.0",
+ "source-map": "0.4.4"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "select": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
+ "optional": true
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
+ },
+ "send": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz",
+ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.1",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz",
+ "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU="
+ },
+ "serve-static": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz",
+ "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==",
+ "requires": {
+ "encodeurl": "1.0.1",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.16.1"
+ }
+ },
+ "server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0="
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-getter": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz",
+ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=",
+ "requires": {
+ "to-object-path": "0.3.0"
+ }
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
+ },
+ "sha.js": {
+ "version": "2.4.9",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz",
+ "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "shallow-clone": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz",
+ "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1",
+ "kind-of": "2.0.1",
+ "lazy-cache": "0.2.7",
+ "mixin-object": "2.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
+ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "lazy-cache": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
+ "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=",
+ "dev": true
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "shell-quote": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "requires": {
+ "array-filter": "0.0.1",
+ "array-map": "0.0.0",
+ "array-reduce": "0.0.0",
+ "jsonify": "0.0.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "requires": {
+ "is-arrayish": "0.3.1"
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz",
+ "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=",
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "2.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "sntp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
+ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
+ "dev": true,
+ "requires": {
+ "hoek": "4.2.0"
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "requires": {
+ "is-plain-obj": "1.1.0"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
+ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A=="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "requires": {
+ "atob": "2.0.3",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "requires": {
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw="
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc="
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "ssri": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.0.0.tgz",
+ "integrity": "sha512-728D4yoQcQm1ooZvSbywLkV1RjfITZXh0oWrhM/lnsx3nAHx7LsRGJWB/YyvoceAYRq98xqbstiN4JBv1/wNHg==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+ },
+ "stackframe": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz",
+ "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw=="
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4="
+ },
+ "stdout-stream": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
+ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz",
+ "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==",
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "stream-shift": "1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
+ "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==",
+ "requires": {
+ "builtin-status-codes": "3.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "to-arraybuffer": "1.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+ },
+ "string-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
+ "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=",
+ "requires": {
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "style-resources-loader": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/style-resources-loader/-/style-resources-loader-1.0.0.tgz",
+ "integrity": "sha512-gxfFT9d3ssfWC4aGahdANLuLkk9muCs+7zjq3Uryj+aFSd9J1Q9NxOVTMBO7xq9l6QCz30SSoUisl8rRvEOlPg==",
+ "requires": {
+ "glob": "7.1.2",
+ "loader-utils": "1.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q="
+ },
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "requires": {
+ "coa": "1.0.4",
+ "colors": "1.1.2",
+ "csso": "2.3.2",
+ "js-yaml": "3.7.0",
+ "mkdirp": "0.5.1",
+ "sax": "1.2.4",
+ "whet.extend": "0.9.9"
+ }
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.1",
+ "ajv-keywords": "2.1.1",
+ "chalk": "2.3.0",
+ "lodash": "4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "2.1.1"
+ }
+ },
+ "tapable": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
+ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI="
+ },
+ "tar": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "timers-browserify": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz",
+ "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==",
+ "requires": {
+ "setimmediate": "1.0.5"
+ }
+ },
+ "tiny-cookie": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/tiny-cookie/-/tiny-cookie-2.1.2.tgz",
+ "integrity": "sha512-UMiHwxCgqJXFPmak9SCHQROpFZnSGAssUUmaOA6xrbWY5f/b5OsKDEg28+8EZd9RJMTuMkMJpuDWneF7JdxWrg=="
+ },
+ "tiny-emitter": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
+ "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==",
+ "optional": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz",
+ "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=",
+ "requires": {
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "regex-not": "1.0.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "toposort": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz",
+ "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw="
+ },
+ "tough-cookie": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
+ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "type-is": {
+ "version": "1.6.15",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.17"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "ua-parser-js": {
+ "version": "0.7.17",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
+ "dev": true
+ },
+ "uc.micro": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.3.tgz",
+ "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI="
+ },
+ "uglify-js": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.5.tgz",
+ "integrity": "sha512-ZebM2kgBL/UI9rKeAbsS2J0UPPv7SBy5hJNZml/YxB1zC6JK8IztcPs+cxilE4pu0li6vadVSFqiO7xFTKuSrg==",
+ "requires": {
+ "commander": "2.12.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "optional": true
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.6.tgz",
+ "integrity": "sha512-VUja+7rYbznEvUaeb8IxOCTUrq4BCb1ml0vffa+mfwKtrAwlqnU0ENF14DtYltV1cxd/HSuK51CCA/D/8kMQVw==",
+ "requires": {
+ "cacache": "10.0.2",
+ "find-cache-dir": "1.0.0",
+ "schema-utils": "0.4.3",
+ "serialize-javascript": "1.4.0",
+ "source-map": "0.6.1",
+ "uglify-es": "3.3.5",
+ "webpack-sources": "1.1.0",
+ "worker-farm": "1.5.2"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.3.tgz",
+ "integrity": "sha512-sgv/iF/T4/SewJkaVpldKC4WjSkz0JsOh2eKtxCPpCO1oR05+7MOF+H476HVRbLArkgA7j5TRJJ4p2jdFkUGQQ==",
+ "requires": {
+ "ajv": "5.5.1",
+ "ajv-keywords": "2.1.1"
+ }
+ },
+ "uglify-es": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.5.tgz",
+ "integrity": "sha512-7IvaFuYtfbcXm0fGb13mmRYVQdzQDXETAtvYHbCDPt2V88Y8l2HaULOyW6ueoYA0JhGIcLK7dtHkDcBWySqnBw==",
+ "requires": {
+ "commander": "2.12.2",
+ "source-map": "0.6.1"
+ }
+ }
+ }
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ },
+ "uniqid": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz",
+ "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=",
+ "requires": {
+ "macaddress": "0.2.8"
+ }
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI="
+ },
+ "unique-filename": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
+ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=",
+ "requires": {
+ "unique-slug": "2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
+ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
+ "requires": {
+ "imurmurhash": "0.1.4"
+ }
+ },
+ "units-css": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/units-css/-/units-css-0.4.0.tgz",
+ "integrity": "sha1-1iKGU6UZg9fBb/KPi53Dsf/tOgc=",
+ "requires": {
+ "isnumeric": "0.2.0",
+ "viewport-dimensions": "0.2.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
+ "upath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.2.tgz",
+ "integrity": "sha512-fCmij7T5LnwUme3dbnVSejvOHHlARjB3ikJFwgZfz386pHmf/gueuTLRFU94FZEaeCLlbQrweiUU700gG41tUw==",
+ "requires": {
+ "lodash.endswith": "4.2.1",
+ "lodash.isfunction": "3.0.8",
+ "lodash.isstring": "4.0.1",
+ "lodash.startswith": "4.2.1"
+ }
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ }
+ }
+ },
+ "url-join": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.3.tgz",
+ "integrity": "sha1-Fdsf3ekFZRw6Ihp42l/rj8gJ03I="
+ },
+ "url-loader": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz",
+ "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==",
+ "requires": {
+ "loader-utils": "1.1.0",
+ "mime": "1.6.0",
+ "schema-utils": "0.3.0"
+ }
+ },
+ "use": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz",
+ "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=",
+ "requires": {
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "lazy-cache": "2.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "validator": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz",
+ "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA=="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "vendors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz",
+ "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ }
+ },
+ "viewport-dimensions": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz",
+ "integrity": "sha1-3nQHR9tTh/0XJfUXXpG6x2r982w="
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "vue": {
+ "version": "2.5.13",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.13.tgz",
+ "integrity": "sha512-3D+lY7HTkKbtswDM4BBHgqyq+qo8IAEE8lz8va1dz3LLmttjgo0FxairO4r1iN2OBqk8o1FyL4hvzzTFEdQSEw=="
+ },
+ "vue-hot-reload-api": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.2.4.tgz",
+ "integrity": "sha512-e+ThJMYmZg4D9UnrLcr6LQxGu6YlcxkrmZGPCyIN4malcNhdeGGKxmFuM5y6ICMJJxQywLfT8MM1rYZr4LpeLw=="
+ },
+ "vue-loader": {
+ "version": "13.7.0",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-13.7.0.tgz",
+ "integrity": "sha512-kDXRgglOOltghngrDFS/YfFew7e0d8fkvPHLYAfLgur7GW0cBt+J0fpBReWY2pixA09dL13abfE4fECyRH4HGg==",
+ "requires": {
+ "consolidate": "0.14.5",
+ "hash-sum": "1.0.2",
+ "loader-utils": "1.1.0",
+ "lru-cache": "4.1.1",
+ "postcss": "6.0.16",
+ "postcss-load-config": "1.2.0",
+ "postcss-selector-parser": "2.2.3",
+ "prettier": "1.10.1",
+ "resolve": "1.5.0",
+ "source-map": "0.6.1",
+ "vue-hot-reload-api": "2.2.4",
+ "vue-style-loader": "3.0.3",
+ "vue-template-es2015-compiler": "1.6.0"
+ }
+ },
+ "vue-meta": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/vue-meta/-/vue-meta-1.4.2.tgz",
+ "integrity": "sha512-fYCRLQqQHU78JwdapdlE0CLx2xROruVSGSaxqAGUtdXHWXpKQLSgCgIKe1YAFh8KtZDH2jDW9f8hKIdcMKY2SA==",
+ "requires": {
+ "deepmerge": "2.0.1",
+ "lodash.isplainobject": "4.0.6",
+ "object-assign": "4.1.1"
+ }
+ },
+ "vue-prism-component": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vue-prism-component/-/vue-prism-component-1.0.1.tgz",
+ "integrity": "sha512-FZJnlGvvqPvBsNQtlmglA1PtPcb5XuIy3YLwWiqJqmaHGp9ZScJ3+5HkNd7weN+QTpFPTNlUcIHpx3cpOgZ0IA=="
+ },
+ "vue-router": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.1.tgz",
+ "integrity": "sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w=="
+ },
+ "vue-server-renderer": {
+ "version": "2.5.13",
+ "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.5.13.tgz",
+ "integrity": "sha512-P9+TuLyi3f68PnFg30xUhMADrCjSoLICzEruBGfV7tqbppkmw/wbzFc8dlap2nFYowyUiRlJku2uuMOKCZD3Bw==",
+ "requires": {
+ "chalk": "1.1.3",
+ "hash-sum": "1.0.2",
+ "he": "1.1.1",
+ "lodash.template": "4.4.0",
+ "lodash.uniq": "4.5.0",
+ "resolve": "1.5.0",
+ "serialize-javascript": "1.4.0",
+ "source-map": "0.5.6"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI="
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "vue-style-loader": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.0.3.tgz",
+ "integrity": "sha512-P/ihpaZKU23T1kq3E0y4c+F8sbm1HQO69EFYoLoGMSGVAHroHsGir/WQ9qUavP8dyFYHmXenzHaJ/nqd8vfaxw==",
+ "requires": {
+ "hash-sum": "1.0.2",
+ "loader-utils": "1.1.0"
+ }
+ },
+ "vue-template-compiler": {
+ "version": "2.5.13",
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.13.tgz",
+ "integrity": "sha512-15HWSgIxrGUcV0v7QRen2Y3fQsbgxXwMvjT/5XKMO0ANmaCcNh7y2OeIDTAuSGeosjb9+E1Pn2PHZ61VQWEgBQ==",
+ "requires": {
+ "de-indent": "1.0.2",
+ "he": "1.1.1"
+ }
+ },
+ "vue-template-es2015-compiler": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz",
+ "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg=="
+ },
+ "vuex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz",
+ "integrity": "sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w=="
+ },
+ "watchpack": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz",
+ "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=",
+ "requires": {
+ "async": "2.6.0",
+ "chokidar": "1.7.0",
+ "graceful-fs": "4.1.11"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "requires": {
+ "micromatch": "2.3.11",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "requires": {
+ "anymatch": "1.3.2",
+ "async-each": "1.0.1",
+ "fsevents": "1.1.3",
+ "glob-parent": "2.0.0",
+ "inherits": "2.0.3",
+ "is-binary-path": "1.0.1",
+ "is-glob": "2.0.1",
+ "path-is-absolute": "1.0.1",
+ "readdirp": "2.1.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ }
+ }
+ },
+ "webpack": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz",
+ "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==",
+ "requires": {
+ "acorn": "5.2.1",
+ "acorn-dynamic-import": "2.0.2",
+ "ajv": "5.5.1",
+ "ajv-keywords": "2.1.1",
+ "async": "2.6.0",
+ "enhanced-resolve": "3.4.1",
+ "escope": "3.6.0",
+ "interpret": "1.1.0",
+ "json-loader": "0.5.7",
+ "json5": "0.5.1",
+ "loader-runner": "2.3.0",
+ "loader-utils": "1.1.0",
+ "memory-fs": "0.4.1",
+ "mkdirp": "0.5.1",
+ "node-libs-browser": "2.1.0",
+ "source-map": "0.5.7",
+ "supports-color": "4.5.0",
+ "tapable": "0.2.8",
+ "uglifyjs-webpack-plugin": "0.4.6",
+ "watchpack": "1.4.0",
+ "webpack-sources": "1.1.0",
+ "yargs": "8.0.2"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
+ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-js": "2.8.29",
+ "webpack-sources": "1.1.0"
+ }
+ }
+ }
+ },
+ "webpack-bundle-analyzer": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.2.tgz",
+ "integrity": "sha1-Y+2G63HMTNqG9o5oWoRTC6ASZEk=",
+ "requires": {
+ "acorn": "5.2.1",
+ "chalk": "1.1.3",
+ "commander": "2.12.2",
+ "ejs": "2.5.7",
+ "express": "4.16.2",
+ "filesize": "3.5.11",
+ "gzip-size": "3.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "opener": "1.4.3",
+ "ws": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.4.tgz",
+ "integrity": "sha512-tq0VmEqam/77Q0wWXBQSZsjnX5rsJvb5kvyP42+MvhuLfS5RXozunAsW+ZGbRzqs/Asyxd6Cvr/V4bQ/218ALw==",
+ "requires": {
+ "loud-rejection": "1.6.0",
+ "memory-fs": "0.4.1",
+ "mime": "2.2.0",
+ "path-is-absolute": "1.0.1",
+ "range-parser": "1.2.0",
+ "url-join": "2.0.3",
+ "webpack-log": "1.1.1"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz",
+ "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA=="
+ }
+ }
+ },
+ "webpack-hot-middleware": {
+ "version": "2.21.0",
+ "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz",
+ "integrity": "sha512-P6xiOLy10QlSVSO7GanU9PLxN6zLLQ7RG16MPTvmFwf2KUG7jMp6m+fmdgsR7xoaVVLA7OlX3YO6JjoZEKjCuA==",
+ "requires": {
+ "ansi-html": "0.0.7",
+ "html-entities": "1.2.1",
+ "querystring": "0.2.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "webpack-log": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.1.1.tgz",
+ "integrity": "sha512-9AeZ12uxaS+DGpcIInWxNuoJMW2JbAc45bkn3fhWcdl4wK36MAq/yiyiITt5IS0TaZWjtLIWxwULCuT9V7/xoA==",
+ "requires": {
+ "chalk": "2.3.0",
+ "log-symbols": "2.1.0",
+ "loglevelnext": "1.0.3",
+ "uuid": "3.1.0"
+ }
+ },
+ "webpack-node-externals": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-1.6.0.tgz",
+ "integrity": "sha1-Iyxi7GCSsQBjWj0p2DwXRxKN+b0="
+ },
+ "webpack-sources": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
+ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
+ "requires": {
+ "source-list-map": "2.0.0",
+ "source-map": "0.6.1"
+ }
+ },
+ "webpack-virtual-modules": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.1.8.tgz",
+ "integrity": "sha512-+VPqsKyd8Ef/CNE4S3cNBshYWOr+gH6VCBCVyTurBWN42sBoVTaPKZlwCsRNG9VEFgl219RPkzezEmLqYYHV0A==",
+ "requires": {
+ "debug": "2.6.9"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "whatwg-fetch": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz",
+ "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=",
+ "dev": true
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE="
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ },
+ "worker-farm": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.2.tgz",
+ "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==",
+ "requires": {
+ "errno": "0.1.6",
+ "xtend": "4.0.1"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "ws": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz",
+ "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==",
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
+ }
+ },
+ "xml-char-classes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
+ "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0="
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "xxhashjs": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.1.tgz",
+ "integrity": "sha1-m76b6JYUKXbfo0wGGy0GjEPTDeA=",
+ "requires": {
+ "cuint": "0.2.2"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "requires": {
+ "camelcase": "4.1.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "read-pkg-up": "2.0.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "7.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "requires": {
+ "camelcase": "4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ }
+ }
+ },
+ "z-schema": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.20.0.tgz",
+ "integrity": "sha512-9opdfBBL7+6L6rryjV0XVTvgv2SqC8kdUvSelx2pO+hOC0ZBoq/rxgvry1tyUYW33ea50ZOrg3Keq7dXmUxcnQ==",
+ "requires": {
+ "commander": "2.12.2",
+ "lodash.get": "4.4.2",
+ "lodash.isequal": "4.5.0",
+ "validator": "9.4.1"
+ }
+ }
+ }
+}
diff --git a/website/package.json b/website/package.json
new file mode 100644
index 0000000..2784b47
--- /dev/null
+++ b/website/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "unide",
+ "version": "1.0.0",
+ "description": "Eclipse Unide: Understand Industry devices",
+ "author": "Axel Meinhardt ",
+ "private": true,
+ "scripts": {
+ "dev": "nuxt",
+ "build": "nuxt build",
+ "postinstall": "npm run generate",
+ "start": "nuxt start",
+ "generate": "nuxt generate",
+ "lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
+ "precommit": "npm run lint",
+ "uml": "java -Djava.awt.headless=true -jar plantuml.jar -charset utf8 -o . -tsvg static/images/specification/*/*.uml"
+ },
+ "dependencies": {
+ "axios": "^0.17.1",
+ "babel-runtime": "^6.23.0",
+ "bulma": "^0.6.1",
+ "font-awesome": "^4.7.0",
+ "front-matter": "^2.3.0",
+ "json-schema-loader": "git://github.com/joshheyse/json-schema-loader#649e1d4",
+ "lodash": "4.17.4",
+ "markdown-it": "^8.4.0",
+ "markdown-it-decorate": "^1.2.2",
+ "nuxt": "^1.0.0",
+ "prismjs": "^1.9.0",
+ "tiny-cookie": "^2.1.2",
+ "vue-prism-component": "^1.0.1",
+ "webpack-virtual-modules": "^0.1.8"
+ },
+ "devDependencies": {
+ "babel-eslint": "^8.0.2",
+ "eslint": "^4.11.0",
+ "eslint-loader": "^1.9.0",
+ "eslint-config-standard": "^10.2.1",
+ "eslint-config-vue": "^2.0.2",
+ "eslint-plugin-babel": "^4.0.1",
+ "eslint-plugin-html": "^4.0.0",
+ "eslint-plugin-import": "^2.8.0",
+ "eslint-plugin-node": "^5.2.1",
+ "eslint-plugin-promise": "^3.6.0",
+ "eslint-plugin-standard": "^3.0.1",
+ "eslint-plugin-vue": "^2.1.0",
+ "node-sass": "^4.6.1",
+ "sass-loader": "^6.0.2"
+ }
+}
diff --git a/website/pages/article.vue b/website/pages/article.vue
new file mode 100644
index 0000000..1a44686
--- /dev/null
+++ b/website/pages/article.vue
@@ -0,0 +1,128 @@
+
+
+
+ {{ post.title }}
+
+
+
+ {{ post.date | timeStamp }}
+
+
+
+
+
+
+
+
+ {{ post.prev.title }}
+
+
+
+
+ {{ post.next.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/pages/blog.vue b/website/pages/blog.vue
new file mode 100644
index 0000000..c4fdc2c
--- /dev/null
+++ b/website/pages/blog.vue
@@ -0,0 +1,108 @@
+
+
+
+ {{ dateHeader }}
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+ {{ item.date | timeStamp($route.params) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/pages/faq.vue b/website/pages/faq.vue
new file mode 100644
index 0000000..5c9101a
--- /dev/null
+++ b/website/pages/faq.vue
@@ -0,0 +1,64 @@
+
+
+
+ Frequently Asked Questions
+
+
+ We assembled a few frequently asked questions about the Production Performance Protocol (PPMP) and the Unide project. You're welcome to raise your questions in the
Unide forum .
+
+
+
+
+ {{ faq.question }}
+
+
+
+
+
+
+
+
+
+
diff --git a/website/pages/index.vue b/website/pages/index.vue
new file mode 100644
index 0000000..f1ca703
--- /dev/null
+++ b/website/pages/index.vue
@@ -0,0 +1,82 @@
+
+
+
+
+ Understand Industry devices
+
+
+
+
+
+
+
+
Languages of the world
+
+
+ Imagine the following: You go on vacation to a foreign country and want to get by. Usually you will neither have the time nor the resources to learn a new language for each trip. Luckily this is not necessary. A handful of simple phrases such as hello , I am hungry , etc. are already sufficient to cope with many situations. To have such phrases at hand you don’t need to be fluent in a language, a mini phrase book will already cover a good portion. Thus, to master common situations in different languages you will be well served by a collection of mini phrase books in different languages.
+
+
+
+
+
+
+
+
Machines in production
+
+
+ A similar experience we face in Industry 4.0: Imagine you are a system integrator, you want to realize a monitoring application for plants of a manufacturer and, since the Eclipse iot stack realizes a good portion of functionality you need to implement, you want to build your application on top of it. It would really help you if you can communicate with the machines on a simple, commonly understood protocol that is easily processible by the existing stack. However, there are a lot of different machines out there, using a lot of different languages and accents. Older machines especially do not speak new protocols (e.g. OPC-UA). Yet, we need to understand how to monitor their condition or interpret specific measurements.
+ A simple approach to send and understand such industry-specific content implemented for multiple systems would ease the use of the existing Eclipse iot stack and thereby help a lot on the way to a connected industry.
+
+
+
+
+
+
+
+
+
+
Collaboration with partner
+
+
Production Performance Management Protocol (PPMP )
+
+ Through hands-on experience and collaboration with customers and partners we learned which information is key in understanding industry devices. For example, when sending measurements, the currently produced part or lot number together with machine identification are crucial to get any useful interpretation out of the information.
+ We started to capture this information in a simple payload specification and just like in the introducing language example where you can use phrases via phone, letter or in person, the payload is meant to be sent over different protocols (REST, MQTT, AMQP). This payload is the Production Performance Management Protocol (PPMP ).
+
+
+
+
+
+
+
+
+
+ In order to, first, leverage the Eclipse IoT stack in Industry 4.0 scenarios and, second, build a lively community around the specification, we consider the Eclipse iot working group as the premier place to host Unide.
+
+
+
+
+
+
diff --git a/website/pages/proposal.vue b/website/pages/proposal.vue
new file mode 100644
index 0000000..561f16c
--- /dev/null
+++ b/website/pages/proposal.vue
@@ -0,0 +1,88 @@
+
+
+
+ What is Unide?
+
+
Noticeably in the recent years, there’s a continuous increase in demand, price pressure and complexity in manufacturing. Things need to move faster, be more flexible, and fulfill higher quality standards. Often, optimization in this regard is referred to as Production Performance Management (PPM). The basis for this optimization is information from the machines and devices related to a product, such as:
+
+ Torque and angle for a tightening process
+ Influx / efflux of throttle plate test station
+ Energy consumption of spindles in a cutting process
+
+
Nowadays, brand new machines and software are often shipped with powerful communication capabilities. For older machines, smaller factories and SMEs (Small and Medium Enterprises), it can be a challenge to catch up with the complex IT standards that come along. In fact, sometimes the hardware itself imposes limits.
+
Nevertheless, in a manufacturing environment, monitoring makes most sense if there are no blind spots. To achieve that, upgrading machines and software is one option, retrofitting another. For the latter, the hurdle should be as low as possible. Yet, there should be a few guidelines for a one-way exchange of the most necessary information (machine messages, measurements):
+
The structure of the data shall be:
+
+ flexible enough to be carried via multiple protocols, in order to not reinvent the wheel and leverage on existing technology
+ similar in each case, to be able to use the same software to interpret the data
+ easily understandable, so that implementation in a custom environment won’t be a hurdle
+ as simple as possible, to not produce an opinionated framework
+ and yet containing enough information for the use cases, to fulfill the functional requirements
+
+
We decided the least common denominator of necessary information are the mandatory fields, common relevant information to be optional, and the possibility for further extension points through metadata.
+
+ Industry benefits of Unide
+
+
This open source project aims to make PPM affordable for smaller organizations by reducing cost and complexity of data communication. Through sample implementations of a simple information structure (Production Performance Management Protocol - PPMP) tailored to manufacturing environments, we want to encourage the community to use, share, and evolve this structure together.
+
PPMP has already been introduced as part of a PPM testbed at a medium-sized Bosch plant, working with many SMEs as partners and suppliers. Furthermore, this testbed aims to create an ecosystem which allows SMEs and larger companies to collaborate efficiently.
+
The PPMP takes an important role by ensuring interoperability between different types of devices and software. It is designed to gather and aggregate machine and sensor data from different devices. It focuses on defining the JSON payload which can be transferred via a variety of transports (REST, AMQP, MQTT). The primary goals of PPMP are:
+
+ Integrating devices (across domains; e.g. manufacturing or energy) for data aggregation and gathering purposes
+ Providing a very lightweight and easy-to-use solution for small and medium-sized enterprises (SMEs)
+
+
+ Scope
+
+
The Eclipse Unide project publishes the current version of Production Performance Management Protocol (PPMP) and develops simple server/client implementations. The implementations store the payloads in a database and displays them through a simple user interface. Everyone can then use these samples for their custom condition monitoring applications.
+
The project will contain:
+
PPMP Specification:
+
+ Machine message and measurement interfaces
+ JSON based
+ Versioned
+
+
Client:
+
+ Chrome / nw.js App
+ For Industry Machines and Devices
+ Node.js/Python client running on Raspberry Pi
+
+
Server:
+
+ (REST) Server including persistence and simple data visualization
+ Multiple examples for different technologies
+
+
+ Description
+
+
Eclipse Unide provides a lightweight Production Performance Management Protocol (PPMP) server-client implementations (using JSON, REST and other). The core of the protocol are two interface definitions:
+
+ PPMP Measurement Interface: This is a public REST API with the purpose of receiving time series and machine data.
+ PPMP Messages Interface: This is a public REST API with the purpose of receiving machine messages.
+
+
+ Why Here?
+
+
The PPMP extends the existing Eclipse IoT world by providing an easy and lightweight format for gathering data from industry sensors and machines, focusing on normalizing time series and alert messages. It can be transported by protocols like REST, AMQP, MQTT. As PPMP, these technologies do also not require complex and expensive middleware nor do their systems cause additional license fees. Eclipse is an excellent platform for developing PPMP sample implementations and evolving the format hands-on with the community. In fact, it could even join forces with existing Eclipse IoT projects like Hono , Paho or Kura .
+
Interested Parties
+
+
+
+
+
diff --git a/website/pages/specification.vue b/website/pages/specification.vue
new file mode 100644
index 0000000..52427d7
--- /dev/null
+++ b/website/pages/specification.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+ PPMP Specification
+
+
Rationale
+
+ Noticeably in recent years, there is a continuous increase in demand, price pressure and complexity in manufacturing. Things need to move faster, be more flexible, and fulfill higher quality standards forcing manufacturers to optimize their processes.
+
+
+ Production facilities and their performance have a huge impact on the overall performance of manufacturing processes. However, to identify bottlenecks and possibilities for improvements detailed data from machines are required.
+
+
+ Such data is surely provided by machines either via modern protocols such as OPC UA or via proprietary access methods but it is not provided in a common and easily accessible format, which can be used to do performance analysis and optimization. This renders holistic process improvement efforts infeasible for many, especially smaller organizations.
+
+
+ The Production Performance Management Protocol (PPMP) specifies a format that allows to capture data that is required to do performance analysis of production facilities. It allows monitoring backends to collect and evaluate key metrics of machines in the context of a production process. It is doing that by allowing to relate the machine status with currently produced parts.
+
+
+ The specification is structured into three payload formats: Measurement payload, message payload and process payload. The Measurement payload contains measurements from machines such as the temperature of a machine at a specific point in time together with the currently produced part. The message payload contains arbitrary messages sent by a machine, e.g. alerts or the like. A process message consists of information about a discrete e.g. tightening or welding processes with all their characterising data which are needed to describe and analyze it.
+
+
+ The default way of transporting the json payload is via http to allow for an easy integration into various backend systems. Other transportation methods are possible and welcome.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/pages/specification/index.vue b/website/pages/specification/index.vue
new file mode 100644
index 0000000..042255b
--- /dev/null
+++ b/website/pages/specification/index.vue
@@ -0,0 +1,18 @@
+
+
+
+
+ Communicating Parties
+
+
+ Two parties are involved in a PPMP message exchange: the sender and the receiver. The sender pushes a message to the receiver. Usually the sender is a machine or a sensor of a machine.
+
+
+ The receiver waits for messages. It offers a API that allows for sending either measurement payloads or message payloads.
+
+
+ The communication is unidirectional. Only the sender can contact the receiver and send messages. No feedback from receiver to sender is provided.
+
+
+
+
diff --git a/website/pages/specification/v2/machine-message.vue b/website/pages/specification/v2/machine-message.vue
new file mode 100644
index 0000000..6bdb3d2
--- /dev/null
+++ b/website/pages/specification/v2/machine-message.vue
@@ -0,0 +1,134 @@
+
+
+
+
+ Machine Message Payload
+
+
The main purpose of the machine message format is to allow devices and integrators to send messages containing an interpretation of measurement data or status.
+
+
+
+
+
+
+ Minimal message example
+
+ {{ $static.message | stringify }}
+
+
+
+
+ Multiple message example
+
+ {{ $static.multipleMachineMessages | stringify }}
+
+
+
+
+
+
diff --git a/website/pages/specification/v2/measurement-message.vue b/website/pages/specification/v2/measurement-message.vue
new file mode 100644
index 0000000..1b9e744
--- /dev/null
+++ b/website/pages/specification/v2/measurement-message.vue
@@ -0,0 +1,170 @@
+
+
+
+
+ Measurement Payload
+
+
The measurement message is the format to exchange simple (non-structured, non-complex ) measurement data. It also allows to transport multiple measurement data (eg. values over time), called 'series'.
+
+
+
+
+
+ Minimal message example
+
+ {{ $static.message | stringify }}
+
+
+
+ Multiple message example
+
+ {{ $static.complexMessage | stringify }}
+
+
+
+
+
+
diff --git a/website/pages/specification/v2/process-message.vue b/website/pages/specification/v2/process-message.vue
new file mode 100644
index 0000000..05ea8d9
--- /dev/null
+++ b/website/pages/specification/v2/process-message.vue
@@ -0,0 +1,250 @@
+
+
+
+
+ Process Payload
+
+
The process message is the format to exchange data out of discrete processes. It also allows to transport process information, part information and measurement data for each phase of the process.
+
+
+
+
+
+ Minimal message example
+
+ {{ $static.message | stringify }}
+
+
+
+
+ Process message example
+
+ {{ $static.complexMessage | stringify }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/website/pages/specification/v3/machine-message.vue b/website/pages/specification/v3/machine-message.vue
new file mode 100644
index 0000000..9680f99
--- /dev/null
+++ b/website/pages/specification/v3/machine-message.vue
@@ -0,0 +1,136 @@
+
+
+
+
+ Machine Message Payload
+
+
The main purpose of the machine message format is to allow devices and integrators to send messages containing an interpretation of measurement data or status.
+
+
+
+
+
+
+ Minimal message example
+
+ {{ $static.message | stringify }}
+
+
+
+
+ Multiple message example
+
+ {{ $static.multipleMachineMessages | stringify }}
+
+
+
+
+
+
diff --git a/website/pages/specification/v3/measurement-message.vue b/website/pages/specification/v3/measurement-message.vue
new file mode 100644
index 0000000..0329977
--- /dev/null
+++ b/website/pages/specification/v3/measurement-message.vue
@@ -0,0 +1,200 @@
+
+
+
+
+ Measurement Payload
+
+
The measurement message is the format to exchange simple (non-structured, non-complex ) measurement data. It also allows to transport multiple measurement data (eg. values over time), called 'series'.
+
+
+
+
+
+ Minimal message example
+
+ {{ $static.message | stringify }}
+
+
+
+ Multiple message example
+
+ {{ $static.complexMessage | stringify }}
+
+
+
+
+
+
diff --git a/website/pages/specification/v3/process-message.vue b/website/pages/specification/v3/process-message.vue
new file mode 100644
index 0000000..c505d94
--- /dev/null
+++ b/website/pages/specification/v3/process-message.vue
@@ -0,0 +1,274 @@
+
+
+
+
+ Process Payload
+
+
The process message is the format to exchange data out of discrete processes. It also allows to transport process information, part information and measurement data for each phase of the process.
+
+
+
+
+
+ Minimal message example
+
+ {{ $static.message | stringify }}
+
+
+
+
+ Process message example
+
+ {{ $static.complexMessage | stringify }}
+
+
+
+
+
+
diff --git a/website/plugins/ga.js b/website/plugins/ga.js
new file mode 100644
index 0000000..e25718f
--- /dev/null
+++ b/website/plugins/ga.js
@@ -0,0 +1,16 @@
+/* eslint-disable */
+
+export default ({ app }) => {
+ if(!process.client || process.env.NODE_ENV === 'development') {
+ return;
+ }
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-108745746-1', 'auto');
+ app.router.afterEach((to, from) => {
+ ga('set', 'page', to.fullPath)
+ ga('send', 'pageview')
+ });
+}
diff --git a/website/plugins/prismjs.js b/website/plugins/prismjs.js
new file mode 100644
index 0000000..5b2cb29
--- /dev/null
+++ b/website/plugins/prismjs.js
@@ -0,0 +1,2 @@
+import 'prismjs';
+import 'prismjs/components/prism-json';
diff --git a/website/static/favicon.ico b/website/static/favicon.ico
new file mode 100644
index 0000000..dddbd59
Binary files /dev/null and b/website/static/favicon.ico differ
diff --git a/website/static/images/analysis.jpg b/website/static/images/analysis.jpg
new file mode 100644
index 0000000..700b312
Binary files /dev/null and b/website/static/images/analysis.jpg differ
diff --git a/website/static/images/blog/Transform-PPMP-with-camel-1.svg b/website/static/images/blog/Transform-PPMP-with-camel-1.svg
new file mode 100644
index 0000000..da5a0db
--- /dev/null
+++ b/website/static/images/blog/Transform-PPMP-with-camel-1.svg
@@ -0,0 +1,52 @@
+PRC7000 mosquitto Camel REST Server broadcast data queue data retrieve data transform payload split payload Transform to JSON Transform to JSON sent do backend sent do backend receive data validate message save to db sensor values MQTT MQTT PRC7000 format PPMP format bundle measurements process String String HTTP POST HTTP POST
\ No newline at end of file
diff --git a/website/static/images/blog/Transform-PPMP-with-camel-1.uml b/website/static/images/blog/Transform-PPMP-with-camel-1.uml
new file mode 100644
index 0000000..b1392cb
--- /dev/null
+++ b/website/static/images/blog/Transform-PPMP-with-camel-1.uml
@@ -0,0 +1,40 @@
+@startuml
+
+skinparam activity {
+ StartColor #78be20
+ BorderColor black
+ FontColor #50237f
+ BackgroundColor #f5f5f5
+ ArrowColor black
+ EndColor #50237f
+}
+
+partition PRC7000 {
+ (*) ->[sensor\nvalues] "broadcast data" as send
+}
+
+partition mosquitto {
+ send -down->[MQTT] "queue data"
+}
+
+partition Camel {
+ "queue data" -up->[MQTT] "retrieve data" as queue
+ queue -right->[PRC7000\nformat] "transform payload" as transform
+ transform ->[PPMP format\nbundle] "split payload" as split
+ split -->[measurements] "Transform to JSON" as measurementString
+ split -->[process] "Transform to JSON" as processString
+
+ measurementString -->[String] "sent do backend" as measurementPOST
+ processString -->[String] "sent do backend" as processPOST
+}
+
+partition "REST Server" {
+ measurementPOST -->[HTTP POST] "receive data"
+ processPOST -up>[HTTP POST] "receive data"
+ "receive data" -up-> "validate message"
+ "validate message" -up-> "save to db"
+ "save to db" -> (*)
+}
+
+@enduml
+
diff --git a/website/static/images/blog/Transform-PPMP-with-camel-2-eclipse.png b/website/static/images/blog/Transform-PPMP-with-camel-2-eclipse.png
new file mode 100644
index 0000000..9866edd
Binary files /dev/null and b/website/static/images/blog/Transform-PPMP-with-camel-2-eclipse.png differ
diff --git a/website/static/images/blog/Transform-PPMP-with-camel-2-logfile.png b/website/static/images/blog/Transform-PPMP-with-camel-2-logfile.png
new file mode 100644
index 0000000..1c35fcd
Binary files /dev/null and b/website/static/images/blog/Transform-PPMP-with-camel-2-logfile.png differ
diff --git a/website/static/images/blog/Transform-PPMP-with-camel-camel.png b/website/static/images/blog/Transform-PPMP-with-camel-camel.png
new file mode 100644
index 0000000..2e1c223
Binary files /dev/null and b/website/static/images/blog/Transform-PPMP-with-camel-camel.png differ
diff --git a/website/static/images/blog/Transform-PPMP-with-camel-welding.jpg b/website/static/images/blog/Transform-PPMP-with-camel-welding.jpg
new file mode 100644
index 0000000..55870a7
Binary files /dev/null and b/website/static/images/blog/Transform-PPMP-with-camel-welding.jpg differ
diff --git a/website/static/images/blog/grinding-machine-ce4iot-dashboard.png b/website/static/images/blog/grinding-machine-ce4iot-dashboard.png
new file mode 100644
index 0000000..eb5b999
Binary files /dev/null and b/website/static/images/blog/grinding-machine-ce4iot-dashboard.png differ
diff --git a/website/static/images/blog/grinding-machine-grafana-dashboard.png b/website/static/images/blog/grinding-machine-grafana-dashboard.png
new file mode 100644
index 0000000..85bdc4b
Binary files /dev/null and b/website/static/images/blog/grinding-machine-grafana-dashboard.png differ
diff --git a/website/static/images/collaborators_v2.svg b/website/static/images/collaborators_v2.svg
new file mode 100644
index 0000000..b0557ee
--- /dev/null
+++ b/website/static/images/collaborators_v2.svg
@@ -0,0 +1,53 @@
+PPMP Producer / Machine PPMP Consumer Information / Alarms Sensor values End-to-end process data Machine Messages Measurements Processs /process /message /measurement
\ No newline at end of file
diff --git a/website/static/images/collaborators_v2.uml b/website/static/images/collaborators_v2.uml
new file mode 100644
index 0000000..1c21adb
--- /dev/null
+++ b/website/static/images/collaborators_v2.uml
@@ -0,0 +1,40 @@
+@startuml
+skinparam interface {
+ BackgroundColor #78be20
+ FontColor #50237f
+ BorderColor black
+}
+
+skinparam node {
+ FontColor #50237f
+}
+
+skinparam component {
+ BorderColor black
+ FontColor #50237f
+ BackgroundColor #f5f5f5
+ ArrowColor black
+}
+
+() "/process" as p
+() "/message" as m
+() "/measurement" as s
+
+node "PPMP Producer / Machine" {
+ [Information / Alarms]
+ [Sensor values]
+ [End-to-end process data]
+}
+node "PPMP Consumer" {
+ [Machine Messages]
+ [Measurements]
+ [Processs]
+}
+
+[Information / Alarms] --> m
+m --> [Machine Messages]
+[Sensor values] --> s
+s --> [Measurements]
+[End-to-end process data] --> p
+p --> [Processs]
+@enduml
diff --git a/website/static/images/eclipse-426x100.png b/website/static/images/eclipse-426x100.png
new file mode 100644
index 0000000..937b063
Binary files /dev/null and b/website/static/images/eclipse-426x100.png differ
diff --git a/website/static/images/languages.png b/website/static/images/languages.png
new file mode 100644
index 0000000..98857db
Binary files /dev/null and b/website/static/images/languages.png differ
diff --git a/images/logo.png b/website/static/images/logo.png
similarity index 100%
rename from images/logo.png
rename to website/static/images/logo.png
diff --git a/website/static/images/machines.jpg b/website/static/images/machines.jpg
new file mode 100644
index 0000000..48cec4c
Binary files /dev/null and b/website/static/images/machines.jpg differ
diff --git a/website/static/images/specification/v2/measurementPayload.svg b/website/static/images/specification/v2/measurementPayload.svg
new file mode 100644
index 0000000..fe574e4
--- /dev/null
+++ b/website/static/images/specification/v2/measurementPayload.svg
@@ -0,0 +1,83 @@
+MeasurementPayload content-spec : String device : Device measurements : Measurements part[0..1] : Part Device deviceID : String metaData[0..1] : <String, String> operationalStatus[0..1] : String Part code[0..1] : String metaData[0..1] : <String, String> partID[0..1] : String partTypeID[0..1] : String result[0..1] : Result Measurement code[0..1] : String limits[0..1] : LimitsList result[0..1] : Result series : Series ts : Date Limits lowerError[0..1] : Float lowerWarn[0..1] : Float target[0..1] : Float upperError[0..1] : Float, upperWarn[0..1] : Float Series $_time : [Integer] <values>[1..*] : [Float] Result OK NOK UNKNOWN Measurements 1 1..* LimitsList 1 0..1
\ No newline at end of file
diff --git a/website/static/images/specification/v2/messagePayload.svg b/website/static/images/specification/v2/messagePayload.svg
new file mode 100644
index 0000000..3b6fe4e
--- /dev/null
+++ b/website/static/images/specification/v2/messagePayload.svg
@@ -0,0 +1,66 @@
+MessagePayload content-spec : String device : Device messages : Messages Device deviceID : String metaData[0..1] : <String, String> operationalStatus[0..1] : String Message code : String description[0..1] : String hint[0..1] : String metaData[0..1] : <String, String> origin[0..1] : String severity[0..1] : Severity title[0..1] : String ts : Date type[0..1] : Type Type DEVICE TECHNICAL_INFO Severity HIGH MEDIUM LOW UNKNOWN Messages 1 1..*
\ No newline at end of file
diff --git a/website/static/images/specification/v2/processPayload.svg b/website/static/images/specification/v2/processPayload.svg
new file mode 100644
index 0000000..af80321
--- /dev/null
+++ b/website/static/images/specification/v2/processPayload.svg
@@ -0,0 +1,144 @@
+ProcessPayload content-spec : String device : Device measurements : Measurements part[0..1] : Part process : Process Device deviceID : String metaData[0..1] : <String, String> operationalStatus[0..1] : String Part code[0..1] : String metaData[0..1] : <String, String> partID[0..1] : String partTypeID[0..1] : String result[0..1] : Result type[0..1] : PartType Process externalProcessId[0..1] : String metaData[0..1] : <String, String> program[0..1] : Program result[0..1] : Result shutoffPhase[0..1] : String shutoffValues[0..1] : ShutoffValues ts : Date Measurement code[0..1] : String limits[0..1] : LimitsList name[0..1] : String phase[0..1] ; String result[0..1] : Result series : Series specialValues[0..1] : SpecialValues ts : Date Program id : String lastChangeDate[0..1] : Date name[0..1] : String ShutoffValue lowerError[0..1] : Float lowerWarn[0..1] : Float target[0..1] : Float ts[0..1] : Date upperError[0..1] : Float upperWarn[0..1] : Float value : Float Series $_time[0..1] : [Integer] <value>[0..*] : [Float] Limits LimitsSingle lowerError[0..1] : Float lowerWarn[0..1] : Float target[0..1] : Float upperError[0..1] : Float upperWarn[0..1] : Float LimitsList lowerError[0..1] : [Float] lowerWarn[0..1] : [Float] target[0..1] : [Float] upperError[0..1] : [Float] upperWarn[0..1] : [Float] SpecialValue $_time[0..1] : Integer name[0..1] : String value : <String, Float> PartType SINGLE BATCH Result OK NOK UNKNOWN Measurements 1 0..* ShutoffValues 1 0..* LimitsList 1 0..* SpecialValues 1 0..*
\ No newline at end of file
diff --git a/website/static/images/specification/v3/definitions.iuml b/website/static/images/specification/v3/definitions.iuml
new file mode 100644
index 0000000..3ba8bf7
--- /dev/null
+++ b/website/static/images/specification/v3/definitions.iuml
@@ -0,0 +1,79 @@
+@startuml
+
+skinparam class {
+ BorderColor black
+ FontColor #50237f
+ BackgroundColor #f5f5f5
+ ArrowColor black
+}
+skinparam stereotype{
+ CBackgroundColor white
+ EBackgroundColor white
+}
+
+class Device {
+ id: String
+ mode[0..1]: String
+ state[0..1]: DeviceState
+}
+
+class Measurement {
+ code[0..1]: String
+ context[0..1]: ContextList
+ result[0..1]: Result
+ series: Series
+ ts: Date
+}
+
+class Context {
+ accuracy[0..1]: Float | [Float]
+ limits[0..1]: Limits
+ offset[0..1]: Float | [Float]
+ type[0..1]: String
+ unit[0..1]: String
+}
+
+class Limits {
+ lowerError[0..1]: Float | [Float]
+ lowerWarn[0..1]: Float | [Float]
+ target[0..1]: Float | [Float]
+ upperError[0..1]: Float | [Float]
+ upperWarn[0..1]: Float | [Float]
+}
+
+class Series {
+ time: [Integer]
+ [1..*]: [Float]
+}
+
+class Part {
+ code[0..1]: String
+ id[0..1]: String
+ type[0..1]: PartType
+ typeId[0..1]: String
+ result[0..1]: Result
+}
+
+enum DeviceState {
+ OK
+ INFO
+ WARN
+ ERROR
+ UNKNOWN
+}
+
+enum Result {
+ OK
+ NOK
+ UNKNOWN
+}
+
+enum PartType {
+ SINGLE
+ BATCH
+}
+
+Measurement "1" *-- "0..1" Context : ContextList
+Context "1" *-- "0..*" Limits
+
+@enduml
\ No newline at end of file
diff --git a/website/static/images/specification/v3/measurementPayload.svg b/website/static/images/specification/v3/measurementPayload.svg
new file mode 100644
index 0000000..bcece42
--- /dev/null
+++ b/website/static/images/specification/v3/measurementPayload.svg
@@ -0,0 +1,120 @@
+Device id: String mode[0..1]: String state[0..1]: DeviceState Measurement code[0..1]: String context[0..1]: ContextList result[0..1]: Result series: Series ts: Date Context accuracy[0..1]: Float | [Float] limits[0..1]: Limits offset[0..1]: Float | [Float] type[0..1]: String unit[0..1]: String Limits lowerError[0..1]: Float | [Float] lowerWarn[0..1]: Float | [Float] target[0..1]: Float | [Float] upperError[0..1]: Float | [Float] upperWarn[0..1]: Float | [Float] Part code[0..1]: String id[0..1]: String type[0..1]: PartType typeId[0..1]: String result[0..1]: Result DeviceState OK INFO WARN ERROR UNKNOWN Result OK NOK UNKNOWN PartType SINGLE BATCH MeasurementPayload content-spec : String device : Device measurements : Measurements part[0..1] : Part ContextList 1 0..1 1 0..* Measurements 1 1..*
\ No newline at end of file
diff --git a/website/static/images/specification/v3/measurementPayload.uml b/website/static/images/specification/v3/measurementPayload.uml
new file mode 100644
index 0000000..07982f7
--- /dev/null
+++ b/website/static/images/specification/v3/measurementPayload.uml
@@ -0,0 +1,31 @@
+@startuml
+!include definitions.iuml
+
+skinparam class {
+ BorderColor black
+ FontColor #50237f
+ BackgroundColor #f5f5f5
+ ArrowColor black
+}
+
+skinparam stereotype {
+ CBackgroundColor white
+ EBackgroundColor white
+}
+
+class MeasurementPayload {
+ content-spec : String
+ device : Device
+ measurements : Measurements
+ part[0..1] : Part
+}
+
+MeasurementPayload -- Device
+MeasurementPayload -- Part
+MeasurementPayload "1" o-- "1..*" Measurement : Measurements
+
+Measurement -- Series
+
+hide Series
+
+@enduml
\ No newline at end of file
diff --git a/website/static/images/specification/v3/messagePayload.svg b/website/static/images/specification/v3/messagePayload.svg
new file mode 100644
index 0000000..eec6612
--- /dev/null
+++ b/website/static/images/specification/v3/messagePayload.svg
@@ -0,0 +1,144 @@
+Device id: String mode[0..1]: String state[0..1]: DeviceState DeviceState OK INFO WARN ERROR UNKNOWN MessagePayload content-spec : String device : Device messages : Messages Message code : String description[0..1] : String hint[0..1] : String origin[0..1] : String severity[0..1] : Severity title[0..1] : String ts : Date type[0..1] : Type Type DEVICE TECHNICAL_INFO Severity HIGH MEDIUM LOW UNKNOWN Messages 1 1..*
\ No newline at end of file
diff --git a/website/static/images/specification/v3/messagePayload.uml b/website/static/images/specification/v3/messagePayload.uml
new file mode 100644
index 0000000..55c055f
--- /dev/null
+++ b/website/static/images/specification/v3/messagePayload.uml
@@ -0,0 +1,55 @@
+@startuml
+!include definitions.iuml
+
+skinparam class {
+ BorderColor black
+ FontColor #50237f
+ BackgroundColor #f5f5f5
+ ArrowColor black
+}
+skinparam stereotype{
+ CBackgroundColor white
+ EBackgroundColor white
+}
+
+class MessagePayload {
+ content-spec : String
+ device : Device
+ messages : Messages
+}
+
+class Message {
+ code : String
+ description[0..1] : String
+ hint[0..1] : String
+ origin[0..1] : String
+ severity[0..1] : Severity
+ title[0..1] : String
+ ts : Date
+ type[0..1] : Type
+}
+
+enum Type {
+ DEVICE
+ TECHNICAL_INFO
+}
+
+enum Severity {
+ HIGH
+ MEDIUM
+ LOW
+ UNKNOWN
+}
+
+MessagePayload -- Device
+MessagePayload "1" o-- "1..*" Message : Messages
+
+hide Context
+hide Limits
+hide Measurement
+hide Part
+hide PartType
+hide Result
+hide Series
+
+@enduml
\ No newline at end of file
diff --git a/website/static/images/specification/v3/processPayload.svg b/website/static/images/specification/v3/processPayload.svg
new file mode 100644
index 0000000..b8e6115
--- /dev/null
+++ b/website/static/images/specification/v3/processPayload.svg
@@ -0,0 +1,150 @@
+Device id: String mode[0..1]: String state[0..1]: DeviceState Measurement code[0..1]: String context[0..1]: ContextList result[0..1]: Result series: Series ts: Date Context accuracy[0..1]: Float | [Float] limits[0..1]: Limits offset[0..1]: Float | [Float] type[0..1]: String unit[0..1]: String Limits lowerError[0..1]: Float | [Float] lowerWarn[0..1]: Float | [Float] target[0..1]: Float | [Float] upperError[0..1]: Float | [Float] upperWarn[0..1]: Float | [Float] Series time: [Integer] <values>[1..*]: [Float] Part code[0..1]: String id[0..1]: String type[0..1]: PartType typeId[0..1]: String result[0..1]: Result DeviceState OK INFO WARN ERROR UNKNOWN Result OK NOK UNKNOWN PartType SINGLE BATCH ProcessPayload content-spec: String device: Device measurements: Measurements part[0..1]: Part process: Process Process externalId[0..1]: String program[0..1]: Program result[0..1]: Result shutoffPhase[0..1]: String ts: Date ProcessMeasurement name[0..1]: String phase[0..1] ; String specialValues[0..1]: SpecialValues Program id: String lastChangeDate[0..1]: Date name[0..1]: String SpecialValue time[0..1]: Integer name[0..1]: String value: <String, Float> ContextList 1 0..1 1 0..* Measurements 1 0..* SpecialValues 1 0..*
\ No newline at end of file
diff --git a/website/static/images/specification/v3/processPayload.uml b/website/static/images/specification/v3/processPayload.uml
new file mode 100644
index 0000000..0f12596
--- /dev/null
+++ b/website/static/images/specification/v3/processPayload.uml
@@ -0,0 +1,61 @@
+@startuml
+!include definitions.iuml
+
+skinparam class {
+ BorderColor black
+ FontColor #50237f
+ BackgroundColor #f5f5f5
+ ArrowColor black
+}
+skinparam stereotype {
+ CBackgroundColor white
+ EBackgroundColor white
+}
+
+class ProcessPayload {
+ content-spec: String
+ device: Device
+ measurements: Measurements
+ part[0..1]: Part
+ process: Process
+}
+
+class Process {
+ externalId[0..1]: String
+ program[0..1]: Program
+ result[0..1]: Result
+ shutoffPhase[0..1]: String
+ ts: Date
+}
+
+class ProcessMeasurement {
+ name[0..1]: String
+ phase[0..1] ; String
+ specialValues[0..1]: SpecialValues
+}
+
+class Program {
+ id: String
+ lastChangeDate[0..1]: Date
+ name[0..1]: String
+}
+
+class SpecialValue {
+ time[0..1]: Integer
+ name[0..1]: String
+ value:
+}
+
+ProcessPayload -- Device
+ProcessPayload -- Part
+ProcessPayload -- Process
+ProcessPayload "1" o-- "0..*" Measurement: Measurements
+
+Process -- Program
+
+Measurement -- Series
+Measurement "1" o-- "0..*" SpecialValue: SpecialValues
+
+Measurement <|-- ProcessMeasurement
+
+@enduml
\ No newline at end of file
diff --git a/website/static/logo.svg b/website/static/logo.svg
new file mode 100644
index 0000000..713a62c
--- /dev/null
+++ b/website/static/logo.svg
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+