From 659dddc072a03eaf446eb4ab48c42be918fac426 Mon Sep 17 00:00:00 2001 From: Alex Ebadirad Date: Mon, 28 Jan 2019 10:37:19 -0700 Subject: [PATCH] Feature/dhfprod 1703 Integration Test PR (#1797) * DHFPROD-1703 Initial refactor for new flow * DHFPROD-1740, Create 5.x FlowManager and refactor 4.x FlowManager to LegacyFlowManager (#1791) * Refactoring the 4.x FlowManager as LegacyFlowManager * Creating 5.x FlowManager, its implementation and unit test * Fixing the interface docs * Deleting project dir before tests * DHFPROD-156 Gradle task for new flow creation * DHFPROD-1703 fix tests * Cleanup test code * Make cleanup method static --- .../com/marklogic/hub/ApplicationConfig.java | 2 +- .../java/com/marklogic/hub/FlowManager.java | 95 +- .../java/com/marklogic/hub/HubConfig.java | 7 + .../java/com/marklogic/hub/HubProject.java | 7 + .../marklogic/hub/collector/Collector.java | 2 +- .../hub/collector/impl/CollectorImpl.java | 2 +- .../commands/LoadUserModulesCommand.java | 6 +- .../java/com/marklogic/hub/flow/Flow.java | 124 +- .../java/com/marklogic/hub/flow/FlowImpl.java | 63 + .../com/marklogic/hub/impl/DataHubImpl.java | 3 +- .../marklogic/hub/impl/FlowManagerImpl.java | 354 +- .../com/marklogic/hub/impl/HubConfigImpl.java | 6 +- .../marklogic/hub/impl/HubProjectImpl.java | 7 + .../marklogic/hub/impl/ScaffoldingImpl.java | 3 +- .../main/java/com/marklogic/hub/job/Job.java | 2 +- .../hub/legacy/LegacyFlowManager.java | 115 + .../hub/{ => legacy}/flow/CodeFormat.java | 2 +- .../hub/{ => legacy}/flow/DataFormat.java | 2 +- .../com/marklogic/hub/legacy/flow/Flow.java | 141 + .../hub/{ => legacy}/flow/FlowBuilder.java | 4 +- .../flow/FlowFinishedListener.java | 2 +- .../flow/FlowItemCompleteListener.java | 2 +- .../flow/FlowItemFailureListener.java | 2 +- .../hub/{ => legacy}/flow/FlowRunner.java | 2 +- .../{ => legacy}/flow/FlowStatusListener.java | 2 +- .../hub/{ => legacy}/flow/FlowType.java | 2 +- .../{ => legacy}/flow/RunFlowResponse.java | 2 +- .../hub/{ => legacy}/flow/impl/FlowImpl.java | 4 +- .../flow/impl/FlowRunnerImpl.java | 4 +- .../legacy/impl/LegacyFlowManagerImpl.java | 292 ++ .../com/marklogic/hub/main/MainPlugin.java | 2 +- .../hub/main/impl/MainPluginImpl.java | 2 +- .../marklogic/hub/scaffold/Scaffolding.java | 8 +- .../com/marklogic/hub/util/MlcpConsumer.java | 2 +- .../com/marklogic/hub/util/MlcpRunner.java | 4 +- .../resources/scaffolding/flowName.flow.json | 6 + .../java/com/marklogic/hub/HubTestBase.java | 9 +- .../test/java/com/marklogic/hub/PiiE2E.java | 9 +- .../com/marklogic/hub/ScaffoldingE2E.java | 6 +- .../hub/collector/EmptyCollectorTest.java | 2 +- .../com/marklogic/hub/core/DebugLibTest.java | 6 +- .../marklogic/hub/flow/FlowManagerTest.java | 433 +- .../com/marklogic/hub/job/JobManagerTest.java | 2 +- .../com/marklogic/hub/job/TracingTest.java | 4 +- .../hub/legacy/flow/FlowManagerTest.java | 438 ++ .../hub/{ => legacy}/flow/FlowRunnerTest.java | 2 +- .../hub/scaffolding/ScaffoldingTest.java | 6 +- .../scaffolding/ScaffoldingValidatorTest.java | 4 +- .../com/marklogic/hub/util/ComboListener.java | 6 +- .../hub_integration/EndToEndFlowTests.java | 6 +- .../marklogic/hub_integration/MappingE2E.java | 7 +- .../hub_integration/StreamCollectorTest.java | 6 +- .../flow-manager-test/test-flow.flow.json | 14 + .../src/trace-ui/package-lock.json | 4150 ++++++++--------- .../com/marklogic/gradle/DataHubPlugin.groovy | 12 +- .../FlowAlreadyPresentException.groovy | 9 + .../gradle/task/CreateFlowTask.groovy | 82 +- ...y => CreateHarmonizeLegacyFlowTask.groovy} | 4 +- ...roovy => CreateInputLegacyFlowTask.groovy} | 4 +- .../gradle/task/CreateLegacyFlowTask.groovy | 79 + .../com/marklogic/gradle/task/HubTask.groovy | 6 + .../marklogic/gradle/task/RunFlowTask.groovy | 10 +- .../gradle/task/UpdateHubTask.groovy | 4 +- .../gradle/task/CreateFlowTaskTest.groovy | 65 + .../marklogic/quickstart/model/FlowModel.java | 6 +- .../service/EntityManagerService.java | 2 +- .../service/FlowManagerService.java | 15 +- .../quickstart/web/EntitiesController.java | 4 +- .../E2ETestsRequestHelper.java | 6 +- .../integrationtests/EndToEndAPITest.java | 9 +- .../service/EntityManagerServiceTest.java | 6 +- .../service/FlowManagerServiceTest.java | 7 +- .../quickstart/service/TraceServiceTest.java | 8 +- .../web/EntitiesControllerTest.java | 6 +- 74 files changed, 3693 insertions(+), 3046 deletions(-) create mode 100644 marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowImpl.java create mode 100644 marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/LegacyFlowManager.java rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/CodeFormat.java (96%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/DataFormat.java (96%) create mode 100644 marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/Flow.java rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/FlowBuilder.java (96%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/FlowFinishedListener.java (94%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/FlowItemCompleteListener.java (95%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/FlowItemFailureListener.java (95%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/FlowRunner.java (99%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/FlowStatusListener.java (96%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/FlowType.java (96%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/RunFlowResponse.java (96%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/impl/FlowImpl.java (99%) rename marklogic-data-hub/src/main/java/com/marklogic/hub/{ => legacy}/flow/impl/FlowRunnerImpl.java (99%) create mode 100644 marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/impl/LegacyFlowManagerImpl.java create mode 100644 marklogic-data-hub/src/main/resources/scaffolding/flowName.flow.json create mode 100644 marklogic-data-hub/src/test/java/com/marklogic/hub/legacy/flow/FlowManagerTest.java rename marklogic-data-hub/src/test/java/com/marklogic/hub/{ => legacy}/flow/FlowRunnerTest.java (99%) create mode 100644 marklogic-data-hub/src/test/resources/flow-manager-test/test-flow.flow.json create mode 100644 ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/exception/FlowAlreadyPresentException.groovy rename ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/{CreateHarmonizeFlowTask.groovy => CreateHarmonizeLegacyFlowTask.groovy} (87%) rename ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/{CreateInputFlowTask.groovy => CreateInputLegacyFlowTask.groovy} (87%) create mode 100644 ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateLegacyFlowTask.groovy create mode 100644 ml-data-hub-plugin/src/test/groovy/com/marklogic/gradle/task/CreateFlowTaskTest.groovy diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/ApplicationConfig.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/ApplicationConfig.java index 0237b67652..ba348b119b 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/ApplicationConfig.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/ApplicationConfig.java @@ -11,7 +11,7 @@ * This application configuration is an entry point to using the DHF from a set property */ @Configuration -@ComponentScan(basePackages = {"com.marklogic.hub.impl", "com.marklogic.hub.deploy.commands"}) +@ComponentScan(basePackages = {"com.marklogic.hub.impl", "com.marklogic.hub.legacy.impl", "com.marklogic.hub.deploy.commands"}) @EnableAutoConfiguration public class ApplicationConfig { diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/FlowManager.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/FlowManager.java index f13d01f67b..c5e65295fc 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/FlowManager.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/FlowManager.java @@ -16,100 +16,79 @@ package com.marklogic.hub; +import com.fasterxml.jackson.databind.JsonNode; +import com.marklogic.hub.error.DataHubProjectException; import com.marklogic.hub.flow.Flow; -import com.marklogic.hub.flow.FlowRunner; -import com.marklogic.hub.flow.FlowType; -import com.marklogic.hub.flow.impl.FlowImpl; -import org.w3c.dom.Element; -import java.nio.file.Path; import java.util.List; /** - * Manages existing flows and creates flow runners to execute flows. + * Manages CRUD operations for flows */ public interface FlowManager { /** - * Turns an XML document into a flow - * @param doc - the xml document representing a flow - * @return a Flow instance + * String value for the flow file extension */ - static Flow flowFromXml(Element doc) { - return FlowImpl.fromXml(doc); - } + String FLOW_FILE_EXTENSION = ".flow.json"; /** - * retrieves a list of all the flows on the local files systems - * @return a list of Flows + * Retrieves a named flow + * @param flowName - name of the flow + * @return a flow object */ - List getLocalFlows(); + Flow getFlow(String flowName); /** - * retrieves a list of all the flows on the local files systems - * @param entityName - string name of the entity for the flow - * @return a list of Flows + * Returns a flow based on the provided name as JSON string + * @param flowName - name of the flow + * @return string json representation of the flow object */ - List getLocalFlowsForEntity(String entityName); + String getFlowAsJSON(String flowName); /** - * retrieves a list of all the flows on the local files systems - * @param entityName - string name of the entity for the flow - * @param flowType - the FlowType enum, eg: ingest or harmonize - * @return a list of Flows + * Retrieves a list of flows installed on the MarkLogic server + * @return - a list of all flows */ - List getLocalFlowsForEntity(String entityName, FlowType flowType); + List getFlows(); /** - * Obtains a flow from a property file - * @param propertiesFile - the Path to the property file - * @return - a flow object + * Retrieves a list of names of flows installed on the MarkLogic server + * @return - a list of names of all flows */ - Flow getFlowFromProperties(Path propertiesFile); + List getFlowNames(); /** - * Retrieves a list of flows installed on the MarkLogic server - * @param entityName - the entity from which to fetch the flows - * @return - a list of flows for the given entity + * Creates a flow + * @param flowName - name of the flow */ - List getFlows(String entityName); + Flow createFlow(String flowName); /** - * Retrieves a named flow from a given entity - * - * @param entityName - the entity that the flow belongs to - * @param flowName - the name of the flow to get - * @return the flow + * Creates a flow from a given JSON string + * @param json - string representation of the flow + * @return - a Flow object */ - Flow getFlow(String entityName, String flowName); + Flow createFlowFromJSON(String json); /** - * Retrieves a named flow from a given entity - * - * @param entityName - the entity that the flow belongs to - * @param flowName - the name of the flow to get - * @param flowType - the type of flow (ingest/harmonize) - * @return the flow + * Creates a flow from a given JsonNode + * @param json - JsonNode representation of the flow + * @return - a Flow object */ - Flow getFlow(String entityName, String flowName, FlowType flowType); + Flow createFlowFromJSON(JsonNode json); /** - * Updates the indexes in the database based on the project - * @return - a list of names for all the flows that are legacy + * Deletes a flow + * @param flowName - name of the flow */ - - List getLegacyFlows(); + void deleteFlow(String flowName); /** - * Sets the version that the legacy flow is to be updated from - * @param fromVersion - string representation of DHF version - * @return a list of updated flow names that were updated + * Saves a flow to disk + * @param flow - the flow object to be saved */ - List updateLegacyFlows(String fromVersion); + void saveFlow(Flow flow); + - /** - * Creates and returns a new FlowRunner object using the FlowManager's hubconfig - * @return FlowRunner object with current hubconfig already set - */ - FlowRunner newFlowRunner(); } diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/HubConfig.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/HubConfig.java index 83d2c4039b..e11af8242e 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/HubConfig.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/HubConfig.java @@ -471,6 +471,13 @@ public interface HubConfig { */ Path getEntityDatabaseDir(); + /** + * Gets the path for the flows directory + * + * @return the path for the flows directory + */ + Path getFlowsDir(); + /** * Returns the current AppConfig object attached to the HubConfig * @return Returns current AppConfig object set for HubConfig diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/HubProject.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/HubProject.java index 1e69d1ca65..a63c2b75e7 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/HubProject.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/HubProject.java @@ -149,6 +149,13 @@ public interface HubProject { */ Path getEntityDatabaseDir(); + /** + * Gets the path for the flows directory + * + * @return the path for the flows directory + */ + Path getFlowsDir(); + /** * Gets the path for the hub staging modules * diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/collector/Collector.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/collector/Collector.java index c06dc2035e..20110be792 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/collector/Collector.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/collector/Collector.java @@ -17,7 +17,7 @@ import com.marklogic.client.DatabaseClient; import com.marklogic.hub.HubConfig; -import com.marklogic.hub.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.CodeFormat; import java.util.Map; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/collector/impl/CollectorImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/collector/impl/CollectorImpl.java index ee664a7ca4..d654caf74b 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/collector/impl/CollectorImpl.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/collector/impl/CollectorImpl.java @@ -23,7 +23,7 @@ import com.marklogic.hub.HubConfig; import com.marklogic.hub.collector.Collector; import com.marklogic.hub.collector.DiskQueue; -import com.marklogic.hub.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.CodeFormat; import com.marklogic.hub.impl.HubConfigImpl; import com.marklogic.rest.util.MgmtResponseErrorHandler; import org.apache.http.auth.AuthScope; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/deploy/commands/LoadUserModulesCommand.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/deploy/commands/LoadUserModulesCommand.java index 9c7c4d4148..a0c4639a77 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/deploy/commands/LoadUserModulesCommand.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/deploy/commands/LoadUserModulesCommand.java @@ -30,11 +30,11 @@ import com.marklogic.client.io.Format; import com.marklogic.client.io.StringHandle; import com.marklogic.hub.EntityManager; -import com.marklogic.hub.FlowManager; +import com.marklogic.hub.legacy.LegacyFlowManager; import com.marklogic.hub.HubConfig; import com.marklogic.hub.deploy.util.HubFileFilter; import com.marklogic.hub.error.LegacyFlowsException; -import com.marklogic.hub.flow.Flow; +import com.marklogic.hub.legacy.flow.Flow; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; @@ -63,7 +63,7 @@ public class LoadUserModulesCommand extends LoadModulesCommand { private EntityManager entityManager; @Autowired - private FlowManager flowManager; + private LegacyFlowManager flowManager; private DocumentPermissionsParser documentPermissionsParser = new DefaultDocumentPermissionsParser(); private ThreadPoolTaskExecutor threadPoolTaskExecutor; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/Flow.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/Flow.java index e5f5962ef9..3283f4d569 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/Flow.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/Flow.java @@ -15,127 +15,35 @@ */ package com.marklogic.hub.flow; -import com.marklogic.hub.collector.Collector; -import com.marklogic.hub.main.MainPlugin; +import com.fasterxml.jackson.databind.JsonNode; -import java.util.Properties; - -/** - * Manages the creation and configuration of flow objects - */ public interface Flow { - - /** - * Sets the entity name for the flow - * @param entityName the string name of the entity to use in the flow - */ - void setEntityName(String entityName); - - /** - * Returns the name of the entity that's been set for the flow in strong form - * @return entity name in string form - */ - String getEntityName(); - - /** - * Sets the name of the flow - * @param name - string representing the name of the flow - */ - void setName(String name); - /** - * Gets the name of the flow - * @return the name of the flow in string form + * Returns the name of the flow + * + * @return a flow name */ String getName(); /** - * Sets the mapping name used to generate the flow - * @param mappingName - string representing the mapping name for the flow - */ - void setMappingName(String mappingName); - - /** - * Gets the mapping name used for the flow - * @return the mapping name of the flow in string form - */ - String getMappingName(); - - /** - * Sets the type of the flow - * @param type - FlowType enum for harmonize or input - */ - void setType(FlowType type); - - /** - * Gets the FlowType enum for the flow - * @return FlowType of ingest or harmonize - */ - FlowType getType(); - - /** - * Sets the DataFormat for the flow - * @param dataFormat - DataFormat enum of json or xml - */ - void setDataFormat(DataFormat dataFormat); - - /** - * Returns the DataForm enum of the flow - * @return DataForm enum of json or xml - */ - DataFormat getDataFormat(); - - /** - * Sets the CodeFormat enum of the flow - * @param codeFormat enum of sjs or xqy - */ - void setCodeFormat(CodeFormat codeFormat); - - /** - * Returns the CodeFormat enum of the flow - * @return CodeFormat enum of sjs or xqy + * Sets the name of the flow + * + * @param flowName - a flow name */ - CodeFormat getCodeFormat(); + void setName(String flowName); /** - * Serializes the flow into an xml string - * @return a serialized xml string of the flow + * Serializes the flow as a json string + * + * @return the serialized JSON string */ String serialize(); /** - * Creates a properties object representing the flow - * @return a Properties object representation of the flow - */ - Properties toProperties(); - - /** - * Gets the DbPath (uri) for the flow in string form - * @return a uri path as a string - */ - String getFlowDbPath(); - - /** - * Gets the collector to be used for the flow - * @return the collector object that is used for the flow - */ - Collector getCollector(); - - /** - * Sets the collector to be used for the flow - * @param collector the collector to be used for the flow - */ - void setCollector(Collector collector); - - /** - * Gets the main plugin module that the flow is set to use - * @return MainPlugin object - */ - MainPlugin getMain(); - - /** - * Sets the main plugin module for the flow - * @param main - a MainPlugin object that defines the main plugin to be used + * Deserialize a json response and applies it to this flow + * + * @param json - the JsonNode you want deserialize + * @return this mapping */ - void setMain(MainPlugin main); + Flow deserialize(JsonNode json); } diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowImpl.java new file mode 100644 index 0000000000..81f1bc8a0f --- /dev/null +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowImpl.java @@ -0,0 +1,63 @@ +/* + * Copyright 2012-2019 MarkLogic Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.marklogic.hub.flow; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.marklogic.hub.error.DataHubProjectException; + +public class FlowImpl implements Flow { + private String name; + // Storing the entire JSON node for serialization; + private JsonNode rawValue; + + public String getName() { return this.name; } + + public void setName(String flowName) { this.name = flowName; } + + @Override + public String serialize() { + ObjectMapper mapper = new ObjectMapper(); + // Using this approach, as we aren't de-serializing all data into Java Objects + if (rawValue != null) { + ObjectNode objNode = mapper.createObjectNode(); + rawValue.fields().forEachRemaining((field) -> { + objNode.set(field.getKey(), field.getValue()); + }); + // Setters should be serialized into JSON + objNode.put("name", this.name); + return objNode.toString(); + } else { + try { + return mapper.writeValueAsString(this); + } + catch (JsonProcessingException e) { + throw new DataHubProjectException("Unable to serialize flow object."); + } + } + } + + @Override + public Flow deserialize(JsonNode json) { + this.rawValue = json; + if (json.has("name")) { + setName(json.get("name").asText()); + } + return this; + } +} diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/DataHubImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/DataHubImpl.java index 9fab06cb40..0f3ad808a3 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/DataHubImpl.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/DataHubImpl.java @@ -45,6 +45,7 @@ import com.marklogic.hub.deploy.util.CMASettings; import com.marklogic.hub.deploy.util.HubDeployStatusListener; import com.marklogic.hub.error.*; +import com.marklogic.hub.legacy.impl.LegacyFlowManagerImpl; import com.marklogic.mgmt.ManageClient; import com.marklogic.mgmt.admin.AdminManager; import com.marklogic.mgmt.resource.appservers.ServerManager; @@ -98,7 +99,7 @@ public class DataHubImpl implements DataHub { private Versions versions; @Autowired - private FlowManagerImpl flowManager; + private LegacyFlowManagerImpl flowManager; private AdminManager _adminManager; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/FlowManagerImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/FlowManagerImpl.java index 287836d116..de84a802e5 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/FlowManagerImpl.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/FlowManagerImpl.java @@ -13,280 +13,180 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.marklogic.hub.impl; -import com.marklogic.client.DatabaseClient; -import com.marklogic.client.extensions.ResourceManager; -import com.marklogic.client.extensions.ResourceServices.ServiceResult; -import com.marklogic.client.extensions.ResourceServices.ServiceResultIterator; -import com.marklogic.client.io.DOMHandle; -import com.marklogic.client.util.RequestParameters; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.marklogic.hub.FlowManager; import com.marklogic.hub.HubConfig; -import com.marklogic.hub.collector.impl.CollectorImpl; -import com.marklogic.hub.flow.*; -import com.marklogic.hub.flow.impl.FlowRunnerImpl; -import com.marklogic.hub.main.impl.MainPluginImpl; -import com.marklogic.hub.scaffold.Scaffolding; +import com.marklogic.hub.error.DataHubProjectException; +import com.marklogic.hub.flow.Flow; +import com.marklogic.hub.flow.FlowImpl; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; +import java.io.*; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; -import java.util.Properties; -import java.util.regex.Pattern; +import java.util.stream.Collectors; @Component -public class FlowManagerImpl extends ResourceManager implements FlowManager { - - private static final String NAME = "ml:flow"; - - private DatabaseClient stagingClient; - +public class FlowManagerImpl implements FlowManager { @Autowired private HubConfig hubConfig; - @Autowired - private Scaffolding scaffolding; - - public FlowManagerImpl() { - super(); - } - - - public void setupClient() { - this.stagingClient = hubConfig.newStagingClient(); - this.stagingClient.init(NAME, this); - } - - @Override public List getLocalFlows() { - List flows = new ArrayList<>(); - - Path entitiesDir = hubConfig.getHubEntitiesDir(); - File[] entities = entitiesDir.toFile().listFiles((pathname -> pathname.isDirectory())); - if (entities != null) { - for (File entity : entities) { - String entityName = entity.getName(); - flows.addAll(getLocalFlowsForEntity(entityName)); - } + @Override + public Flow getFlow(String flowName) { + Path flowPath = Paths.get(hubConfig.getFlowsDir().toString(), flowName + FLOW_FILE_EXTENSION); + FileInputStream fileInputStream = null; + try { + fileInputStream = FileUtils.openInputStream(flowPath.toFile()); + } catch (IOException e) { + // return null if it doesn't exist, so we can check for it. + return null; } - return flows; - } - - @Override public List getLocalFlowsForEntity(String entityName) { - return getLocalFlowsForEntity(entityName, null); - } - - @Override public List getLocalFlowsForEntity(String entityName, FlowType flowType) { - - List flows = new ArrayList<>(); - Path entitiesDir = hubConfig.getHubEntitiesDir(); - Path entityDir = entitiesDir.resolve(entityName); - Path inputDir = entityDir.resolve("input"); - Path harmonizeDir = entityDir.resolve("harmonize"); - boolean getInputFlows = false; - boolean getHarmonizeFlows = false; - if (flowType == null) { - getInputFlows = getHarmonizeFlows = true; + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode node; + try { + node = objectMapper.readTree(fileInputStream); + } catch (IOException e) { + throw new DataHubProjectException("Unable to read flow: " + e.getMessage()); } - else if (flowType.equals(FlowType.INPUT)) { - getInputFlows = true; + Flow newFlow = createFlowFromJSON(node); + if(newFlow != null && newFlow.getName().length() > 0){ + return newFlow; } - else if (flowType.equals(FlowType.HARMONIZE)) { - getHarmonizeFlows = true; + else { + throw new DataHubProjectException(flowName +" is not a valid flow"); } - if (getInputFlows) { - File[] inputFlows = inputDir.toFile().listFiles((pathname) -> pathname.isDirectory() && !pathname.getName().equals("REST")); - if (inputFlows != null) { - for (File inputFlow : inputFlows) { - Flow flow = getLocalFlow(entityName, inputFlow.toPath(), FlowType.INPUT); - if (flow != null) { - flows.add(flow); - } - } - } - } + } - if (getHarmonizeFlows) { - File[] harmonizeFlows = harmonizeDir.toFile().listFiles((pathname) -> pathname.isDirectory() && !pathname.getName().equals("REST")); - if (harmonizeFlows != null) { - for (File harmonizeFlow : harmonizeFlows) { - Flow flow = getLocalFlow(entityName, harmonizeFlow.toPath(), FlowType.HARMONIZE); - if (flow != null) { - flows.add(flow); - } + @Override + public String getFlowAsJSON(String flowName) { + return getFlow(flowName).serialize(); + } - } - } + @Override + public List getFlows() { + List flowNames = getFlowNames(); + List flows = new ArrayList<>(); + for(String flow : flowNames){ + flows.add(getFlow(flow)); } return flows; } - @Override public Flow getFlowFromProperties(Path propertiesFile) { - String quotedSeparator = Pattern.quote(File.separator); - /* Extract flowName and entityName from ..../plugins/entities// - * input|harmonize//flowName.properties - */ - String floweRegex = ".+" + "plugins" + quotedSeparator + "entities" + quotedSeparator + "(.+)"+ quotedSeparator - +"(input|harmonize)" + quotedSeparator + "(.+)" + quotedSeparator + ".+"; - FlowType flowType = propertiesFile.toString().replaceAll(floweRegex, "$2").equals("input") - ? FlowType.INPUT : FlowType.HARMONIZE; + @Override + public List getFlowNames() { + // Get all the files with flow.json extension from flows dir + List files = (List) FileUtils.listFiles(hubConfig.getFlowsDir().toFile(), new String[] {"flow.json"} , false ); + List flowNames = files.stream().map(f ->{ + String fileName = f.getName(); + fileName = fileName.replaceAll("(.+)\\.flow\\.json" , "$1"); + return fileName; + }).collect(Collectors.toList()); + + return flowNames; + } - String entityName = propertiesFile.toString().replaceAll(floweRegex, "$1"); - return getLocalFlow(entityName, propertiesFile.getParent(), flowType); + @Override + public Flow createFlow(String flowName) { + Flow flow = createFlowFromJSON(getFlowScaffolding()); + flow.setName(flowName); + return flow; } - private Flow getLocalFlow(String entityName, Path flowDir, FlowType flowType) { + @Override + public Flow createFlowFromJSON(String json) { + ObjectMapper mapper = new ObjectMapper(); + JsonNode node = null; try { - String flowName = flowDir.getFileName().toString(); - File propertiesFile = flowDir.resolve(flowName + ".properties").toFile(); - if (propertiesFile.exists()) { - Properties properties = new Properties(); - FileInputStream fis = new FileInputStream(propertiesFile); - properties.load(fis); - - // trim trailing whitespaces for properties. - for (String key : properties.stringPropertyNames()){ - properties.put(key, properties.get(key).toString().trim()); - } - fis.close(); - - FlowBuilder flowBuilder = FlowBuilder.newFlow() - .withEntityName(entityName) - .withName(flowName) - .withType(flowType) - .withCodeFormat(CodeFormat.getCodeFormat((String) properties.get("codeFormat"))) - .withDataFormat(DataFormat.getDataFormat((String) properties.get("dataFormat"))) - .withMain(new MainPluginImpl((String) properties.get("mainModule"), CodeFormat.getCodeFormat((String) properties.get("mainCodeFormat")))); - - if (flowType.equals(FlowType.HARMONIZE)) { - flowBuilder.withCollector(new CollectorImpl((String) properties.get("collectorModule"), CodeFormat.getCodeFormat((String) properties.get("collectorCodeFormat")))); - } + node = mapper.readValue(json, JsonNode.class); + } catch (JsonParseException e) { + throw new DataHubProjectException("Unable to parse flow json string : "+ e.getMessage()); + } catch (JsonMappingException e1) { + throw new DataHubProjectException("Unable to parse flow json string : "+ e1.getMessage()); + } catch (IOException e2) { + throw new DataHubProjectException("Unable to parse flow json string : "+ e2.getMessage()); + } + return createFlowFromJSON(node); + } - return flowBuilder.build(); - } - } - catch(Exception e) { - e.printStackTrace(); - } - return null; + @Override + public Flow createFlowFromJSON(JsonNode json) { + Flow flow = new FlowImpl(); + flow.deserialize(json); + return flow; } - @Override public List getFlows(String entityName) { - RequestParameters params = new RequestParameters(); - params.add("entity-name", entityName); - ServiceResultIterator resultItr = this.getServices().get(params); - if (resultItr == null || ! resultItr.hasNext()) { - return null; + @Override + public void deleteFlow(String flowName) { + File flowFile = Paths.get(hubConfig.getFlowsDir().toString(), flowName + FLOW_FILE_EXTENSION).toFile(); + if (flowFile.exists()) { + try { + FileUtils.forceDelete(flowFile); + } catch (IOException e){ + throw new DataHubProjectException("Could not delete flow "+ flowName); + } } - ServiceResult res = resultItr.next(); - DOMHandle handle = new DOMHandle(); - Document parent = res.getContent(handle).get(); - NodeList children = parent.getDocumentElement().getChildNodes(); - - ArrayList flows = null; - if (children.getLength() > 0) { - flows = new ArrayList<>(); + else { + throw new DataHubProjectException("The specified flow doesn't exist."); } - Node node; - for (int i = 0; i < children.getLength(); i++) { - node = children.item(i); - if (node.getNodeType() == Node.ELEMENT_NODE) { - flows.add(FlowManager.flowFromXml((Element)children.item(i))); - } - } - return flows; } - @Override public Flow getFlow(String entityName, String flowName) { - return getFlow(entityName, flowName, null); - } + @Override + public void saveFlow(Flow flow) { + String flowString = flow.serialize(); + String flowFileName = flow.getName() + FLOW_FILE_EXTENSION; + File file = Paths.get(hubConfig.getFlowsDir().toString(), flowFileName).toFile(); + ObjectNode rootNode; + FileOutputStream fileOutputStream = null; + ObjectMapper objectMapper = new ObjectMapper(); - @Override public Flow getFlow(String entityName, String flowName, FlowType flowType) { - RequestParameters params = new RequestParameters(); - params.add("entity-name", entityName); - params.add("flow-name", flowName); - if (flowType != null) { - params.add("flow-type", flowType.toString()); + try { + rootNode = (ObjectNode)objectMapper.readTree(flowString); + objectMapper.enable(SerializationFeature.INDENT_OUTPUT); + fileOutputStream = new FileOutputStream(file); + fileOutputStream.write(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode).getBytes()); + fileOutputStream.flush(); + fileOutputStream.close(); } - ServiceResultIterator resultItr = this.getServices().get(params); - if (resultItr == null || ! resultItr.hasNext()) { - return null; + catch (JsonProcessingException e) { + throw new DataHubProjectException("Could not serialize flow."); } - ServiceResult res = resultItr.next(); - DOMHandle handle = new DOMHandle(); - Document parent = res.getContent(handle).get(); - return FlowManager.flowFromXml(parent.getDocumentElement()); - } - - @Override public List getLegacyFlows() { - List oldFlows = new ArrayList<>(); - Path entitiesDir = hubConfig.getHubEntitiesDir(); - - File[] entityDirs = entitiesDir.toFile().listFiles(pathname -> pathname.isDirectory()); - if (entityDirs != null) { - for (File entityDir : entityDirs) { - Path inputDir = entityDir.toPath().resolve("input"); - Path harmonizeDir = entityDir.toPath().resolve("harmonize"); - - File[] inputFlows = inputDir.toFile().listFiles((pathname) -> pathname.isDirectory() && !pathname.getName().equals("REST")); - addLegacyFlowToList(oldFlows, entityDir, inputFlows); - - File[] harmonizeFlows = harmonizeDir.toFile().listFiles((pathname) -> pathname.isDirectory() && !pathname.getName().equals("REST")); - addLegacyFlowToList(oldFlows, entityDir, harmonizeFlows); - } + catch (IOException e) { + throw new DataHubProjectException("Could not save flow to disk."); } - - return oldFlows; } - private void addLegacyFlowToList(List oldFlows, File entityDir, File[] flows) { - if (flows != null) { - for (File flow : flows) { - File[] mainFiles = flow.listFiles((dir, name) -> name.matches("main\\.(sjs|xqy)")); - File[] flowFiles = flow.listFiles((dir, name) -> name.matches(flow.getName() + "\\.xml")); - if (mainFiles.length < 1 && flowFiles.length == 1) { - oldFlows.add(entityDir.getName() + " => " + flow.getName()); - } else if (mainFiles.length == 1 && mainFiles[0].getName().contains(".sjs")) { - try { - String mainFile = FileUtils.readFileToString(mainFiles[0]); - if (mainFile.contains("dhf.xqy")) { - oldFlows.add(entityDir.getName() + " => " + flow.getName()); - } - } - catch(IOException e) {} - } + private JsonNode flowScaffolding = null; + + private JsonNode getFlowScaffolding() { + if (flowScaffolding != null) { + return flowScaffolding; + } else { + String flowScaffoldingSrcFile = "scaffolding/flowName.flow.json"; + InputStream inputStream = FlowManagerImpl.class.getClassLoader() + .getResourceAsStream(flowScaffoldingSrcFile); + ObjectMapper objectMapper = new ObjectMapper(); + try { + this.flowScaffolding = objectMapper.readTree(inputStream); + return this.flowScaffolding; + } catch (IOException e) { + throw new DataHubProjectException("Unable to parse flow json string : "+ e.getMessage()); } } } - - @Override public List updateLegacyFlows(String fromVersion) { - - List updatedFlows = new ArrayList<>(); - File[] entityDirs = hubConfig.getHubEntitiesDir().toFile().listFiles(pathname -> pathname.isDirectory()); - if (entityDirs != null) { - for (File entityDir : entityDirs) { - updatedFlows.addAll(scaffolding.updateLegacyFlows(fromVersion, entityDir.getName())); - } - } - - return updatedFlows; - } - - @Override public FlowRunner newFlowRunner() { - return new FlowRunnerImpl(hubConfig); - } - } diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/HubConfigImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/HubConfigImpl.java index 25055a87a8..80bffe436c 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/HubConfigImpl.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/HubConfigImpl.java @@ -32,6 +32,7 @@ import com.marklogic.hub.error.DataHubConfigurationException; import com.marklogic.hub.error.DataHubProjectException; import com.marklogic.hub.error.InvalidDBOperationError; +import com.marklogic.hub.legacy.impl.LegacyFlowManagerImpl; import com.marklogic.hub.processes.Process; import com.marklogic.mgmt.DefaultManageConfigFactory; import com.marklogic.mgmt.ManageClient; @@ -78,7 +79,7 @@ public class HubConfigImpl implements HubConfig Properties projectProperties = null; @Autowired - FlowManagerImpl flowManager; + LegacyFlowManagerImpl flowManager; @Autowired DataHubImpl dataHub; @Autowired @@ -1581,6 +1582,9 @@ public Path getProcessDir(Process.ProcessType type) { return hubProject.getEntityDatabaseDir(); } + @Override + public Path getFlowsDir() { return hubProject.getFlowsDir(); } + @JsonIgnore @Override public Path getUserServersDir() { return hubProject.getUserServersDir(); diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/HubProjectImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/HubProjectImpl.java index f4fa6e2069..ebad3548da 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/HubProjectImpl.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/HubProjectImpl.java @@ -167,6 +167,10 @@ public Path getProcessDir(Process.ProcessType type) { return getEntityConfigDir().resolve("databases"); } + @Override public Path getFlowsDir() { + return this.projectDir.resolve("flows"); + } + @Override public Path getHubStagingModulesDir() { return this.projectDir.resolve(MODULES_DIR); } @@ -296,6 +300,9 @@ public Path getProcessDir(Process.ProcessType type) { getUserDatabaseDir().resolve(customTokens.get("%%mlStagingSchemasDbName%%")).resolve("schemas").toFile().mkdirs(); getUserSchemasDir().toFile().mkdirs(); + //create flow dir + getFlowsDir().toFile().mkdirs(); + //create hub triggers Path hubTriggersDir = getHubTriggersDir(); hubTriggersDir.toFile().mkdirs(); diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/ScaffoldingImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/ScaffoldingImpl.java index 75368accb8..3900425f49 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/ScaffoldingImpl.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/impl/ScaffoldingImpl.java @@ -24,7 +24,7 @@ import com.marklogic.hub.HubProject; import com.marklogic.hub.collector.impl.CollectorImpl; import com.marklogic.hub.error.ScaffoldingValidationException; -import com.marklogic.hub.flow.*; +import com.marklogic.hub.legacy.flow.*; import com.marklogic.hub.main.impl.MainPluginImpl; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; @@ -38,7 +38,6 @@ import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import javax.annotation.PostConstruct; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/job/Job.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/job/Job.java index a840ddf152..f59a23ea35 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/job/Job.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/job/Job.java @@ -16,7 +16,7 @@ package com.marklogic.hub.job; import com.marklogic.client.pojo.annotation.Id; -import com.marklogic.hub.flow.Flow; +import com.marklogic.hub.legacy.flow.Flow; import java.util.ArrayList; import java.util.Date; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/LegacyFlowManager.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/LegacyFlowManager.java new file mode 100644 index 0000000000..5a2d409e3c --- /dev/null +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/LegacyFlowManager.java @@ -0,0 +1,115 @@ +/* + * Copyright 2012-2019 MarkLogic Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.marklogic.hub.legacy; + +import com.marklogic.hub.legacy.flow.Flow; +import com.marklogic.hub.legacy.flow.FlowRunner; +import com.marklogic.hub.legacy.flow.FlowType; +import com.marklogic.hub.legacy.flow.impl.FlowImpl; +import org.w3c.dom.Element; + +import java.nio.file.Path; +import java.util.List; + +/** + * Manages existing flows and creates flow runners to execute flows. + */ +public interface LegacyFlowManager { + + /** + * Turns an XML document into a flow + * @param doc - the xml document representing a flow + * @return a Flow instance + */ + static Flow flowFromXml(Element doc) { + return FlowImpl.fromXml(doc); + } + + /** + * retrieves a list of all the flows on the local files systems + * @return a list of Flows + */ + List getLocalFlows(); + + /** + * retrieves a list of all the flows on the local files systems + * @param entityName - string name of the entity for the flow + * @return a list of Flows + */ + List getLocalFlowsForEntity(String entityName); + + /** + * retrieves a list of all the flows on the local files systems + * @param entityName - string name of the entity for the flow + * @param flowType - the FlowType enum, eg: ingest or harmonize + * @return a list of Flows + */ + List getLocalFlowsForEntity(String entityName, FlowType flowType); + + /** + * Obtains a flow from a property file + * @param propertiesFile - the Path to the property file + * @return - a flow object + */ + Flow getFlowFromProperties(Path propertiesFile); + + /** + * Retrieves a list of flows installed on the MarkLogic server + * @param entityName - the entity from which to fetch the flows + * @return - a list of flows for the given entity + */ + List getFlows(String entityName); + + /** + * Retrieves a named flow from a given entity + * + * @param entityName - the entity that the flow belongs to + * @param flowName - the name of the flow to get + * @return the flow + */ + Flow getFlow(String entityName, String flowName); + + /** + * Retrieves a named flow from a given entity + * + * @param entityName - the entity that the flow belongs to + * @param flowName - the name of the flow to get + * @param flowType - the type of flow (ingest/harmonize) + * @return the flow + */ + Flow getFlow(String entityName, String flowName, FlowType flowType); + + /** + * Updates the indexes in the database based on the project + * @return - a list of names for all the flows that are legacy + */ + + List getLegacyFlows(); + + /** + * Sets the version that the legacy flow is to be updated from + * @param fromVersion - string representation of DHF version + * @return a list of updated flow names that were updated + */ + List updateLegacyFlows(String fromVersion); + + /** + * Creates and returns a new FlowRunner object using the FlowManager's hubconfig + * @return FlowRunner object with current hubconfig already set + */ + FlowRunner newFlowRunner(); +} diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/CodeFormat.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/CodeFormat.java similarity index 96% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/CodeFormat.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/CodeFormat.java index dcb83d419d..3124b5f67a 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/CodeFormat.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/CodeFormat.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; public enum CodeFormat { JAVASCRIPT("sjs"), XQUERY("xqy"); diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/DataFormat.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/DataFormat.java similarity index 96% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/DataFormat.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/DataFormat.java index 753854077f..443671b7e0 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/DataFormat.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/DataFormat.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; public enum DataFormat { XML("xml"), JSON("json"); diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/Flow.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/Flow.java new file mode 100644 index 0000000000..3b7275d2cc --- /dev/null +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/Flow.java @@ -0,0 +1,141 @@ +/* + * Copyright 2012-2019 MarkLogic Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.marklogic.hub.legacy.flow; + +import com.marklogic.hub.collector.Collector; +import com.marklogic.hub.main.MainPlugin; + +import java.util.Properties; + +/** + * Manages the creation and configuration of flow objects + */ +public interface Flow { + + /** + * Sets the entity name for the flow + * @param entityName the string name of the entity to use in the flow + */ + void setEntityName(String entityName); + + /** + * Returns the name of the entity that's been set for the flow in strong form + * @return entity name in string form + */ + String getEntityName(); + + /** + * Sets the name of the flow + * @param name - string representing the name of the flow + */ + void setName(String name); + + /** + * Gets the name of the flow + * @return the name of the flow in string form + */ + String getName(); + + /** + * Sets the mapping name used to generate the flow + * @param mappingName - string representing the mapping name for the flow + */ + void setMappingName(String mappingName); + + /** + * Gets the mapping name used for the flow + * @return the mapping name of the flow in string form + */ + String getMappingName(); + + /** + * Sets the type of the flow + * @param type - FlowType enum for harmonize or input + */ + void setType(FlowType type); + + /** + * Gets the FlowType enum for the flow + * @return FlowType of ingest or harmonize + */ + FlowType getType(); + + /** + * Sets the DataFormat for the flow + * @param dataFormat - DataFormat enum of json or xml + */ + void setDataFormat(DataFormat dataFormat); + + /** + * Returns the DataForm enum of the flow + * @return DataForm enum of json or xml + */ + DataFormat getDataFormat(); + + /** + * Sets the CodeFormat enum of the flow + * @param codeFormat enum of sjs or xqy + */ + void setCodeFormat(CodeFormat codeFormat); + + /** + * Returns the CodeFormat enum of the flow + * @return CodeFormat enum of sjs or xqy + */ + CodeFormat getCodeFormat(); + + /** + * Serializes the flow into an xml string + * @return a serialized xml string of the flow + */ + String serialize(); + + /** + * Creates a properties object representing the flow + * @return a Properties object representation of the flow + */ + Properties toProperties(); + + /** + * Gets the DbPath (uri) for the flow in string form + * @return a uri path as a string + */ + String getFlowDbPath(); + + /** + * Gets the collector to be used for the flow + * @return the collector object that is used for the flow + */ + Collector getCollector(); + + /** + * Sets the collector to be used for the flow + * @param collector the collector to be used for the flow + */ + void setCollector(Collector collector); + + /** + * Gets the main plugin module that the flow is set to use + * @return MainPlugin object + */ + MainPlugin getMain(); + + /** + * Sets the main plugin module for the flow + * @param main - a MainPlugin object that defines the main plugin to be used + */ + void setMain(MainPlugin main); +} diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowBuilder.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowBuilder.java similarity index 96% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowBuilder.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowBuilder.java index 26cfa7a571..d7c6fda93a 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowBuilder.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowBuilder.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; import com.marklogic.hub.collector.Collector; import com.marklogic.hub.collector.impl.CollectorImpl; -import com.marklogic.hub.flow.impl.FlowImpl; +import com.marklogic.hub.legacy.flow.impl.FlowImpl; import com.marklogic.hub.main.MainPlugin; import com.marklogic.hub.main.impl.MainPluginImpl; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowFinishedListener.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowFinishedListener.java similarity index 94% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowFinishedListener.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowFinishedListener.java index 768b0b29e9..f55873fde7 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowFinishedListener.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowFinishedListener.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; public interface FlowFinishedListener { /** diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowItemCompleteListener.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowItemCompleteListener.java similarity index 95% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowItemCompleteListener.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowItemCompleteListener.java index ef3274bae0..af1adf1a0c 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowItemCompleteListener.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowItemCompleteListener.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; public interface FlowItemCompleteListener { /** diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowItemFailureListener.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowItemFailureListener.java similarity index 95% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowItemFailureListener.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowItemFailureListener.java index 7a3f79784d..ffa830bdc7 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowItemFailureListener.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowItemFailureListener.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; public interface FlowItemFailureListener { /** diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowRunner.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowRunner.java similarity index 99% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowRunner.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowRunner.java index 96c49a5a9f..56589ff9f1 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowRunner.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowRunner.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; import com.marklogic.client.DatabaseClient; import com.marklogic.client.datamovement.JobTicket; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowStatusListener.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowStatusListener.java similarity index 96% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowStatusListener.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowStatusListener.java index d09b645d30..93f3b6b617 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowStatusListener.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowStatusListener.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; public interface FlowStatusListener { /** diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowType.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowType.java similarity index 96% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowType.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowType.java index e7fc167431..6d78c87100 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/FlowType.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/FlowType.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; public enum FlowType { INPUT("input"), HARMONIZE("harmonize"); diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/RunFlowResponse.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/RunFlowResponse.java similarity index 96% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/RunFlowResponse.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/RunFlowResponse.java index c606639751..4b72de7ea3 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/RunFlowResponse.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/RunFlowResponse.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; import com.fasterxml.jackson.databind.JsonNode; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/impl/FlowImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/impl/FlowImpl.java similarity index 99% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/impl/FlowImpl.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/impl/FlowImpl.java index b1e5ed8af5..49a4f4436d 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/impl/FlowImpl.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/impl/FlowImpl.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow.impl; +package com.marklogic.hub.legacy.flow.impl; import com.marklogic.client.MarkLogicIOException; import com.marklogic.hub.collector.Collector; import com.marklogic.hub.collector.impl.CollectorImpl; -import com.marklogic.hub.flow.*; +import com.marklogic.hub.legacy.flow.*; import com.marklogic.hub.main.MainPlugin; import com.marklogic.hub.main.impl.MainPluginImpl; import org.w3c.dom.Document; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/impl/FlowRunnerImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/impl/FlowRunnerImpl.java similarity index 99% rename from marklogic-data-hub/src/main/java/com/marklogic/hub/flow/impl/FlowRunnerImpl.java rename to marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/impl/FlowRunnerImpl.java index 518ae4759a..585882b27a 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/flow/impl/FlowRunnerImpl.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/flow/impl/FlowRunnerImpl.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow.impl; +package com.marklogic.hub.legacy.flow.impl; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; @@ -30,10 +30,10 @@ import com.marklogic.hub.HubConfig; import com.marklogic.hub.collector.Collector; import com.marklogic.hub.collector.DiskQueue; -import com.marklogic.hub.flow.*; import com.marklogic.hub.job.Job; import com.marklogic.hub.job.JobManager; import com.marklogic.hub.job.JobStatus; +import com.marklogic.hub.legacy.flow.*; import java.io.PrintWriter; import java.io.StringWriter; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/impl/LegacyFlowManagerImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/impl/LegacyFlowManagerImpl.java new file mode 100644 index 0000000000..bcdc5dbdb7 --- /dev/null +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/legacy/impl/LegacyFlowManagerImpl.java @@ -0,0 +1,292 @@ +/* + * Copyright 2012-2019 MarkLogic Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.marklogic.hub.legacy.impl; + +import com.marklogic.client.DatabaseClient; +import com.marklogic.client.extensions.ResourceManager; +import com.marklogic.client.extensions.ResourceServices.ServiceResult; +import com.marklogic.client.extensions.ResourceServices.ServiceResultIterator; +import com.marklogic.client.io.DOMHandle; +import com.marklogic.client.util.RequestParameters; +import com.marklogic.hub.legacy.LegacyFlowManager; +import com.marklogic.hub.HubConfig; +import com.marklogic.hub.collector.impl.CollectorImpl; +import com.marklogic.hub.legacy.flow.*; +import com.marklogic.hub.legacy.flow.impl.FlowRunnerImpl; +import com.marklogic.hub.main.impl.MainPluginImpl; +import com.marklogic.hub.scaffold.Scaffolding; +import org.apache.commons.io.FileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import java.util.regex.Pattern; + +@Component +public class LegacyFlowManagerImpl extends ResourceManager implements LegacyFlowManager { + + private static final String NAME = "ml:flow"; + + private DatabaseClient stagingClient; + + + @Autowired + private HubConfig hubConfig; + + @Autowired + private Scaffolding scaffolding; + + public LegacyFlowManagerImpl() { + super(); + } + + + public void setupClient() { + this.stagingClient = hubConfig.newStagingClient(); + this.stagingClient.init(NAME, this); + } + + @Override public List getLocalFlows() { + List flows = new ArrayList<>(); + + Path entitiesDir = hubConfig.getHubEntitiesDir(); + File[] entities = entitiesDir.toFile().listFiles((pathname -> pathname.isDirectory())); + if (entities != null) { + for (File entity : entities) { + String entityName = entity.getName(); + flows.addAll(getLocalFlowsForEntity(entityName)); + } + } + return flows; + } + + @Override public List getLocalFlowsForEntity(String entityName) { + return getLocalFlowsForEntity(entityName, null); + } + + @Override public List getLocalFlowsForEntity(String entityName, FlowType flowType) { + + List flows = new ArrayList<>(); + Path entitiesDir = hubConfig.getHubEntitiesDir(); + Path entityDir = entitiesDir.resolve(entityName); + Path inputDir = entityDir.resolve("input"); + Path harmonizeDir = entityDir.resolve("harmonize"); + boolean getInputFlows = false; + boolean getHarmonizeFlows = false; + if (flowType == null) { + getInputFlows = getHarmonizeFlows = true; + } + else if (flowType.equals(FlowType.INPUT)) { + getInputFlows = true; + } + else if (flowType.equals(FlowType.HARMONIZE)) { + getHarmonizeFlows = true; + } + + if (getInputFlows) { + File[] inputFlows = inputDir.toFile().listFiles((pathname) -> pathname.isDirectory() && !pathname.getName().equals("REST")); + if (inputFlows != null) { + for (File inputFlow : inputFlows) { + Flow flow = getLocalFlow(entityName, inputFlow.toPath(), FlowType.INPUT); + if (flow != null) { + flows.add(flow); + } + } + } + } + + if (getHarmonizeFlows) { + File[] harmonizeFlows = harmonizeDir.toFile().listFiles((pathname) -> pathname.isDirectory() && !pathname.getName().equals("REST")); + if (harmonizeFlows != null) { + for (File harmonizeFlow : harmonizeFlows) { + Flow flow = getLocalFlow(entityName, harmonizeFlow.toPath(), FlowType.HARMONIZE); + if (flow != null) { + flows.add(flow); + } + + } + } + } + return flows; + } + + @Override public Flow getFlowFromProperties(Path propertiesFile) { + String quotedSeparator = Pattern.quote(File.separator); + /* Extract flowName and entityName from ..../plugins/entities// + * input|harmonize//flowName.properties + */ + String floweRegex = ".+" + "plugins" + quotedSeparator + "entities" + quotedSeparator + "(.+)"+ quotedSeparator + +"(input|harmonize)" + quotedSeparator + "(.+)" + quotedSeparator + ".+"; + FlowType flowType = propertiesFile.toString().replaceAll(floweRegex, "$2").equals("input") + ? FlowType.INPUT : FlowType.HARMONIZE; + + String entityName = propertiesFile.toString().replaceAll(floweRegex, "$1"); + return getLocalFlow(entityName, propertiesFile.getParent(), flowType); + } + + private Flow getLocalFlow(String entityName, Path flowDir, FlowType flowType) { + try { + String flowName = flowDir.getFileName().toString(); + File propertiesFile = flowDir.resolve(flowName + ".properties").toFile(); + if (propertiesFile.exists()) { + Properties properties = new Properties(); + FileInputStream fis = new FileInputStream(propertiesFile); + properties.load(fis); + + // trim trailing whitespaces for properties. + for (String key : properties.stringPropertyNames()){ + properties.put(key, properties.get(key).toString().trim()); + } + fis.close(); + + FlowBuilder flowBuilder = FlowBuilder.newFlow() + .withEntityName(entityName) + .withName(flowName) + .withType(flowType) + .withCodeFormat(CodeFormat.getCodeFormat((String) properties.get("codeFormat"))) + .withDataFormat(DataFormat.getDataFormat((String) properties.get("dataFormat"))) + .withMain(new MainPluginImpl((String) properties.get("mainModule"), CodeFormat.getCodeFormat((String) properties.get("mainCodeFormat")))); + + if (flowType.equals(FlowType.HARMONIZE)) { + flowBuilder.withCollector(new CollectorImpl((String) properties.get("collectorModule"), CodeFormat.getCodeFormat((String) properties.get("collectorCodeFormat")))); + } + + return flowBuilder.build(); + } + } + catch(Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override public List getFlows(String entityName) { + RequestParameters params = new RequestParameters(); + params.add("entity-name", entityName); + ServiceResultIterator resultItr = this.getServices().get(params); + if (resultItr == null || ! resultItr.hasNext()) { + return null; + } + ServiceResult res = resultItr.next(); + DOMHandle handle = new DOMHandle(); + Document parent = res.getContent(handle).get(); + NodeList children = parent.getDocumentElement().getChildNodes(); + + ArrayList flows = null; + if (children.getLength() > 0) { + flows = new ArrayList<>(); + } + + Node node; + for (int i = 0; i < children.getLength(); i++) { + node = children.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE) { + flows.add(LegacyFlowManager.flowFromXml((Element)children.item(i))); + } + } + return flows; + } + + @Override public Flow getFlow(String entityName, String flowName) { + return getFlow(entityName, flowName, null); + } + + @Override public Flow getFlow(String entityName, String flowName, FlowType flowType) { + RequestParameters params = new RequestParameters(); + params.add("entity-name", entityName); + params.add("flow-name", flowName); + if (flowType != null) { + params.add("flow-type", flowType.toString()); + } + ServiceResultIterator resultItr = this.getServices().get(params); + if (resultItr == null || ! resultItr.hasNext()) { + return null; + } + ServiceResult res = resultItr.next(); + DOMHandle handle = new DOMHandle(); + Document parent = res.getContent(handle).get(); + return LegacyFlowManager.flowFromXml(parent.getDocumentElement()); + } + + @Override public List getLegacyFlows() { + List oldFlows = new ArrayList<>(); + Path entitiesDir = hubConfig.getHubEntitiesDir(); + + File[] entityDirs = entitiesDir.toFile().listFiles(pathname -> pathname.isDirectory()); + if (entityDirs != null) { + for (File entityDir : entityDirs) { + Path inputDir = entityDir.toPath().resolve("input"); + Path harmonizeDir = entityDir.toPath().resolve("harmonize"); + + File[] inputFlows = inputDir.toFile().listFiles((pathname) -> pathname.isDirectory() && !pathname.getName().equals("REST")); + addLegacyFlowToList(oldFlows, entityDir, inputFlows); + + File[] harmonizeFlows = harmonizeDir.toFile().listFiles((pathname) -> pathname.isDirectory() && !pathname.getName().equals("REST")); + addLegacyFlowToList(oldFlows, entityDir, harmonizeFlows); + } + } + + return oldFlows; + } + + private void addLegacyFlowToList(List oldFlows, File entityDir, File[] flows) { + if (flows != null) { + for (File flow : flows) { + File[] mainFiles = flow.listFiles((dir, name) -> name.matches("main\\.(sjs|xqy)")); + File[] flowFiles = flow.listFiles((dir, name) -> name.matches(flow.getName() + "\\.xml")); + if (mainFiles.length < 1 && flowFiles.length == 1) { + oldFlows.add(entityDir.getName() + " => " + flow.getName()); + } else if (mainFiles.length == 1 && mainFiles[0].getName().contains(".sjs")) { + try { + String mainFile = FileUtils.readFileToString(mainFiles[0]); + if (mainFile.contains("dhf.xqy")) { + oldFlows.add(entityDir.getName() + " => " + flow.getName()); + } + } + catch(IOException e) {} + } + } + } + } + + @Override public List updateLegacyFlows(String fromVersion) { + + List updatedFlows = new ArrayList<>(); + File[] entityDirs = hubConfig.getHubEntitiesDir().toFile().listFiles(pathname -> pathname.isDirectory()); + if (entityDirs != null) { + for (File entityDir : entityDirs) { + updatedFlows.addAll(scaffolding.updateLegacyFlows(fromVersion, entityDir.getName())); + } + } + + return updatedFlows; + } + + @Override public FlowRunner newFlowRunner() { + return new FlowRunnerImpl(hubConfig); + } + +} diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/main/MainPlugin.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/main/MainPlugin.java index c99cd3bfba..d6e7cb2881 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/main/MainPlugin.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/main/MainPlugin.java @@ -15,7 +15,7 @@ */ package com.marklogic.hub.main; -import com.marklogic.hub.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.CodeFormat; /** * Interface to the in-memory representation of the main plugin module (main.sjs or main.xqy) diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/main/impl/MainPluginImpl.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/main/impl/MainPluginImpl.java index e43d899425..48fe88455e 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/main/impl/MainPluginImpl.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/main/impl/MainPluginImpl.java @@ -15,7 +15,7 @@ */ package com.marklogic.hub.main.impl; -import com.marklogic.hub.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.CodeFormat; import com.marklogic.hub.main.MainPlugin; public class MainPluginImpl implements MainPlugin { diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/scaffold/Scaffolding.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/scaffold/Scaffolding.java index 7cbb7e9e83..4e468f375e 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/scaffold/Scaffolding.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/scaffold/Scaffolding.java @@ -16,13 +16,11 @@ package com.marklogic.hub.scaffold; -import com.marklogic.client.DatabaseClient; import com.marklogic.hub.HubProject; import com.marklogic.hub.error.ScaffoldingValidationException; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; -import com.marklogic.hub.impl.ScaffoldingImpl; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import java.nio.file.Path; import java.util.List; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/util/MlcpConsumer.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/util/MlcpConsumer.java index 59ab9eaf1a..d2dc8dc13e 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/util/MlcpConsumer.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/util/MlcpConsumer.java @@ -15,7 +15,7 @@ */ package com.marklogic.hub.util; -import com.marklogic.hub.flow.FlowStatusListener; +import com.marklogic.hub.legacy.flow.FlowStatusListener; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/util/MlcpRunner.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/util/MlcpRunner.java index dde2644744..3f37a0bcde 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/util/MlcpRunner.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/util/MlcpRunner.java @@ -20,8 +20,8 @@ import com.marklogic.client.DatabaseClient; import com.marklogic.contentpump.bean.MlcpBean; import com.marklogic.hub.HubConfig; -import com.marklogic.hub.flow.Flow; -import com.marklogic.hub.flow.FlowStatusListener; +import com.marklogic.hub.legacy.flow.Flow; +import com.marklogic.hub.legacy.flow.FlowStatusListener; import com.marklogic.hub.job.Job; import com.marklogic.hub.job.JobManager; import com.marklogic.hub.job.JobStatus; diff --git a/marklogic-data-hub/src/main/resources/scaffolding/flowName.flow.json b/marklogic-data-hub/src/main/resources/scaffolding/flowName.flow.json new file mode 100644 index 0000000000..f265295d9e --- /dev/null +++ b/marklogic-data-hub/src/main/resources/scaffolding/flowName.flow.json @@ -0,0 +1,6 @@ +{ + "name": "flowName", + "description": "flow description", + "identifier": "", + "steps": [] +} diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/HubTestBase.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/HubTestBase.java index 337ffedff8..da8d23fb97 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/HubTestBase.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/HubTestBase.java @@ -40,10 +40,11 @@ import com.marklogic.hub.deploy.commands.LoadUserArtifactsCommand; import com.marklogic.hub.deploy.commands.LoadUserModulesCommand; import com.marklogic.hub.error.DataHubConfigurationException; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.impl.*; +import com.marklogic.hub.legacy.impl.LegacyFlowManagerImpl; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.ComboListener; import com.marklogic.mgmt.ManageClient; @@ -135,7 +136,7 @@ public class HubTestBase { protected ProcessManager processManager; @Autowired - protected FlowManagerImpl fm; + protected LegacyFlowManagerImpl fm; // to speedup dev cycle, you can create a hub and set this to true. // for true setup/teardown, must be 'false' diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/PiiE2E.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/PiiE2E.java index 63c0c486cc..82580aad05 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/PiiE2E.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/PiiE2E.java @@ -21,9 +21,10 @@ import com.marklogic.client.document.ServerTransform; import com.marklogic.client.io.DocumentMetadataHandle; import com.marklogic.client.io.FileHandle; -import com.marklogic.hub.flow.Flow; -import com.marklogic.hub.flow.FlowRunner; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.LegacyFlowManager; +import com.marklogic.hub.legacy.flow.Flow; +import com.marklogic.hub.legacy.flow.FlowRunner; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.impl.HubConfigImpl; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; @@ -68,7 +69,7 @@ public class PiiE2E extends HubTestBase protected EntityManager entityManager; @Autowired - protected FlowManager flowManager; + protected LegacyFlowManager flowManager; @Autowired private Scaffolding scaffolding; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/ScaffoldingE2E.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/ScaffoldingE2E.java index a86bc6919b..60a53efd47 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/ScaffoldingE2E.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/ScaffoldingE2E.java @@ -15,9 +15,9 @@ */ package com.marklogic.hub; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; import com.marklogic.bootstrap.Installer; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/collector/EmptyCollectorTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/collector/EmptyCollectorTest.java index 7f5d2c6a75..9e2b77ce88 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/collector/EmptyCollectorTest.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/collector/EmptyCollectorTest.java @@ -21,7 +21,7 @@ import com.marklogic.hub.HubConfig; import com.marklogic.hub.HubTestBase; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.flow.*; +import com.marklogic.hub.legacy.flow.*; import org.custommonkey.xmlunit.XMLUnit; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/core/DebugLibTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/core/DebugLibTest.java index 6c815091c1..c3fdac87e5 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/core/DebugLibTest.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/core/DebugLibTest.java @@ -8,9 +8,9 @@ import com.marklogic.hub.HubConfig; import com.marklogic.hub.HubTestBase; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.scaffold.Scaffolding; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/flow/FlowManagerTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/flow/FlowManagerTest.java index 89434cc6d1..8fbc1e9c20 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/flow/FlowManagerTest.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/flow/FlowManagerTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 MarkLogic Corporation + * Copyright 2012-2019 MarkLogic Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,423 +13,126 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.marklogic.hub.flow; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.marklogic.bootstrap.Installer; -import com.marklogic.client.io.DOMHandle; -import com.marklogic.client.io.DocumentMetadataHandle; -import com.marklogic.hub.FlowManager; -import com.marklogic.hub.HubConfig; -import com.marklogic.hub.HubTestBase; -import com.marklogic.hub.collector.Collector; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.main.MainPlugin; -import com.marklogic.hub.scaffold.Scaffolding; +import com.marklogic.hub.HubTestBase; +import com.marklogic.hub.impl.FlowManagerImpl; import org.apache.commons.io.FileUtils; -import org.json.JSONException; -import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.stream.XMLStreamException; import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.HashMap; import java.util.List; -import static com.marklogic.client.io.DocumentMetadataHandle.Capability.*; -import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; -import static org.junit.jupiter.api.Assertions.assertEquals; - @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = ApplicationConfig.class) -public class FlowManagerTest extends HubTestBase { +class FlowManagerTest extends HubTestBase { @Autowired - private FlowManager fm; - - @Autowired - private Scaffolding scaffolding; - - @BeforeAll - public static void runOnce() { - new Installer().deleteProjectDir(); - } + private FlowManagerImpl fm; + + private String flowString = "{\n" + + " \"name\": \"test-flow\",\n" + + " \"Description\": \"this is an example\",\n" + + " \"Identifier\": \"(some identifier or search)\",\n" + + " \"Steps\": [{\n" + + " \"0\": {\n" + + " \"type\": \"mapping\",\n" + + " \"name\": \"person-mapping1.json\",\n" + + " \"identifier\": \"null\",\n" + + " \"retryLimit\": 0,\n" + + " \"options\": {}\n" + + " }\n" + + " }]\n" + + "}\n"; @BeforeEach - public void setup() throws IOException { + void setUp() throws IOException { basicSetup(); getHubAdminConfig(); - enableDebugging(); - - clearDatabases(HubConfig.DEFAULT_STAGING_NAME, HubConfig.DEFAULT_FINAL_NAME); - - addStagingDocs(); - installModules(); - } - - private void installModules() { - HashMap modules = new HashMap<>(); - modules.put( - "/entities/test/harmonize/my-test-flow1/collector.xqy", - "flow-manager-test/my-test-flow1/collector.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow1/main.xqy", - "flow-manager-test/my-test-flow1/main.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow1/content.xqy", - "flow-manager-test/my-test-flow1/content.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow1/headers.xqy", - "flow-manager-test/my-test-flow1/headers.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow1/triples.xqy", - "flow-manager-test/my-test-flow1/triples.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow1/writer.xqy", - "flow-manager-test/my-test-flow1/writer.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow1/my-test-flow1.xml", - "flow-manager-test/my-test-flow1/my-test-flow1.xml"); - modules.put( - "/entities/test/harmonize/my-test-flow2/collector.xqy", - "flow-manager-test/my-test-flow1/collector.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow2/main.xqy", - "flow-manager-test/my-test-flow1/main.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow2/content.xqy", - "flow-manager-test/my-test-flow1/content.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow2/headers.xqy", - "flow-manager-test/my-test-flow1/headers.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow2/triples.xqy", - "flow-manager-test/my-test-flow1/triples.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow2/writer.xqy", - "flow-manager-test/my-test-flow1/writer.xqy"); - modules.put( - "/entities/test/harmonize/my-test-flow2/my-test-flow2.xml", - "flow-manager-test/my-test-flow1/my-test-flow2.xml"); - installModules(modules); - } - - private void addStagingDocs() { - clearDatabases(HubConfig.DEFAULT_STAGING_NAME, HubConfig.DEFAULT_FINAL_NAME); - DocumentMetadataHandle meta = new DocumentMetadataHandle(); - meta.getCollections().add("tester"); - meta.getPermissions().add(getHubAdminConfig().getHubRoleName(), READ, UPDATE, EXECUTE); - installStagingDoc("/employee1.xml", meta, "flow-manager-test/input/employee1.xml"); - installStagingDoc("/employee2.xml", meta, "flow-manager-test/input/employee2.xml"); + FileUtils.copyFileToDirectory(getResourceFile("flow-manager-test/test-flow.flow.json"), adminHubConfig.getFlowsDir().toFile()); } - private void addFinalDocs() { - clearDatabases(HubConfig.DEFAULT_STAGING_NAME, HubConfig.DEFAULT_FINAL_NAME); - DocumentMetadataHandle meta = new DocumentMetadataHandle(); - meta.getCollections().add("tester"); - meta.getPermissions().add(getHubAdminConfig().getHubRoleName(), READ, UPDATE, EXECUTE); - installFinalDoc("/employee1.xml", meta, "flow-manager-test/input/employee1.xml"); - installFinalDoc("/employee2.xml", meta, "flow-manager-test/input/employee2.xml"); + @AfterAll + static void runAfterAll() { + new Installer().deleteProjectDir(); } @Test - public void testFlowFromXml() { - Document d = getXmlFromResource("flow-manager-test/simple-flow.xml"); - - Flow flow = FlowManager.flowFromXml(d.getDocumentElement()); - assertEquals(flow.getName(), "my-test-flow"); - assertEquals(flow.getCollector().getCodeFormat(), CodeFormat.XQUERY); - assertEquals(flow.getCollector().getModule(), "/entities/test/harmonize/my-test-flow/collector.xqy"); - assertEquals(flow.getMain().getCodeFormat(), CodeFormat.XQUERY); - assertEquals(flow.getMain().getModule(), "/entities/test/harmonize/my-test-flow/main.xqy"); + void getFlow() { + Flow flow = fm.getFlow("test-flow"); + Assertions.assertNotNull(flow); + Assertions.assertEquals("test-flow", flow.getName()); } @Test - public void testFlowToXml() throws IOException, ParserConfigurationException, SAXException { - Flow flow = FlowBuilder.newFlow() - .withEntityName("test") - .withName("my-test-flow") - .withType(FlowType.HARMONIZE) - .withDataFormat(DataFormat.XML) - .withCodeFormat(CodeFormat.XQUERY) - .build(); - String expected = getResource("flow-manager-test/simple-flow.xml"); - String actual = flow.serialize(); - assertXMLEqual(expected, actual); + void getFlowAsJSON() throws IOException { + String actual = fm.getFlowAsJSON("test-flow"); + assertJsonEqual(flowString, actual, true); } @Test - public void testGetLocalFlows() throws IOException { - createProjectDir(PROJECT_PATH); - scaffolding.createEntity("my-entity"); - - assertEquals(0, fm.getLocalFlows().size()); - - CodeFormat[] codeFormats = new CodeFormat[] { CodeFormat.JAVASCRIPT, CodeFormat.XQUERY }; - DataFormat[] dataFormats = new DataFormat[] { DataFormat.JSON, DataFormat.XML }; - FlowType[] flowTypes = new FlowType[] { FlowType.INPUT, FlowType.HARMONIZE }; - for (CodeFormat codeFormat : codeFormats) { - for (DataFormat dataFormat : dataFormats) { - for (FlowType flowType : flowTypes) { - String flowName = flowType.toString() + "-" + codeFormat.toString() + "-" + dataFormat.toString(); - scaffolding.createFlow("my-entity", flowName, flowType, codeFormat, dataFormat, false); - } - } - } - - List flows = fm.getLocalFlows(); - assertEquals(8, flows.size()); - - for (Flow flow : flows) { - assertEquals("my-entity", flow.getEntityName()); - } - - FileUtils.deleteDirectory(Paths.get("./del-me-dir").toFile()); + void getFlows() { + List flows = fm.getFlows(); + Assertions.assertEquals(flows.size() , 1); + Assertions.assertEquals(flows.get(0).getName(), fm.getFlow("test-flow").getName()); } @Test - public void testGetFlowFromProperties() throws IOException { - scaffolding.createEntity("my-entity"); - - allCombos((codeFormat, dataFormat, flowType, useEs) -> { - String flowName = flowType.toString() + "-" + codeFormat.toString() + "-" + dataFormat.toString(); - scaffolding.createFlow("my-entity", flowName, flowType, codeFormat, dataFormat, false); - }); - - - allCombos((codeFormat, dataFormat, flowType, useEs) -> { - String flowName = flowType.toString() + "-" + codeFormat.toString() + "-" + dataFormat.toString(); - Path propertiesFile = Paths.get(PROJECT_PATH, "plugins", "entities", "my-entity", flowType.toString(), flowName, flowName + ".properties"); - Flow flow = fm.getFlowFromProperties(propertiesFile); - assertEquals(flowName, flow.getName()); - assertEquals("my-entity", flow.getEntityName()); - assertEquals(codeFormat, flow.getCodeFormat()); - assertEquals(dataFormat, flow.getDataFormat()); - assertEquals(flowType, flow.getType()); - }); - - deleteProjectDir(); + void getFlowNames() { + List flows = fm.getFlowNames(); + Assertions.assertEquals(flows.size() , 1); + Assertions.assertEquals(flows.get(0) , "test-flow"); } @Test - public void testGetFlows() { - getDataHub().clearUserModules(); - - installHubModules(); - - installModule("/entities/test/harmonize/my-test-flow1/my-test-flow1.xml", "flow-manager-test/my-test-flow1/my-test-flow1.xml"); - installModule("/entities/test/harmonize/my-test-flow2/my-test-flow2.xml", "flow-manager-test/my-test-flow1/my-test-flow2.xml"); - - List flows = fm.getFlows("test"); - assertEquals(2, flows.size()); - - // flow 1 - Flow flow1 = flows.get(0); - assertEquals("my-test-flow1", flow1.getName()); - assertEquals(CodeFormat.XQUERY, flow1.getCodeFormat()); - assertEquals(DataFormat.XML, flow1.getDataFormat()); - assertEquals("test", flow1.getEntityName()); - assertEquals(FlowType.HARMONIZE, flow1.getType()); - - Collector c = flow1.getCollector(); - assertEquals(CodeFormat.XQUERY, c.getCodeFormat()); - assertEquals("/entities/test/harmonize/my-test-flow1/collector.xqy", c.getModule()); - - MainPlugin main = flow1.getMain(); - assertEquals(CodeFormat.XQUERY, main.getCodeFormat()); - assertEquals("/entities/test/harmonize/my-test-flow1/main.xqy", main.getModule()); - - // flow 2 - Flow flow2 = flows.get(1); - assertEquals("my-test-flow2", flow2.getName()); - assertEquals(CodeFormat.XQUERY, flow2.getCodeFormat()); - assertEquals(DataFormat.XML, flow2.getDataFormat()); - assertEquals("test", flow2.getEntityName()); - assertEquals(FlowType.HARMONIZE, flow2.getType()); - - c = flow2.getCollector(); - assertEquals(CodeFormat.XQUERY, c.getCodeFormat()); - assertEquals("/entities/test/harmonize/my-test-flow1/collector.xqy", c.getModule()); - - main = flow2.getMain(); - assertEquals(CodeFormat.XQUERY, main.getCodeFormat()); - assertEquals("/entities/test/harmonize/my-test-flow1/main.xqy", main.getModule()); - } - - @Test - public void getTestFlow() { - installModule("/entities/test/harmonize/my-test-flow1/my-test-flow1.xml", "flow-manager-test/my-test-flow1/my-test-flow1-json.xml"); - - Flow flow1 = fm.getFlow("test", "my-test-flow1"); - assertEquals("my-test-flow1", flow1.getName()); - assertEquals(CodeFormat.JAVASCRIPT, flow1.getCodeFormat()); - assertEquals(DataFormat.JSON, flow1.getDataFormat()); - assertEquals("test", flow1.getEntityName()); - assertEquals(FlowType.HARMONIZE, flow1.getType()); - - Collector c = flow1.getCollector(); - assertEquals(CodeFormat.JAVASCRIPT, c.getCodeFormat()); - assertEquals("/entities/test/harmonize/my-test-flow1/collector.sjs", c.getModule()); - - MainPlugin main = flow1.getMain(); - assertEquals(CodeFormat.JAVASCRIPT, main.getCodeFormat()); - assertEquals("/entities/test/harmonize/my-test-flow1/main.sjs", main.getModule()); + void createFlow() { + Flow flow = fm.createFlow("test-flow"); + Assertions.assertEquals("test-flow", flow.getName()); } @Test - public void testRunFlow() throws SAXException, IOException, ParserConfigurationException, XMLStreamException { - addStagingDocs(); - installModules(); - assertEquals(2, getStagingDocCount()); - assertEquals(0, getFinalDocCount()); - getHubFlowRunnerConfig(); - Flow flow1 = fm.getFlow("test", "my-test-flow1"); - FlowRunner flowRunner = fm.newFlowRunner() - .withFlow(flow1) - .withBatchSize(10) - .withThreadCount(1); - flowRunner.run(); - flowRunner.awaitCompletion(); - getHubAdminConfig(); - assertEquals(2, getStagingDocCount()); - assertEquals(2, getFinalDocCount()); - assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized/harmonized1.xml"), finalDocMgr.read("/employee1.xml").next().getContent(new DOMHandle()).get() ); - assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized/harmonized2.xml"), finalDocMgr.read("/employee2.xml").next().getContent(new DOMHandle()).get()); - DocumentMetadataHandle metadata = finalDocMgr.readMetadata("/employee1.xml", new DocumentMetadataHandle()); - DocumentMetadataHandle.DocumentPermissions permissions = metadata.getPermissions(); - assertEquals( permissions.get("harmonized-reader").toString(), "[READ]", "Default permissions on harmonized documents should contain harmonized-reader/read"); - assertEquals(permissions.get("harmonized-updater").toString(), "[UPDATE]", "Default permissions on harmonized documents should contain harmonized-updater/update"); + void createFlowFromJSON() { + fm.deleteFlow("test-flow"); + Flow flow = fm.createFlowFromJSON(flowString); + Assertions.assertEquals("test-flow", flow.getName()); } @Test - public void testRunFlowWithBackwards() throws SAXException, IOException, ParserConfigurationException, XMLStreamException { - addFinalDocs(); - installModules(); - assertEquals(0, getStagingDocCount()); - assertEquals(2, getFinalDocCount()); - getHubFlowRunnerConfig(); - Flow flow1 = fm.getFlow("test", "my-test-flow1"); - FlowRunner flowRunner = fm.newFlowRunner() - .withFlow(flow1) - .withBatchSize(10) - .withThreadCount(1) - .withSourceClient(getHubFlowRunnerConfig().newReverseFlowClient()) - .withDestinationDatabase(HubConfig.DEFAULT_STAGING_NAME); - flowRunner.run(); - flowRunner.awaitCompletion(); - getHubAdminConfig(); - assertEquals(2, getStagingDocCount()); - assertEquals(2, getFinalDocCount()); - assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized/harmonized1.xml"), stagingDocMgr.read("/employee1.xml").next().getContent(new DOMHandle()).get() ); - assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized/harmonized2.xml"), stagingDocMgr.read("/employee2.xml").next().getContent(new DOMHandle()).get()); - DocumentMetadataHandle metadata = stagingDocMgr.readMetadata("/employee1.xml", new DocumentMetadataHandle()); - DocumentMetadataHandle.DocumentPermissions permissions = metadata.getPermissions(); - assertEquals(permissions.get("harmonized-reader").toString(), "[READ]", "Default permissions on harmonized documents should contain harmonized-reader/read"); - assertEquals(permissions.get("harmonized-updater").toString(), "[UPDATE]", "Default permissions on harmonized documents should contain harmonized-updater/update"); + void createFlowFromJSON1() throws IOException { + ObjectMapper mapper = new ObjectMapper(); + JsonNode node = mapper.readTree(flowString); + Flow flow = fm.createFlowFromJSON(node); + Assertions.assertEquals("test-flow", flow.getName()); } @Test - public void testRunFlowWithHeader() throws SAXException, IOException, ParserConfigurationException, XMLStreamException { - addStagingDocs(); - HashMap modules = new HashMap<>(); - modules.put("/entities/test/harmonize/my-test-flow-with-header/flow.xml", "flow-manager-test/my-test-flow-with-header/flow.xml"); - modules.put("/entities/test/harmonize/my-test-flow-with-header/collector.xqy", "flow-manager-test/my-test-flow-with-header/collector.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-header/content.xqy", "flow-manager-test/my-test-flow-with-header/content.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-header/headers.xqy", "flow-manager-test/my-test-flow-with-header/headers.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-header/triples.xqy", "flow-manager-test/my-test-flow-with-header/triples.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-header/writer.xqy", "flow-manager-test/my-test-flow-with-header/writer.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-header/main.xqy", "flow-manager-test/my-test-flow-with-header/main.xqy"); - installModules(modules); - - assertEquals(2, getStagingDocCount()); - assertEquals(0, getFinalDocCount()); - getHubFlowRunnerConfig(); - Flow flow1 = fm.getFlow("test", "my-test-flow-with-header"); - FlowRunner flowRunner = fm.newFlowRunner() - .withFlow(flow1) - .withBatchSize(10) - .withThreadCount(1); - flowRunner.run(); - flowRunner.awaitCompletion(); - getHubAdminConfig(); - assertEquals(2, getStagingDocCount()); - assertEquals(2, getFinalDocCount()); - assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized-with-header/harmonized1.xml"), finalDocMgr.read("/employee1.xml").next().getContent(new DOMHandle()).get() ); - assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized-with-header/harmonized2.xml"), finalDocMgr.read("/employee2.xml").next().getContent(new DOMHandle()).get()); + void deleteFlow() { + fm.deleteFlow("test-flow"); - runInModules("xdmp:directory-delete(\"/entities/test/harmonize/my-test-flow-with-header/\")"); + Flow flow = fm.getFlow("test-flow"); + Assertions.assertNull(flow); } @Test - public void testRunFlowWithAll() throws SAXException, IOException, ParserConfigurationException, XMLStreamException { - addStagingDocs(); - HashMap modules = new HashMap<>(); - modules.put("/entities/test/harmonize/my-test-flow-with-all/my-test-flow-with-all.xml", "flow-manager-test/my-test-flow-with-all/my-test-flow-with-all.xml"); - modules.put("/entities/test/harmonize/my-test-flow-with-all/collector.xqy", "flow-manager-test/my-test-flow-with-all/collector.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-all/headers.xqy", "flow-manager-test/my-test-flow-with-all/headers.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-all/content.xqy", "flow-manager-test/my-test-flow-with-all/content.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-all/triples.xqy", "flow-manager-test/my-test-flow-with-all/triples.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-all/writer.xqy", "flow-manager-test/my-test-flow-with-all/writer.xqy"); - modules.put("/entities/test/harmonize/my-test-flow-with-all/main.xqy", "flow-manager-test/my-test-flow-with-all/main.xqy"); - installModules(modules); - - assertEquals(2, getStagingDocCount()); - assertEquals(0, getFinalDocCount()); - getHubFlowRunnerConfig(); - Flow flow1 = fm.getFlow("test", "my-test-flow-with-all"); - FlowRunner flowRunner = fm.newFlowRunner() - .withFlow(flow1) - .withBatchSize(10) - .withThreadCount(1); - flowRunner.run(); - flowRunner.awaitCompletion(); - getHubAdminConfig(); - assertEquals(2, getStagingDocCount()); - assertEquals(2, getFinalDocCount()); - assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized-with-all/harmonized1.xml"), finalDocMgr.read("/employee1.xml").next().getContent(new DOMHandle()).get() ); - assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized-with-all/harmonized2.xml"), finalDocMgr.read("/employee2.xml").next().getContent(new DOMHandle()).get()); - - runInModules("xdmp:directory-delete(\"/entities/test/harmonize/my-test-flow-with-all/\")"); - } - - - @Test - public void testHasLegacyflows() throws IOException, InterruptedException, ParserConfigurationException, SAXException, JSONException { - - scaffolding.createEntity("new-entity"); - scaffolding.createFlow("new-entity", "new-flow", FlowType.HARMONIZE, CodeFormat.XQUERY, DataFormat.XML, false); - assertEquals(0, fm.getLegacyFlows().size()); - - Path projectPath = Paths.get(PROJECT_PATH); - allCombos((codeFormat, dataFormat, flowType, useEs) -> { - Path dir = projectPath.resolve("plugins/entities/my-fun-test/" + flowType.toString()); - String flowName = "legacy-" + codeFormat.toString() + "-" + dataFormat.toString() + "-" + flowType.toString() + "-flow"; - try { - FileUtils.copyDirectory(getResourceFile("scaffolding-test/" + flowName), dir.resolve(flowName).toFile()); - } catch (IOException e) { - throw new RuntimeException(e); - } - }); + void saveFlow() throws IOException { + fm.deleteFlow("test-flow"); + ObjectMapper mapper = new ObjectMapper(); + JsonNode node = mapper.readTree(flowString); + Flow flow = fm.createFlowFromJSON(node); + fm.saveFlow(flow); + Assertions.assertEquals("test-flow", fm.getFlow("test-flow").getName()); - List legacyFlows = fm.getLegacyFlows(); - assertEquals(8, legacyFlows.size()); - legacyFlows.sort(String::compareToIgnoreCase); - assertEquals("my-fun-test => legacy-sjs-json-harmonize-flow", legacyFlows.get(0)); - assertEquals("my-fun-test => legacy-sjs-json-input-flow", legacyFlows.get(1)); - assertEquals("my-fun-test => legacy-sjs-xml-harmonize-flow", legacyFlows.get(2)); - assertEquals("my-fun-test => legacy-sjs-xml-input-flow", legacyFlows.get(3)); - assertEquals("my-fun-test => legacy-xqy-json-harmonize-flow", legacyFlows.get(4)); - assertEquals("my-fun-test => legacy-xqy-json-input-flow", legacyFlows.get(5)); - assertEquals("my-fun-test => legacy-xqy-xml-harmonize-flow", legacyFlows.get(6)); - assertEquals("my-fun-test => legacy-xqy-xml-input-flow", legacyFlows.get(7)); } } diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/job/JobManagerTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/job/JobManagerTest.java index 22e290d893..5a53e0d460 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/job/JobManagerTest.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/job/JobManagerTest.java @@ -19,7 +19,7 @@ import com.marklogic.hub.HubConfig; import com.marklogic.hub.HubTestBase; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.flow.*; +import com.marklogic.hub.legacy.flow.*; import org.custommonkey.xmlunit.XMLUnit; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/job/TracingTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/job/TracingTest.java index 8b904c540e..ec05f57d23 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/job/TracingTest.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/job/TracingTest.java @@ -26,8 +26,8 @@ import com.marklogic.hub.HubTestBase; import com.marklogic.hub.Tracing; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.flow.Flow; -import com.marklogic.hub.flow.FlowRunner; +import com.marklogic.hub.legacy.flow.Flow; +import com.marklogic.hub.legacy.flow.FlowRunner; import org.apache.commons.io.FileUtils; import org.custommonkey.xmlunit.XMLUnit; import org.junit.jupiter.api.AfterEach; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/legacy/flow/FlowManagerTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/legacy/flow/FlowManagerTest.java new file mode 100644 index 0000000000..acd12634a1 --- /dev/null +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/legacy/flow/FlowManagerTest.java @@ -0,0 +1,438 @@ +/* + * Copyright 2012-2016 MarkLogic Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.marklogic.hub.legacy.flow; + +import com.marklogic.bootstrap.Installer; +import com.marklogic.client.io.DOMHandle; +import com.marklogic.client.io.DocumentMetadataHandle; +import com.marklogic.hub.legacy.LegacyFlowManager; +import com.marklogic.hub.HubConfig; +import com.marklogic.hub.HubTestBase; +import com.marklogic.hub.collector.Collector; +import com.marklogic.hub.ApplicationConfig; +import com.marklogic.hub.main.MainPlugin; +import com.marklogic.hub.scaffold.Scaffolding; +import org.apache.commons.io.FileUtils; +import org.json.JSONException; +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.stream.XMLStreamException; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.List; + +import static com.marklogic.client.io.DocumentMetadataHandle.Capability.*; +import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = ApplicationConfig.class) +public class FlowManagerTest extends HubTestBase { + + @Autowired + private LegacyFlowManager fm; + + @Autowired + private Scaffolding scaffolding; + + @BeforeAll + public static void runOnce() { + new Installer().deleteProjectDir(); + } + + @BeforeEach + public void setup() throws IOException { + basicSetup(); + getHubAdminConfig(); + enableDebugging(); + + clearDatabases(HubConfig.DEFAULT_STAGING_NAME, HubConfig.DEFAULT_FINAL_NAME); + + addStagingDocs(); + installModules(); + } + + @AfterAll + public static void removeProjectDir() { + new Installer().deleteProjectDir(); + } + + private void installModules() { + HashMap modules = new HashMap<>(); + modules.put( + "/entities/test/harmonize/my-test-flow1/collector.xqy", + "flow-manager-test/my-test-flow1/collector.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow1/main.xqy", + "flow-manager-test/my-test-flow1/main.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow1/content.xqy", + "flow-manager-test/my-test-flow1/content.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow1/headers.xqy", + "flow-manager-test/my-test-flow1/headers.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow1/triples.xqy", + "flow-manager-test/my-test-flow1/triples.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow1/writer.xqy", + "flow-manager-test/my-test-flow1/writer.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow1/my-test-flow1.xml", + "flow-manager-test/my-test-flow1/my-test-flow1.xml"); + modules.put( + "/entities/test/harmonize/my-test-flow2/collector.xqy", + "flow-manager-test/my-test-flow1/collector.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow2/main.xqy", + "flow-manager-test/my-test-flow1/main.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow2/content.xqy", + "flow-manager-test/my-test-flow1/content.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow2/headers.xqy", + "flow-manager-test/my-test-flow1/headers.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow2/triples.xqy", + "flow-manager-test/my-test-flow1/triples.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow2/writer.xqy", + "flow-manager-test/my-test-flow1/writer.xqy"); + modules.put( + "/entities/test/harmonize/my-test-flow2/my-test-flow2.xml", + "flow-manager-test/my-test-flow1/my-test-flow2.xml"); + installModules(modules); + } + + private void addStagingDocs() { + clearDatabases(HubConfig.DEFAULT_STAGING_NAME, HubConfig.DEFAULT_FINAL_NAME); + DocumentMetadataHandle meta = new DocumentMetadataHandle(); + meta.getCollections().add("tester"); + meta.getPermissions().add(getHubAdminConfig().getHubRoleName(), READ, UPDATE, EXECUTE); + installStagingDoc("/employee1.xml", meta, "flow-manager-test/input/employee1.xml"); + installStagingDoc("/employee2.xml", meta, "flow-manager-test/input/employee2.xml"); + } + + private void addFinalDocs() { + clearDatabases(HubConfig.DEFAULT_STAGING_NAME, HubConfig.DEFAULT_FINAL_NAME); + DocumentMetadataHandle meta = new DocumentMetadataHandle(); + meta.getCollections().add("tester"); + meta.getPermissions().add(getHubAdminConfig().getHubRoleName(), READ, UPDATE, EXECUTE); + installFinalDoc("/employee1.xml", meta, "flow-manager-test/input/employee1.xml"); + installFinalDoc("/employee2.xml", meta, "flow-manager-test/input/employee2.xml"); + } + + @Test + public void testFlowFromXml() { + Document d = getXmlFromResource("flow-manager-test/simple-flow.xml"); + + Flow flow = LegacyFlowManager.flowFromXml(d.getDocumentElement()); + assertEquals(flow.getName(), "my-test-flow"); + assertEquals(flow.getCollector().getCodeFormat(), CodeFormat.XQUERY); + assertEquals(flow.getCollector().getModule(), "/entities/test/harmonize/my-test-flow/collector.xqy"); + assertEquals(flow.getMain().getCodeFormat(), CodeFormat.XQUERY); + assertEquals(flow.getMain().getModule(), "/entities/test/harmonize/my-test-flow/main.xqy"); + } + + @Test + public void testFlowToXml() throws IOException, ParserConfigurationException, SAXException { + Flow flow = FlowBuilder.newFlow() + .withEntityName("test") + .withName("my-test-flow") + .withType(FlowType.HARMONIZE) + .withDataFormat(DataFormat.XML) + .withCodeFormat(CodeFormat.XQUERY) + .build(); + String expected = getResource("flow-manager-test/simple-flow.xml"); + String actual = flow.serialize(); + assertXMLEqual(expected, actual); + } + + @Test + public void testGetLocalFlows() throws IOException { + createProjectDir(PROJECT_PATH); + scaffolding.createEntity("my-entity"); + + assertEquals(0, fm.getLocalFlows().size()); + + CodeFormat[] codeFormats = new CodeFormat[] { CodeFormat.JAVASCRIPT, CodeFormat.XQUERY }; + DataFormat[] dataFormats = new DataFormat[] { DataFormat.JSON, DataFormat.XML }; + FlowType[] flowTypes = new FlowType[] { FlowType.INPUT, FlowType.HARMONIZE }; + for (CodeFormat codeFormat : codeFormats) { + for (DataFormat dataFormat : dataFormats) { + for (FlowType flowType : flowTypes) { + String flowName = flowType.toString() + "-" + codeFormat.toString() + "-" + dataFormat.toString(); + scaffolding.createFlow("my-entity", flowName, flowType, codeFormat, dataFormat, false); + } + } + } + + List flows = fm.getLocalFlows(); + assertEquals(8, flows.size()); + + for (Flow flow : flows) { + assertEquals("my-entity", flow.getEntityName()); + } + + FileUtils.deleteDirectory(Paths.get("./del-me-dir").toFile()); + } + + @Test + public void testGetFlowFromProperties() throws IOException { + scaffolding.createEntity("my-entity"); + + allCombos((codeFormat, dataFormat, flowType, useEs) -> { + String flowName = flowType.toString() + "-" + codeFormat.toString() + "-" + dataFormat.toString(); + scaffolding.createFlow("my-entity", flowName, flowType, codeFormat, dataFormat, false); + }); + + + allCombos((codeFormat, dataFormat, flowType, useEs) -> { + String flowName = flowType.toString() + "-" + codeFormat.toString() + "-" + dataFormat.toString(); + Path propertiesFile = Paths.get(PROJECT_PATH, "plugins", "entities", "my-entity", flowType.toString(), flowName, flowName + ".properties"); + Flow flow = fm.getFlowFromProperties(propertiesFile); + assertEquals(flowName, flow.getName()); + assertEquals("my-entity", flow.getEntityName()); + assertEquals(codeFormat, flow.getCodeFormat()); + assertEquals(dataFormat, flow.getDataFormat()); + assertEquals(flowType, flow.getType()); + }); + + deleteProjectDir(); + } + + @Test + public void testGetFlows() { + getDataHub().clearUserModules(); + + installHubModules(); + + installModule("/entities/test/harmonize/my-test-flow1/my-test-flow1.xml", "flow-manager-test/my-test-flow1/my-test-flow1.xml"); + installModule("/entities/test/harmonize/my-test-flow2/my-test-flow2.xml", "flow-manager-test/my-test-flow1/my-test-flow2.xml"); + + List flows = fm.getFlows("test"); + assertEquals(2, flows.size()); + + // flow 1 + Flow flow1 = flows.get(0); + assertEquals("my-test-flow1", flow1.getName()); + assertEquals(CodeFormat.XQUERY, flow1.getCodeFormat()); + assertEquals(DataFormat.XML, flow1.getDataFormat()); + assertEquals("test", flow1.getEntityName()); + assertEquals(FlowType.HARMONIZE, flow1.getType()); + + Collector c = flow1.getCollector(); + Assertions.assertEquals(CodeFormat.XQUERY, c.getCodeFormat()); + assertEquals("/entities/test/harmonize/my-test-flow1/collector.xqy", c.getModule()); + + MainPlugin main = flow1.getMain(); + Assertions.assertEquals(CodeFormat.XQUERY, main.getCodeFormat()); + assertEquals("/entities/test/harmonize/my-test-flow1/main.xqy", main.getModule()); + + // flow 2 + Flow flow2 = flows.get(1); + assertEquals("my-test-flow2", flow2.getName()); + assertEquals(CodeFormat.XQUERY, flow2.getCodeFormat()); + assertEquals(DataFormat.XML, flow2.getDataFormat()); + assertEquals("test", flow2.getEntityName()); + assertEquals(FlowType.HARMONIZE, flow2.getType()); + + c = flow2.getCollector(); + Assertions.assertEquals(CodeFormat.XQUERY, c.getCodeFormat()); + assertEquals("/entities/test/harmonize/my-test-flow1/collector.xqy", c.getModule()); + + main = flow2.getMain(); + Assertions.assertEquals(CodeFormat.XQUERY, main.getCodeFormat()); + assertEquals("/entities/test/harmonize/my-test-flow1/main.xqy", main.getModule()); + } + + @Test + public void getTestFlow() { + installModule("/entities/test/harmonize/my-test-flow1/my-test-flow1.xml", "flow-manager-test/my-test-flow1/my-test-flow1-json.xml"); + + Flow flow1 = fm.getFlow("test", "my-test-flow1"); + assertEquals("my-test-flow1", flow1.getName()); + assertEquals(CodeFormat.JAVASCRIPT, flow1.getCodeFormat()); + assertEquals(DataFormat.JSON, flow1.getDataFormat()); + assertEquals("test", flow1.getEntityName()); + assertEquals(FlowType.HARMONIZE, flow1.getType()); + + Collector c = flow1.getCollector(); + Assertions.assertEquals(CodeFormat.JAVASCRIPT, c.getCodeFormat()); + assertEquals("/entities/test/harmonize/my-test-flow1/collector.sjs", c.getModule()); + + MainPlugin main = flow1.getMain(); + Assertions.assertEquals(CodeFormat.JAVASCRIPT, main.getCodeFormat()); + assertEquals("/entities/test/harmonize/my-test-flow1/main.sjs", main.getModule()); + } + + @Test + public void testRunFlow() throws SAXException, IOException, ParserConfigurationException, XMLStreamException { + addStagingDocs(); + installModules(); + assertEquals(2, getStagingDocCount()); + assertEquals(0, getFinalDocCount()); + getHubFlowRunnerConfig(); + Flow flow1 = fm.getFlow("test", "my-test-flow1"); + FlowRunner flowRunner = fm.newFlowRunner() + .withFlow(flow1) + .withBatchSize(10) + .withThreadCount(1); + flowRunner.run(); + flowRunner.awaitCompletion(); + getHubAdminConfig(); + assertEquals(2, getStagingDocCount()); + assertEquals(2, getFinalDocCount()); + assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized/harmonized1.xml"), finalDocMgr.read("/employee1.xml").next().getContent(new DOMHandle()).get() ); + assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized/harmonized2.xml"), finalDocMgr.read("/employee2.xml").next().getContent(new DOMHandle()).get()); + DocumentMetadataHandle metadata = finalDocMgr.readMetadata("/employee1.xml", new DocumentMetadataHandle()); + DocumentMetadataHandle.DocumentPermissions permissions = metadata.getPermissions(); + assertEquals( permissions.get("harmonized-reader").toString(), "[READ]", "Default permissions on harmonized documents should contain harmonized-reader/read"); + assertEquals(permissions.get("harmonized-updater").toString(), "[UPDATE]", "Default permissions on harmonized documents should contain harmonized-updater/update"); + } + + @Test + public void testRunFlowWithBackwards() throws SAXException, IOException, ParserConfigurationException, XMLStreamException { + addFinalDocs(); + installModules(); + assertEquals(0, getStagingDocCount()); + assertEquals(2, getFinalDocCount()); + getHubFlowRunnerConfig(); + Flow flow1 = fm.getFlow("test", "my-test-flow1"); + FlowRunner flowRunner = fm.newFlowRunner() + .withFlow(flow1) + .withBatchSize(10) + .withThreadCount(1) + .withSourceClient(getHubFlowRunnerConfig().newReverseFlowClient()) + .withDestinationDatabase(HubConfig.DEFAULT_STAGING_NAME); + flowRunner.run(); + flowRunner.awaitCompletion(); + getHubAdminConfig(); + assertEquals(2, getStagingDocCount()); + assertEquals(2, getFinalDocCount()); + assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized/harmonized1.xml"), stagingDocMgr.read("/employee1.xml").next().getContent(new DOMHandle()).get() ); + assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized/harmonized2.xml"), stagingDocMgr.read("/employee2.xml").next().getContent(new DOMHandle()).get()); + DocumentMetadataHandle metadata = stagingDocMgr.readMetadata("/employee1.xml", new DocumentMetadataHandle()); + DocumentMetadataHandle.DocumentPermissions permissions = metadata.getPermissions(); + assertEquals(permissions.get("harmonized-reader").toString(), "[READ]", "Default permissions on harmonized documents should contain harmonized-reader/read"); + assertEquals(permissions.get("harmonized-updater").toString(), "[UPDATE]", "Default permissions on harmonized documents should contain harmonized-updater/update"); + } + + @Test + public void testRunFlowWithHeader() throws SAXException, IOException, ParserConfigurationException, XMLStreamException { + addStagingDocs(); + HashMap modules = new HashMap<>(); + modules.put("/entities/test/harmonize/my-test-flow-with-header/flow.xml", "flow-manager-test/my-test-flow-with-header/flow.xml"); + modules.put("/entities/test/harmonize/my-test-flow-with-header/collector.xqy", "flow-manager-test/my-test-flow-with-header/collector.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-header/content.xqy", "flow-manager-test/my-test-flow-with-header/content.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-header/headers.xqy", "flow-manager-test/my-test-flow-with-header/headers.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-header/triples.xqy", "flow-manager-test/my-test-flow-with-header/triples.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-header/writer.xqy", "flow-manager-test/my-test-flow-with-header/writer.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-header/main.xqy", "flow-manager-test/my-test-flow-with-header/main.xqy"); + installModules(modules); + + assertEquals(2, getStagingDocCount()); + assertEquals(0, getFinalDocCount()); + getHubFlowRunnerConfig(); + Flow flow1 = fm.getFlow("test", "my-test-flow-with-header"); + FlowRunner flowRunner = fm.newFlowRunner() + .withFlow(flow1) + .withBatchSize(10) + .withThreadCount(1); + flowRunner.run(); + flowRunner.awaitCompletion(); + getHubAdminConfig(); + assertEquals(2, getStagingDocCount()); + assertEquals(2, getFinalDocCount()); + assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized-with-header/harmonized1.xml"), finalDocMgr.read("/employee1.xml").next().getContent(new DOMHandle()).get() ); + assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized-with-header/harmonized2.xml"), finalDocMgr.read("/employee2.xml").next().getContent(new DOMHandle()).get()); + + runInModules("xdmp:directory-delete(\"/entities/test/harmonize/my-test-flow-with-header/\")"); + } + + @Test + public void testRunFlowWithAll() throws SAXException, IOException, ParserConfigurationException, XMLStreamException { + addStagingDocs(); + HashMap modules = new HashMap<>(); + modules.put("/entities/test/harmonize/my-test-flow-with-all/my-test-flow-with-all.xml", "flow-manager-test/my-test-flow-with-all/my-test-flow-with-all.xml"); + modules.put("/entities/test/harmonize/my-test-flow-with-all/collector.xqy", "flow-manager-test/my-test-flow-with-all/collector.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-all/headers.xqy", "flow-manager-test/my-test-flow-with-all/headers.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-all/content.xqy", "flow-manager-test/my-test-flow-with-all/content.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-all/triples.xqy", "flow-manager-test/my-test-flow-with-all/triples.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-all/writer.xqy", "flow-manager-test/my-test-flow-with-all/writer.xqy"); + modules.put("/entities/test/harmonize/my-test-flow-with-all/main.xqy", "flow-manager-test/my-test-flow-with-all/main.xqy"); + installModules(modules); + + assertEquals(2, getStagingDocCount()); + assertEquals(0, getFinalDocCount()); + getHubFlowRunnerConfig(); + Flow flow1 = fm.getFlow("test", "my-test-flow-with-all"); + FlowRunner flowRunner = fm.newFlowRunner() + .withFlow(flow1) + .withBatchSize(10) + .withThreadCount(1); + flowRunner.run(); + flowRunner.awaitCompletion(); + getHubAdminConfig(); + assertEquals(2, getStagingDocCount()); + assertEquals(2, getFinalDocCount()); + assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized-with-all/harmonized1.xml"), finalDocMgr.read("/employee1.xml").next().getContent(new DOMHandle()).get() ); + assertXMLEqual(getXmlFromResource("flow-manager-test/harmonized-with-all/harmonized2.xml"), finalDocMgr.read("/employee2.xml").next().getContent(new DOMHandle()).get()); + + runInModules("xdmp:directory-delete(\"/entities/test/harmonize/my-test-flow-with-all/\")"); + } + + + @Test + public void testHasLegacyflows() throws IOException, InterruptedException, ParserConfigurationException, SAXException, JSONException { + + scaffolding.createEntity("new-entity"); + scaffolding.createFlow("new-entity", "new-flow", FlowType.HARMONIZE, CodeFormat.XQUERY, DataFormat.XML, false); + assertEquals(0, fm.getLegacyFlows().size()); + + Path projectPath = Paths.get(PROJECT_PATH); + allCombos((codeFormat, dataFormat, flowType, useEs) -> { + Path dir = projectPath.resolve("plugins/entities/my-fun-test/" + flowType.toString()); + String flowName = "legacy-" + codeFormat.toString() + "-" + dataFormat.toString() + "-" + flowType.toString() + "-flow"; + try { + FileUtils.copyDirectory(getResourceFile("scaffolding-test/" + flowName), dir.resolve(flowName).toFile()); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + List legacyFlows = fm.getLegacyFlows(); + assertEquals(8, legacyFlows.size()); + legacyFlows.sort(String::compareToIgnoreCase); + assertEquals("my-fun-test => legacy-sjs-json-harmonize-flow", legacyFlows.get(0)); + assertEquals("my-fun-test => legacy-sjs-json-input-flow", legacyFlows.get(1)); + assertEquals("my-fun-test => legacy-sjs-xml-harmonize-flow", legacyFlows.get(2)); + assertEquals("my-fun-test => legacy-sjs-xml-input-flow", legacyFlows.get(3)); + assertEquals("my-fun-test => legacy-xqy-json-harmonize-flow", legacyFlows.get(4)); + assertEquals("my-fun-test => legacy-xqy-json-input-flow", legacyFlows.get(5)); + assertEquals("my-fun-test => legacy-xqy-xml-harmonize-flow", legacyFlows.get(6)); + assertEquals("my-fun-test => legacy-xqy-xml-input-flow", legacyFlows.get(7)); + } +} diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/flow/FlowRunnerTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/legacy/flow/FlowRunnerTest.java similarity index 99% rename from marklogic-data-hub/src/test/java/com/marklogic/hub/flow/FlowRunnerTest.java rename to marklogic-data-hub/src/test/java/com/marklogic/hub/legacy/flow/FlowRunnerTest.java index 7114a98507..38c0a3f98e 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/flow/FlowRunnerTest.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/legacy/flow/FlowRunnerTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.marklogic.hub.flow; +package com.marklogic.hub.legacy.flow; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/scaffolding/ScaffoldingTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/scaffolding/ScaffoldingTest.java index c40d6fc379..d36155ff82 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/scaffolding/ScaffoldingTest.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/scaffolding/ScaffoldingTest.java @@ -20,9 +20,9 @@ import com.marklogic.hub.HubTestBase; import com.marklogic.hub.ApplicationConfig; import com.marklogic.hub.error.ScaffoldingValidationException; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.scaffold.Scaffolding; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/scaffolding/ScaffoldingValidatorTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/scaffolding/ScaffoldingValidatorTest.java index f9c8e4ece0..f6636130e1 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/scaffolding/ScaffoldingValidatorTest.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/scaffolding/ScaffoldingValidatorTest.java @@ -19,8 +19,8 @@ import com.marklogic.hub.HubTestBase; import com.marklogic.hub.ApplicationConfig; import com.marklogic.hub.error.ScaffoldingValidationException; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.impl.ScaffoldingValidator; import com.marklogic.hub.impl.ScaffoldingImpl; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/util/ComboListener.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/util/ComboListener.java index 8efc792731..38d731ad50 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/util/ComboListener.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/util/ComboListener.java @@ -15,9 +15,9 @@ */ package com.marklogic.hub.util; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; public interface ComboListener { void onCombo(CodeFormat codeFormat, DataFormat dataFormat, FlowType flowType, boolean useEs); diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/EndToEndFlowTests.java b/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/EndToEndFlowTests.java index c491e50754..6ac9723311 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/EndToEndFlowTests.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/EndToEndFlowTests.java @@ -26,10 +26,10 @@ import com.marklogic.client.document.ServerTransform; import com.marklogic.client.io.*; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.FlowManager; +import com.marklogic.hub.legacy.LegacyFlowManager; import com.marklogic.hub.HubConfig; import com.marklogic.hub.HubTestBase; -import com.marklogic.hub.flow.*; +import com.marklogic.hub.legacy.flow.*; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; import com.marklogic.bootstrap.Installer; @@ -112,7 +112,7 @@ public class EndToEndFlowTests extends HubTestBase { private static final int TEST_SIZE = 500; private static final int BATCH_SIZE = 10; @Autowired - private FlowManager flowManager; + private LegacyFlowManager flowManager; private DataMovementManager flowRunnerDataMovementManager; private boolean installDocsFinished = false; diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/MappingE2E.java b/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/MappingE2E.java index 2f41c02588..f345549fd3 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/MappingE2E.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/MappingE2E.java @@ -29,11 +29,11 @@ import com.marklogic.client.io.JacksonHandle; import com.marklogic.client.io.StringHandle; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.FlowManager; +import com.marklogic.hub.legacy.LegacyFlowManager; import com.marklogic.hub.HubConfig; import com.marklogic.hub.HubTestBase; import com.marklogic.hub.MappingManager; -import com.marklogic.hub.flow.*; +import com.marklogic.hub.legacy.flow.*; import com.marklogic.hub.mapping.Mapping; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; @@ -67,7 +67,7 @@ public class MappingE2E extends HubTestBase { private static final int TEST_SIZE = 20; private static final int BATCH_SIZE = 10; @Autowired - private FlowManager flowManager; + private LegacyFlowManager flowManager; private DataMovementManager stagingDataMovementManager; private boolean installDocsFinished = false; private boolean installDocsFailed = false; @@ -82,6 +82,7 @@ public class MappingE2E extends HubTestBase { @BeforeAll public static void setup() { XMLUnit.setIgnoreWhitespace(true); + new Installer().deleteProjectDir(); new Installer().setupProject(); } diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/StreamCollectorTest.java b/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/StreamCollectorTest.java index 2127e39e57..c7c04950b6 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/StreamCollectorTest.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub_integration/StreamCollectorTest.java @@ -24,10 +24,10 @@ import com.marklogic.client.io.JacksonHandle; import com.marklogic.client.io.StringHandle; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.FlowManager; +import com.marklogic.hub.legacy.LegacyFlowManager; import com.marklogic.hub.HubConfig; import com.marklogic.hub.HubTestBase; -import com.marklogic.hub.flow.*; +import com.marklogic.hub.legacy.flow.*; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; import org.custommonkey.xmlunit.XMLUnit; @@ -67,7 +67,7 @@ public class StreamCollectorTest extends HubTestBase { private String installDocError; @Autowired - private FlowManager fm; + private LegacyFlowManager fm; @Autowired private Scaffolding scaffolding; diff --git a/marklogic-data-hub/src/test/resources/flow-manager-test/test-flow.flow.json b/marklogic-data-hub/src/test/resources/flow-manager-test/test-flow.flow.json new file mode 100644 index 0000000000..6c1e40d9ba --- /dev/null +++ b/marklogic-data-hub/src/test/resources/flow-manager-test/test-flow.flow.json @@ -0,0 +1,14 @@ +{ + "name": "test-flow", + "Description": "this is an example", + "Identifier": "(some identifier or search)", + "Steps": [{ + "0": { + "type": "mapping", + "name": "person-mapping1.json", + "identifier": "null", + "retryLimit": 0, + "options": {} + } + }] +} diff --git a/marklogic-data-hub/src/trace-ui/package-lock.json b/marklogic-data-hub/src/trace-ui/package-lock.json index 09c8c3a4e5..400f511394 100644 --- a/marklogic-data-hub/src/trace-ui/package-lock.json +++ b/marklogic-data-hub/src/trace-ui/package-lock.json @@ -11,7 +11,7 @@ "dev": true, "requires": { "@angular-devkit/core": "0.6.3", - "rxjs": "^6.0.0" + "rxjs": "6.3.3" } }, "@angular-devkit/build-angular": { @@ -98,10 +98,10 @@ "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "ansi-styles": { @@ -190,11 +190,11 @@ "dev": true, "optional": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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" } }, "chokidar": { @@ -225,7 +225,7 @@ "dev": true, "optional": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "expand-brackets": { @@ -434,8 +434,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "ajv": "6.6.2", + "har-schema": "2.0.0" } }, "http-signature": { @@ -445,9 +445,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" } }, "is-accessor-descriptor": { @@ -567,7 +567,7 @@ "dev": true, "optional": true, "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.37.0" } }, "node-sass": { @@ -577,25 +577,25 @@ "dev": true, "optional": true, "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.10.0", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.3", + "get-stdin": "4.0.1", + "glob": "7.1.3", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.1", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.10.0", + "node-gyp": "3.8.0", + "npmlog": "4.1.2", + "request": "2.88.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.1", + "true-case-path": "1.0.3" } }, "oauth-sign": { @@ -618,26 +618,26 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.1.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.21", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" } }, "rxjs": { @@ -700,8 +700,8 @@ "dev": true, "optional": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "1.1.29", + "punycode": "1.4.1" }, "dependencies": { "punycode": { @@ -761,8 +761,8 @@ "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "2.0.1", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -815,10 +815,10 @@ "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "anymatch": { @@ -1212,10 +1212,10 @@ "integrity": "sha512-97hFVW6in8oYJUEqjmUP0Tb/mPlTG3sc0THpe5MCGEkDPjlp2cObt9rUCAVOjugBlScV8rzTpVQ+95PT60Py8A==", "dev": true, "requires": { - "ajv": "~6.4.0", - "chokidar": "^2.0.3", - "rxjs": "^6.0.0", - "source-map": "^0.5.6" + "ajv": "6.4.0", + "chokidar": "2.0.3", + "rxjs": "6.3.3", + "source-map": "0.5.7" }, "dependencies": { "anymatch": { @@ -1224,8 +1224,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, "arr-diff": { @@ -1246,16 +1246,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -1264,7 +1264,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1275,18 +1275,18 @@ "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.1.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.0" + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "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", + "upath": "1.1.0" } }, "expand-brackets": { @@ -1295,13 +1295,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -1310,7 +1310,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -1319,7 +1319,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -1328,7 +1328,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1337,7 +1337,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1348,7 +1348,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1357,7 +1357,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1368,9 +1368,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -1387,14 +1387,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -1403,7 +1403,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -1412,7 +1412,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1423,10 +1423,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -1435,7 +1435,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1446,8 +1446,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { "is-glob": { @@ -1456,7 +1456,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -1467,7 +1467,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -1476,7 +1476,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -1485,9 +1485,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "is-extglob": { @@ -1502,7 +1502,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-number": { @@ -1511,7 +1511,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1520,7 +1520,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1543,19 +1543,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } } } @@ -1567,13 +1567,13 @@ "dev": true, "requires": { "@angular-devkit/core": "0.6.3", - "rxjs": "^6.0.0" + "rxjs": "6.3.3" } }, "@angular-mdl/core": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/@angular-mdl/core/-/core-4.0.8.tgz", - "integrity": "sha512-ofAjjo/0gQeast4kUtTjvOhXumNg50z3oh8m/OlPrBlii4/iTazEqHTsQBtac33h2B4ovMm+viwAATDlpLJm+g==" + "integrity": "sha1-Ad7nxvkmY6V7p58kjYXm8jProHM=" }, "@angular-mdl/popover": { "version": "0.10.0", @@ -1590,7 +1590,7 @@ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.2.tgz", "integrity": "sha512-QoNJ/L0Xgtrj1KBp8wvxhHwRt+sQ5tBihWm82UbNgN82ZNnfNzQoAqtahbZN5AY7XFmGbDX+lVt3TdO8omXhmg==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "@angular/cli": { @@ -1604,13 +1604,13 @@ "@angular-devkit/schematics": "0.6.3", "@schematics/angular": "0.6.3", "@schematics/update": "0.6.3", - "opn": "~5.3.0", - "resolve": "^1.1.7", - "rxjs": "^6.0.0", - "semver": "^5.1.0", - "silent-error": "^1.0.0", - "symbol-observable": "^1.2.0", - "yargs-parser": "^10.0.0" + "opn": "5.3.0", + "resolve": "1.5.0", + "rxjs": "6.3.3", + "semver": "5.6.0", + "silent-error": "1.1.0", + "symbol-observable": "1.2.0", + "yargs-parser": "10.0.0" } }, "@angular/common": { @@ -1618,7 +1618,7 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.2.tgz", "integrity": "sha512-Yc3NnLGs1ltnDhUCOoMCQMRSkJv/sCv+jKx3uSdrvd8Y55APl2boZhZUK4WphPfWIkpvC7odpiLXAmnVgP6vcw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "@angular/compiler": { @@ -1626,7 +1626,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.2.tgz", "integrity": "sha512-uKuM7dcTWwcElklT4E/tckp5fnGNUq4wDna3gZWO6fvc7FQK0SUU4l+A6C1d5YdCRgAsv6gxIrk3MxbSF9UwEw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "@angular/compiler-cli": { @@ -1635,10 +1635,10 @@ "integrity": "sha512-6hupeihL+MKYbP0xvHZiaVpYVF1XAlLpI1aTVLUhpzgnR8vgXCwni9iJlr7BZFyicVgApn6l7Oh2xIvMWftYhw==", "dev": true, "requires": { - "chokidar": "^1.4.2", - "minimist": "^1.2.0", - "reflect-metadata": "^0.1.2", - "tsickle": "^0.27.2" + "chokidar": "1.7.0", + "minimist": "1.2.0", + "reflect-metadata": "0.1.12", + "tsickle": "0.27.5" } }, "@angular/core": { @@ -1646,7 +1646,7 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.2.tgz", "integrity": "sha512-+ahJofKZFyaq0kLhKUOCa3Fo4WQ4mkMmYRqwFjKgjPupzPgMh0FkBsojuP1WiBd5KTIkv7U8B4sTziUxRDrKgg==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "@angular/forms": { @@ -1654,7 +1654,7 @@ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.2.tgz", "integrity": "sha512-Oc234cLjTj1tx2gF/nS/TIC3Auc+LCyC8H6GYqTxXQUyZQeGHqUptvDQz3KwM9Num3EKFUr9J2yzGPnz6lZVmQ==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "@angular/http": { @@ -1662,7 +1662,7 @@ "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.2.tgz", "integrity": "sha512-BONrdNMKOaQdXiWnrCAaUiP1akf/nuUG6xm/PJe684SrgcqWHN4JJuwgMhGRGIZZCIKEWcIEaZSp+DbWqnj1kg==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "@angular/language-service": { @@ -1676,7 +1676,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.2.tgz", "integrity": "sha512-iMBHckhknJ8Wfw9ZVloiw0WPZDtzQFLE2e7D42of7SgXuHloStXUchb0qLr6ZTZwTY0oBPSvDKgJJVmEjZUZvw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "@angular/platform-browser-dynamic": { @@ -1684,7 +1684,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.2.tgz", "integrity": "sha512-g1EC0wIWd4OhcEvUnisTfp3y0eMAXgXbACdtgsrozG//xzyqiRFUnBTYTAP4ecninCEltyZYK7EBGfzp8KwQjw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "@angular/router": { @@ -1692,7 +1692,7 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.2.tgz", "integrity": "sha512-XqTtfs/UzT2k2MeVQG1pOP+wR1zcH8V71S6kmWIwFcfyKUgZfIm45sNsZyBZPwY2RUqwCeZYQFjPlVW8wD1PBw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "@ngtools/webpack": { @@ -1727,10 +1727,10 @@ "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "anymatch": { @@ -2122,8 +2122,8 @@ "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "2.0.1", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -2144,7 +2144,7 @@ "requires": { "@angular-devkit/core": "0.6.3", "@angular-devkit/schematics": "0.6.3", - "typescript": ">=2.6.2 <2.8" + "typescript": "2.7.2" } }, "@schematics/update": { @@ -2155,10 +2155,10 @@ "requires": { "@angular-devkit/core": "0.6.3", "@angular-devkit/schematics": "0.6.3", - "npm-registry-client": "^8.5.1", - "rxjs": "^6.0.0", - "semver": "^5.3.0", - "semver-intersect": "^1.1.2" + "npm-registry-client": "8.5.1", + "rxjs": "6.3.3", + "semver": "5.6.0", + "semver-intersect": "1.3.1" } }, "@types/codemirror": { @@ -2178,7 +2178,7 @@ "integrity": "sha512-2ZOKrxb8bKRmP/po5ObYnRDgFE4i+lQiEB27bAMmtMWLgJSqlIDqlLx6S0IRorpOmOPRQ6O80NujTmQAtBkeNw==", "dev": true, "requires": { - "@types/jasmine": "*" + "@types/jasmine": "2.8.15" } }, "@types/lodash": { @@ -2235,9 +2235,9 @@ "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", "dev": true, "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" + "@types/node": "9.4.7", + "@types/source-list-map": "0.1.2", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -2322,7 +2322,7 @@ "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "dev": true, "requires": { - "@xtuc/ieee754": "^1.2.0" + "@xtuc/ieee754": "1.2.0" } }, "@webassemblyjs/leb128": { @@ -2443,7 +2443,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "~2.1.18", + "mime-types": "2.1.18", "negotiator": "0.6.1" }, "dependencies": { @@ -2459,7 +2459,7 @@ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.33.0" } } } @@ -2476,7 +2476,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "^5.0.0" + "acorn": "5.7.3" } }, "adm-zip": { @@ -2497,7 +2497,7 @@ "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "es6-promisify": "5.0.0" } }, "ajv": { @@ -2506,10 +2506,10 @@ "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "dev": true, "requires": { - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0", - "uri-js": "^3.0.2" + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" } }, "ajv-errors": { @@ -2530,9 +2530,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" } }, "amdefine": { @@ -2563,7 +2563,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "anymatch": { @@ -2572,8 +2572,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" } }, "app-root-path": { @@ -2588,7 +2588,7 @@ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { - "default-require-extensions": "^1.0.0" + "default-require-extensions": "1.0.0" } }, "aproba": { @@ -2601,8 +2601,8 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "argparse": { @@ -2611,7 +2611,7 @@ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "arr-diff": { @@ -2620,7 +2620,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "arr-flatten": "1.1.0" } }, "arr-flatten": { @@ -2658,7 +2658,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "array-uniq": "1.0.3" } }, "array-uniq": { @@ -2703,9 +2703,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -2734,7 +2734,7 @@ "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=", "dev": true, "requires": { - "lodash": "^4.14.0" + "lodash": "4.17.11" } }, "async-each": { @@ -2771,12 +2771,12 @@ "integrity": "sha512-/XSnzDepRkAU//xLcXA/lUWxpsBuw0WiriAHOqnxkuCtzLhaz+fL4it4gp20BQ8n5SyLzK/FOc7A0+u/rti2FQ==", "dev": true, "requires": { - "browserslist": "^4.3.6", - "caniuse-lite": "^1.0.30000921", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.6", - "postcss-value-parser": "^3.3.1" + "browserslist": "4.4.1", + "caniuse-lite": "1.0.30000929", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "7.0.11", + "postcss-value-parser": "3.3.1" } }, "aws-sign2": { @@ -2796,9 +2796,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" }, "dependencies": { "ansi-styles": { @@ -2813,11 +2813,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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": { @@ -2834,14 +2834,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "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" + "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.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" } }, "babel-messages": { @@ -2850,7 +2850,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-runtime": { @@ -2859,8 +2859,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.6.2", + "regenerator-runtime": "0.11.1" } }, "babel-template": { @@ -2869,11 +2869,11 @@ "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-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.11" } }, "babel-traverse": { @@ -2882,15 +2882,15 @@ "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.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "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.4", + "lodash": "4.17.11" } }, "babel-types": { @@ -2899,10 +2899,10 @@ "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" + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "1.0.3" } }, "babylon": { @@ -2928,13 +2928,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -2943,7 +2943,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -2952,7 +2952,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -2961,7 +2961,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -2970,9 +2970,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "isobject": { @@ -3019,7 +3019,7 @@ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "better-assert": { @@ -3054,7 +3054,7 @@ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "requires": { - "inherits": "~2.0.0" + "inherits": "2.0.3" } }, "blocking-proxy": { @@ -3063,7 +3063,7 @@ "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "1.2.0" } }, "bluebird": { @@ -3085,15 +3085,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "~1.6.16" + "type-is": "1.6.16" } }, "bonjour": { @@ -3102,12 +3102,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "array-flatten": "2.1.2", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" } }, "brace-expansion": { @@ -3115,7 +3115,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -3125,9 +3125,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" } }, "brorand": { @@ -3142,12 +3142,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" } }, "browserify-cipher": { @@ -3156,9 +3156,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -3167,10 +3167,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" }, "dependencies": { "safe-buffer": { @@ -3187,8 +3187,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "randombytes": "2.0.6" } }, "browserify-sign": { @@ -3197,13 +3197,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.3" } }, "browserify-zlib": { @@ -3212,7 +3212,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "~1.0.5" + "pako": "1.0.6" } }, "browserslist": { @@ -3221,9 +3221,9 @@ "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000929", - "electron-to-chromium": "^1.3.103", - "node-releases": "^1.1.3" + "caniuse-lite": "1.0.30000929", + "electron-to-chromium": "1.3.103", + "node-releases": "1.1.3" } }, "browserstack": { @@ -3232,7 +3232,7 @@ "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==", "dev": true, "requires": { - "https-proxy-agent": "^2.2.1" + "https-proxy-agent": "2.2.1" } }, "buffer": { @@ -3241,9 +3241,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" } }, "buffer-alloc": { @@ -3252,8 +3252,8 @@ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "buffer-alloc-unsafe": "1.1.0", + "buffer-fill": "1.0.0" } }, "buffer-alloc-unsafe": { @@ -3315,19 +3315,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" + "bluebird": "3.5.1", + "chownr": "1.1.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.3", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "5.3.0", + "unique-filename": "1.1.1", + "y18n": "4.0.0" } }, "cache-base": { @@ -3336,15 +3336,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "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" }, "dependencies": { "isobject": { @@ -3372,8 +3372,8 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "2.1.1", + "map-obj": "1.0.1" }, "dependencies": { "camelcase": { @@ -3401,8 +3401,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "align-text": "0.1.4", + "lazy-cache": "1.0.4" } }, "chalk": { @@ -3411,9 +3411,9 @@ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" }, "dependencies": { "supports-color": { @@ -3422,7 +3422,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -3433,15 +3433,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.4", + "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": { @@ -3456,7 +3456,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "cipher-base": { @@ -3465,8 +3465,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.1" } }, "circular-dependency-plugin": { @@ -3487,10 +3487,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -3499,7 +3499,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "isobject": { @@ -3521,7 +3521,7 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "~0.6.0" + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -3537,9 +3537,9 @@ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz", "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=", "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" + "good-listener": "1.2.2", + "select": "1.1.2", + "tiny-emitter": "2.0.2" } }, "cliui": { @@ -3547,9 +3547,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" } }, "clone": { @@ -3564,10 +3564,10 @@ "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "dev": true, "requires": { - "for-own": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "for-own": "1.0.0", + "is-plain-object": "2.0.4", + "kind-of": "6.0.2", + "shallow-clone": "1.0.0" }, "dependencies": { "for-own": { @@ -3576,7 +3576,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "kind-of": { @@ -3603,12 +3603,12 @@ "integrity": "sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==", "dev": true, "requires": { - "app-root-path": "^2.1.0", - "css-selector-tokenizer": "^0.7.0", - "cssauron": "^1.4.0", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.1" + "app-root-path": "2.1.0", + "css-selector-tokenizer": "0.7.1", + "cssauron": "1.4.0", + "semver-dsl": "1.0.1", + "source-map": "0.5.7", + "sprintf-js": "1.1.2" }, "dependencies": { "sprintf-js": { @@ -3630,8 +3630,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color-convert": { @@ -3640,7 +3640,7 @@ "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=", "dev": true, "requires": { - "color-name": "^1.1.1" + "color-name": "1.1.3" } }, "color-name": { @@ -3661,7 +3661,7 @@ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "dev": true, "requires": { - "lodash": "^4.5.0" + "lodash": "4.17.11" } }, "combined-stream": { @@ -3670,7 +3670,7 @@ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { @@ -3715,7 +3715,7 @@ "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "dev": true, "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": "1.37.0" }, "dependencies": { "mime-db": { @@ -3732,13 +3732,13 @@ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "2.0.15", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "1.0.1", "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "safe-buffer": { @@ -3760,10 +3760,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" } }, "connect": { @@ -3774,7 +3774,7 @@ "requires": { "debug": "2.6.9", "finalhandler": "1.1.0", - "parseurl": "~1.3.2", + "parseurl": "1.3.2", "utils-merge": "1.0.1" }, "dependencies": { @@ -3785,12 +3785,12 @@ "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" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" } }, "statuses": { @@ -3813,7 +3813,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "^0.1.4" + "date-now": "0.1.4" } }, "console-control-strings": { @@ -3845,7 +3845,7 @@ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "safe-buffer": "5.1.1" } }, "cookie": { @@ -3866,12 +3866,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "copy-descriptor": { @@ -3886,14 +3886,14 @@ "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", - "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "1.1.0", + "minimatch": "3.0.4", + "p-limit": "1.3.0", + "serialize-javascript": "1.6.1" }, "dependencies": { "is-extglob": { @@ -3929,10 +3929,10 @@ "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", "dev": true, "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" + "is-directory": "0.3.1", + "js-yaml": "3.12.1", + "parse-json": "4.0.0", + "require-from-string": "2.0.2" }, "dependencies": { "esprima": { @@ -3947,8 +3947,8 @@ "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.9", + "esprima": "4.0.1" } }, "parse-json": { @@ -3957,8 +3957,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" } } } @@ -3969,8 +3969,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.11.8", + "elliptic": "6.4.1" } }, "create-hash": { @@ -3979,11 +3979,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { @@ -3992,12 +3992,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" } }, "cross-spawn": { @@ -4005,8 +4005,8 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "lru-cache": "4.1.3", + "which": "1.3.0" } }, "crypto-browserify": { @@ -4015,17 +4015,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "css-parse": { @@ -4040,9 +4040,9 @@ "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" + "cssesc": "0.1.0", + "fastparse": "1.1.2", + "regexpu-core": "1.0.0" } }, "cssauron": { @@ -4051,7 +4051,7 @@ "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", "dev": true, "requires": { - "through": "X.X.X" + "through": "2.3.8" } }, "cssesc": { @@ -4065,7 +4065,7 @@ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "requires": { - "array-find-index": "^1.0.1" + "array-find-index": "1.0.2" } }, "custom-event": { @@ -4085,7 +4085,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" }, "dependencies": { "assert-plus": { @@ -4115,7 +4115,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "requires": { "ms": "2.0.0" } @@ -4149,8 +4149,8 @@ "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", "dev": true, "requires": { - "execa": "^0.10.0", - "ip-regex": "^2.1.0" + "execa": "0.10.0", + "ip-regex": "2.1.0" } }, "default-require-extensions": { @@ -4159,7 +4159,7 @@ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { - "strip-bom": "^2.0.0" + "strip-bom": "2.0.0" } }, "define-property": { @@ -4168,8 +4168,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -4178,7 +4178,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -4187,7 +4187,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -4196,9 +4196,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "isobject": { @@ -4221,12 +4221,12 @@ "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.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "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.3" }, "dependencies": { "globby": { @@ -4235,11 +4235,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "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": { @@ -4279,8 +4279,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "destroy": { @@ -4295,7 +4295,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "detect-node": { @@ -4322,9 +4322,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" } }, "dir-glob": { @@ -4333,7 +4333,7 @@ "integrity": "sha512-UN6X6XwRjllabfRhBdkVSo63uurJ8nSvMGrwl94EYVz6g+exhTV+yVSYk5VC/xl3MBFBTtC0J20uFKce4Brrng==", "dev": true, "requires": { - "path-type": "^3.0.0" + "path-type": "3.0.0" } }, "dns-equal": { @@ -4348,8 +4348,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "ip": "1.1.5", + "safe-buffer": "5.1.1" } }, "dns-txt": { @@ -4358,7 +4358,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "^1.0.0" + "buffer-indexof": "1.1.1" } }, "dom-serialize": { @@ -4367,10 +4367,10 @@ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.1", + "void-elements": "2.0.1" } }, "domain-browser": { @@ -4385,10 +4385,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" } }, "ecc-jsbn": { @@ -4397,7 +4397,7 @@ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "0.1.1" } }, "ee-first": { @@ -4418,13 +4418,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "emojis-list": { @@ -4445,7 +4445,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "^1.4.0" + "once": "1.4.0" } }, "engine.io": { @@ -4454,12 +4454,12 @@ "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "dev": true, "requires": { - "accepts": "~1.3.4", + "accepts": "1.3.5", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "ws": "3.3.3" }, "dependencies": { "debug": { @@ -4481,14 +4481,14 @@ "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", "yeast": "0.1.2" }, "dependencies": { @@ -4510,10 +4510,10 @@ "dev": true, "requires": { "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", + "arraybuffer.slice": "0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.5", - "has-binary2": "~1.0.2" + "has-binary2": "1.0.3" } }, "enhanced-resolve": { @@ -4522,9 +4522,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "tapable": "1.1.1" } }, "ent": { @@ -4539,7 +4539,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "~1.0.1" + "prr": "1.0.1" } }, "error-ex": { @@ -4547,7 +4547,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "es6-promise": { @@ -4562,7 +4562,7 @@ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "es6-promise": "^4.0.3" + "es6-promise": "4.2.5" } }, "escape-html": { @@ -4582,8 +4582,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "esprima": { @@ -4598,7 +4598,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.2.0" } }, "estraverse": { @@ -4636,7 +4636,7 @@ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "requires": { - "original": "^1.0.0" + "original": "1.0.2" } }, "evp_bytestokey": { @@ -4645,8 +4645,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.5", + "safe-buffer": "5.1.1" } }, "execa": { @@ -4655,13 +4655,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "6.0.5", + "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" }, "dependencies": { "cross-spawn": { @@ -4670,11 +4670,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.0" } } } @@ -4691,9 +4691,9 @@ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" }, "dependencies": { "braces": { @@ -4702,7 +4702,7 @@ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "dev": true, "requires": { - "expand-range": "^0.1.0" + "expand-range": "0.1.1" } }, "expand-range": { @@ -4711,8 +4711,8 @@ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" + "is-number": "0.1.1", + "repeat-string": "0.2.2" } }, "is-number": { @@ -4735,7 +4735,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "is-posix-bracket": "0.1.1" } }, "expand-range": { @@ -4744,7 +4744,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "^2.1.0" + "fill-range": "2.2.4" } }, "express": { @@ -4753,36 +4753,36 @@ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "~1.0.4", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", + "proxy-addr": "2.0.4", "qs": "6.5.2", - "range-parser": "~1.2.0", + "range-parser": "1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "array-flatten": { @@ -4798,15 +4798,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "~1.6.16" + "type-is": "1.6.16" } }, "iconv-lite": { @@ -4815,7 +4815,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "raw-body": { @@ -4850,8 +4850,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -4860,7 +4860,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -4871,7 +4871,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "extsprintf": { @@ -4906,7 +4906,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "requires": { - "websocket-driver": ">=0.5.1" + "websocket-driver": "0.7.0" } }, "figgy-pudding": { @@ -4921,8 +4921,8 @@ "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", "dev": true, "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" + "loader-utils": "1.1.0", + "schema-utils": "1.0.0" } }, "filename-regex": { @@ -4937,8 +4937,8 @@ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" + "glob": "7.1.2", + "minimatch": "3.0.4" } }, "fill-range": { @@ -4947,11 +4947,11 @@ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.0.0", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" } }, "finalhandler": { @@ -4961,12 +4961,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" } }, "find-cache-dir": { @@ -4975,9 +4975,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" } }, "find-up": { @@ -4986,7 +4986,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "flatted": { @@ -5001,8 +5001,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "follow-redirects": { @@ -5011,7 +5011,7 @@ "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", "dev": true, "requires": { - "debug": "^3.1.0" + "debug": "3.1.0" }, "dependencies": { "debug": { @@ -5042,7 +5042,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "forever-agent": { @@ -5055,9 +5055,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.17" }, "dependencies": { "combined-stream": { @@ -5065,7 +5065,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } } } @@ -5082,7 +5082,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "fresh": { @@ -5097,8 +5097,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "fs": { @@ -5113,7 +5113,7 @@ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { - "null-check": "^1.0.0" + "null-check": "1.0.0" } }, "fs-extra": { @@ -5122,9 +5122,9 @@ "integrity": "sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" } }, "fs-write-stream-atomic": { @@ -5133,10 +5133,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" } }, "fs.realpath": { @@ -5149,17 +5149,15 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, - "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" }, "dependencies": { "abbrev": { "version": "1.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ansi-regex": { "version": "2.1.1", @@ -5169,17 +5167,15 @@ "aproba": { "version": "1.2.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "are-we-there-yet": { "version": "1.1.4", "bundled": true, "dev": true, - "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "balanced-match": { @@ -5192,15 +5188,14 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, "chownr": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "code-point-at": { "version": "1.1.0", @@ -5220,14 +5215,12 @@ "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "debug": { "version": "2.6.9", "bundled": true, "dev": true, - "optional": true, "requires": { "ms": "2.0.0" } @@ -5235,98 +5228,87 @@ "deep-extend": { "version": "0.5.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "delegates": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "detect-libc": { "version": "1.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "fs-minipass": { "version": "1.2.5", "bundled": true, "dev": true, - "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "gauge": { "version": "2.7.4", "bundled": true, "dev": true, - "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "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, "dev": true, - "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "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, - "dev": true, - "optional": true + "dev": true }, "iconv-lite": { "version": "0.4.21", "bundled": true, "dev": true, - "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": "2.1.2" } }, "ignore-walk": { "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { "version": "1.0.6", "bundled": true, "dev": true, - "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -5337,29 +5319,27 @@ "ini": { "version": "1.3.5", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minimatch": { "version": "3.0.4", "bundled": true, "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -5372,17 +5352,16 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "minizlib": { "version": "1.1.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "mkdirp": { @@ -5396,74 +5375,67 @@ "ms": { "version": "2.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "needle": { "version": "2.2.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" } }, "node-pre-gyp": { "version": "0.10.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "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.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" } }, "nopt": { "version": "4.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { "version": "1.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "npm-packlist": { "version": "1.1.10", "bundled": true, "dev": true, - "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" } }, "npmlog": { "version": "4.1.2", "bundled": true, "dev": true, - "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "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": { @@ -5474,68 +5446,60 @@ "object-assign": { "version": "4.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "once": { "version": "1.4.0", "bundled": true, "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "os-tmpdir": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "osenv": { "version": "0.1.5", "bundled": true, "dev": true, - "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "process-nextick-args": { "version": "2.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "rc": { "version": "1.2.7", "bundled": true, "dev": true, - "optional": true, "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { "version": "1.2.0", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -5543,24 +5507,22 @@ "version": "2.3.6", "bundled": true, "dev": true, - "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "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, "dev": true, - "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "safe-buffer": { @@ -5571,50 +5533,44 @@ "safer-buffer": { "version": "2.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "sax": { "version": "1.2.4", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "semver": { "version": "5.5.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "set-blocking": { "version": "2.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "signal-exit": { "version": "3.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "string-width": { "version": "1.0.2", "bundled": true, "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "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, "dev": true, - "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "strip-ansi": { @@ -5622,43 +5578,39 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { "version": "2.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "tar": { "version": "4.4.1", "bundled": true, "dev": true, - "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "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, - "dev": true, - "optional": true + "dev": true }, "wide-align": { "version": "1.1.2", "bundled": true, "dev": true, - "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "1.0.2" } }, "wrappy": { @@ -5678,10 +5630,10 @@ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.3" } }, "gauge": { @@ -5689,14 +5641,14 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "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" } }, "gaze": { @@ -5704,7 +5656,7 @@ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "requires": { - "globule": "^1.0.0" + "globule": "1.2.1" } }, "get-caller-file": { @@ -5734,7 +5686,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" }, "dependencies": { "assert-plus": { @@ -5747,14 +5699,14 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "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": { @@ -5763,8 +5715,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "glob-parent": "2.0.0", + "is-glob": "2.0.1" } }, "glob-parent": { @@ -5773,7 +5725,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "2.0.1" } }, "globals": { @@ -5788,12 +5740,12 @@ "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "dev": true, "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" + "array-union": "1.0.2", + "dir-glob": "2.2.1", + "glob": "7.1.2", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" } }, "globule": { @@ -5801,9 +5753,9 @@ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" + "glob": "7.1.2", + "lodash": "4.17.11", + "minimatch": "3.0.4" } }, "good-listener": { @@ -5811,7 +5763,7 @@ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", "requires": { - "delegate": "^3.1.2" + "delegate": "3.2.0" } }, "graceful-fs": { @@ -5831,10 +5783,10 @@ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" }, "dependencies": { "async": { @@ -5857,8 +5809,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", + "center-align": "0.1.3", + "right-align": "0.1.3", "wordwrap": "0.0.2" } }, @@ -5868,7 +5820,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } }, "uglify-js": { @@ -5878,9 +5830,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" }, "dependencies": { "source-map": { @@ -5899,9 +5851,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", "window-size": "0.1.0" } } @@ -5918,8 +5870,8 @@ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" + "ajv": "5.5.2", + "har-schema": "2.0.0" }, "dependencies": { "ajv": { @@ -5928,10 +5880,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } } } @@ -5941,7 +5893,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-binary2": { @@ -5984,9 +5936,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" }, "dependencies": { "isobject": { @@ -6003,8 +5955,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "is-number": { @@ -6013,7 +5965,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -6022,7 +5974,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6033,7 +5985,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6044,8 +5996,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.1" } }, "hash.js": { @@ -6054,8 +6006,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "hat": { @@ -6070,9 +6022,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "homedir-polyfill": { @@ -6081,7 +6033,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "^1.0.0" + "parse-passwd": "1.0.0" } }, "hosted-git-info": { @@ -6095,10 +6047,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" } }, "html-entities": { @@ -6119,10 +6071,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "statuses": "1.4.0" } }, "http-parser-js": { @@ -6136,9 +6088,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "eventemitter3": "3.1.0", + "follow-redirects": "1.4.1", + "requires-port": "1.0.0" } }, "http-proxy-middleware": { @@ -6147,10 +6099,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "^1.16.2", - "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" + "http-proxy": "1.17.0", + "is-glob": "4.0.0", + "lodash": "4.17.11", + "micromatch": "3.1.10" }, "dependencies": { "arr-diff": { @@ -6171,16 +6123,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -6189,7 +6141,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -6200,13 +6152,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -6215,7 +6167,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -6224,7 +6176,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -6233,7 +6185,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -6242,7 +6194,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6253,7 +6205,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -6262,7 +6214,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6273,9 +6225,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -6292,14 +6244,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -6308,7 +6260,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -6317,7 +6269,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -6328,10 +6280,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -6340,7 +6292,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -6351,7 +6303,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -6360,7 +6312,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -6369,9 +6321,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "is-extglob": { @@ -6386,7 +6338,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-number": { @@ -6395,7 +6347,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -6404,7 +6356,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6427,19 +6379,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } } } @@ -6449,9 +6401,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" } }, "https-browserify": { @@ -6466,8 +6418,8 @@ "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "dev": true, "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" + "agent-base": "4.2.1", + "debug": "3.2.6" }, "dependencies": { "debug": { @@ -6476,7 +6428,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -6493,7 +6445,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ieee754": { @@ -6533,7 +6485,7 @@ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "import-from": "^2.1.0" + "import-from": "2.1.0" } }, "import-from": { @@ -6542,7 +6494,7 @@ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "3.0.0" } }, "import-local": { @@ -6551,8 +6503,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" }, "dependencies": { "find-up": { @@ -6561,7 +6513,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -6570,8 +6522,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -6580,7 +6532,7 @@ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -6589,7 +6541,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.1.0" } }, "p-try": { @@ -6604,7 +6556,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } } } @@ -6625,7 +6577,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "indexof": { @@ -6639,8 +6591,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -6660,8 +6612,8 @@ "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "default-gateway": "^2.6.0", - "ipaddr.js": "^1.5.2" + "default-gateway": "2.7.2", + "ipaddr.js": "1.8.0" } }, "invariant": { @@ -6670,7 +6622,7 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.3.1" } }, "invert-kv": { @@ -6702,7 +6654,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-arrayish": { @@ -6716,13 +6668,13 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "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": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-builtin-module": { @@ -6730,7 +6682,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { - "builtin-modules": "^1.0.0" + "builtin-modules": "1.1.1" } }, "is-data-descriptor": { @@ -6739,7 +6691,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-descriptor": { @@ -6748,9 +6700,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -6779,7 +6731,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "^2.0.0" + "is-primitive": "2.0.0" } }, "is-extendable": { @@ -6799,7 +6751,7 @@ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { @@ -6807,7 +6759,7 @@ "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.0" + "number-is-nan": "1.0.1" } }, "is-glob": { @@ -6816,7 +6768,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "is-number": { @@ -6825,7 +6777,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-odd": { @@ -6834,7 +6786,7 @@ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "^4.0.0" + "is-number": "4.0.0" }, "dependencies": { "is-number": { @@ -6857,7 +6809,7 @@ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { @@ -6866,7 +6818,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "1.0.2" } }, "is-plain-object": { @@ -6875,7 +6827,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" }, "dependencies": { "isobject": { @@ -6937,7 +6889,7 @@ "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", "dev": true, "requires": { - "buffer-alloc": "^1.2.0" + "buffer-alloc": "1.2.0" } }, "isexe": { @@ -6965,20 +6917,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.11", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.0", + "wordwrap": "1.0.0" }, "dependencies": { "async": { @@ -6993,11 +6945,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" } }, "estraverse": { @@ -7012,11 +6964,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^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": { @@ -7038,7 +6990,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } }, "supports-color": { @@ -7047,7 +6999,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } }, "wordwrap": { @@ -7064,18 +7016,18 @@ "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", "dev": true, "requires": { - "async": "^2.1.4", - "compare-versions": "^3.1.0", - "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-hook": "^1.2.0", - "istanbul-lib-instrument": "^1.10.1", - "istanbul-lib-report": "^1.1.4", - "istanbul-lib-source-maps": "^1.2.4", - "istanbul-reports": "^1.3.0", - "js-yaml": "^3.7.0", - "mkdirp": "^0.5.1", - "once": "^1.4.0" + "async": "2.6.0", + "compare-versions": "3.2.1", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.2.0", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.4", + "istanbul-lib-source-maps": "1.2.4", + "istanbul-reports": "1.3.0", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "once": "1.4.0" } }, "istanbul-instrumenter-loader": { @@ -7084,10 +7036,10 @@ "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", "dev": true, "requires": { - "convert-source-map": "^1.5.0", - "istanbul-lib-instrument": "^1.7.3", - "loader-utils": "^1.1.0", - "schema-utils": "^0.3.0" + "convert-source-map": "1.6.0", + "istanbul-lib-instrument": "1.10.1", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" }, "dependencies": { "ajv": { @@ -7096,10 +7048,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "schema-utils": { @@ -7108,7 +7060,7 @@ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", "dev": true, "requires": { - "ajv": "^5.0.0" + "ajv": "5.5.2" } } } @@ -7125,7 +7077,7 @@ "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", "dev": true, "requires": { - "append-transform": "^0.4.0" + "append-transform": "0.4.0" } }, "istanbul-lib-instrument": { @@ -7134,13 +7086,13 @@ "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", - "semver": "^5.3.0" + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.0", + "semver": "5.6.0" } }, "istanbul-lib-report": { @@ -7149,10 +7101,10 @@ "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", "dev": true, "requires": { - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" }, "dependencies": { "has-flag": { @@ -7167,7 +7119,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } } } @@ -7178,11 +7130,11 @@ "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", "dev": true, "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "source-map": "0.5.7" }, "dependencies": { "debug": { @@ -7202,7 +7154,7 @@ "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", "dev": true, "requires": { - "handlebars": "^4.0.3" + "handlebars": "4.0.11" } }, "jasmine": { @@ -7211,9 +7163,9 @@ "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", "dev": true, "requires": { - "exit": "^0.1.2", - "glob": "^7.0.6", - "jasmine-core": "~2.8.0" + "exit": "0.1.2", + "glob": "7.1.2", + "jasmine-core": "2.8.0" } }, "jasmine-core": { @@ -7228,8 +7180,8 @@ "integrity": "sha512-u/7AT9SkuZsUfFBLLzbErohTGNsEUCKaQbsVYnLFW1gEuL2DzmBL4n8v90uZsqIqlWvWUgian8J6yOt5Fyk/+A==", "dev": true, "requires": { - "mkdirp": "^0.5.1", - "xmldom": "^0.1.22" + "mkdirp": "0.5.1", + "xmldom": "0.1.27" } }, "jasmine-spec-reporter": { @@ -7264,8 +7216,8 @@ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" + "argparse": "1.0.9", + "esprima": "2.7.3" } }, "jsbn": { @@ -7318,7 +7270,7 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.11" } }, "jsprim": { @@ -7345,11 +7297,11 @@ "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", "dev": true, "requires": { - "core-js": "~2.3.0", - "es6-promise": "~3.0.2", - "lie": "~3.1.0", - "pako": "~1.0.2", - "readable-stream": "~2.0.6" + "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": { @@ -7370,12 +7322,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" + "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" } }, "string_decoder": { @@ -7392,32 +7344,32 @@ "integrity": "sha512-31Vo8Qr5glN+dZEVIpnPCxEGleqE0EY6CtC2X9TagRV3rRQ3SNrvfhddICkJgUK3AgqpeKSZau03QumTGhGoSw==", "dev": true, "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", - "chokidar": "^2.0.3", - "colors": "^1.1.0", - "combine-lists": "^1.0.0", - "connect": "^3.6.0", - "core-js": "^2.2.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "flatted": "^2.0.0", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^4.17.5", - "log4js": "^3.0.0", - "mime": "^2.3.1", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", + "bluebird": "3.5.1", + "body-parser": "1.18.3", + "chokidar": "2.0.4", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.6", + "core-js": "2.6.2", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "flatted": "2.0.0", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "http-proxy": "1.17.0", + "isbinaryfile": "3.0.3", + "lodash": "4.17.11", + "log4js": "3.0.6", + "mime": "2.4.0", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.2.0", + "range-parser": "1.2.0", + "rimraf": "2.6.3", + "safe-buffer": "5.1.1", "socket.io": "2.1.1", - "source-map": "^0.6.1", + "source-map": "0.6.1", "tmp": "0.0.33", "useragent": "2.3.0" }, @@ -7428,8 +7380,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, "arr-diff": { @@ -7450,16 +7402,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -7468,7 +7420,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -7479,34 +7431,34 @@ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.1.0" } }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -7515,7 +7467,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -7524,7 +7476,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -7533,7 +7485,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -7542,7 +7494,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -7553,7 +7505,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -7562,7 +7514,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -7573,9 +7525,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -7592,14 +7544,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -7608,7 +7560,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -7617,7 +7569,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -7628,10 +7580,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -7640,7 +7592,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -7651,8 +7603,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { "is-glob": { @@ -7661,7 +7613,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -7672,7 +7624,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -7681,7 +7633,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -7690,9 +7642,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "is-extglob": { @@ -7707,7 +7659,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-number": { @@ -7716,7 +7668,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -7725,7 +7677,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -7748,19 +7700,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "mime": { @@ -7783,8 +7735,8 @@ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", "dev": true, "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" + "fs-access": "1.0.1", + "which": "1.3.0" } }, "karma-cli": { @@ -7793,7 +7745,7 @@ "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", "dev": true, "requires": { - "resolve": "^1.1.6" + "resolve": "1.5.0" } }, "karma-coverage-istanbul-reporter": { @@ -7802,8 +7754,8 @@ "integrity": "sha1-O13/RmT6W41RlrmInj9hwforgNk=", "dev": true, "requires": { - "istanbul-api": "^1.3.1", - "minimatch": "^3.0.4" + "istanbul-api": "1.3.1", + "minimatch": "3.0.4" } }, "karma-firefox-launcher": { @@ -7824,7 +7776,7 @@ "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", "dev": true, "requires": { - "karma-jasmine": "^1.0.2" + "karma-jasmine": "1.1.2" } }, "karma-source-map-support": { @@ -7833,7 +7785,7 @@ "integrity": "sha512-HcPqdAusNez/ywa+biN4EphGz62MmQyPggUsDfsHqa7tSe4jdsxgvTKuDfIazjL+IOxpVWyT7Pr4dhAV+sxX5Q==", "dev": true, "requires": { - "source-map-support": "^0.5.5" + "source-map-support": "0.5.10" }, "dependencies": { "source-map": { @@ -7848,8 +7800,8 @@ "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.0.0", + "source-map": "0.6.1" } } } @@ -7866,7 +7818,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "klaw": { @@ -7875,7 +7827,7 @@ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "requires": { - "graceful-fs": "^4.1.9" + "graceful-fs": "4.1.11" } }, "lazy-cache": { @@ -7890,7 +7842,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "1.0.0" } }, "less": { @@ -7899,15 +7851,15 @@ "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", "dev": true, "requires": { - "clone": "^2.1.2", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "mime": "^1.4.1", - "mkdirp": "^0.5.0", - "promise": "^7.1.1", - "request": "^2.83.0", - "source-map": "~0.6.0" + "clone": "2.1.2", + "errno": "0.1.7", + "graceful-fs": "4.1.11", + "image-size": "0.5.5", + "mime": "1.6.0", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.86.0", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -7925,9 +7877,9 @@ "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", "dev": true, "requires": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^3.0.0" + "clone": "2.1.2", + "loader-utils": "1.1.0", + "pify": "3.0.0" } }, "levn": { @@ -7936,8 +7888,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "license-webpack-plugin": { @@ -7946,8 +7898,8 @@ "integrity": "sha512-FQgOqrrIcD4C/VQo6ecWgXZULK5rs0kIDJtHcSVO6SBUrD63kEHZwmKOvBTquFQSgMQn/yeH68qooKDfqiBF2Q==", "dev": true, "requires": { - "@types/webpack-sources": "^0.1.5", - "webpack-sources": "^1.2.0" + "@types/webpack-sources": "0.1.5", + "webpack-sources": "1.3.0" } }, "lie": { @@ -7956,7 +7908,7 @@ "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", "dev": true, "requires": { - "immediate": "~3.0.5" + "immediate": "3.0.6" } }, "load-json-file": { @@ -7964,11 +7916,11 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "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": { @@ -7990,9 +7942,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" } }, "locate-path": { @@ -8001,8 +7953,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -8043,10 +7995,10 @@ "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", "dev": true, "requires": { - "circular-json": "^0.5.5", - "date-format": "^1.2.0", - "debug": "^3.1.0", - "rfdc": "^1.1.2", + "circular-json": "0.5.9", + "date-format": "1.2.0", + "debug": "3.2.6", + "rfdc": "1.1.2", "streamroller": "0.7.0" }, "dependencies": { @@ -8056,7 +8008,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -8085,7 +8037,7 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "3.0.2" } }, "loud-rejection": { @@ -8093,8 +8045,8 @@ "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.0" + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" } }, "lru-cache": { @@ -8102,8 +8054,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "make-dir": { @@ -8112,7 +8064,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" } }, "make-error": { @@ -8127,7 +8079,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "^1.0.0" + "p-defer": "1.0.0" } }, "map-cache": { @@ -8147,7 +8099,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "material-design-icons-iconfont": { @@ -8172,9 +8124,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" }, "dependencies": { "safe-buffer": { @@ -8202,9 +8154,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "1.1.0" } }, "memory-fs": { @@ -8213,8 +8165,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.6" } }, "meow": { @@ -8222,16 +8174,16 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "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" } }, "merge-descriptors": { @@ -8252,19 +8204,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "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": { @@ -8273,14 +8225,14 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "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": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "optional": true }, @@ -8294,7 +8246,7 @@ "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" + "mime-db": "1.30.0" } }, "mimic-fn": { @@ -8309,9 +8261,9 @@ "integrity": "sha512-o+Jm+ocb0asEngdM6FsZWtZsRzA8koFUudIDwYUfl94M3PejPHG7Vopw5hN9V8WsMkSFpm3tZP3Fesz89EyrfQ==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" + "loader-utils": "1.1.0", + "schema-utils": "1.0.0", + "webpack-sources": "1.3.0" } }, "minimalistic-assert": { @@ -8329,9 +8281,9 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.8" } }, "minimist": { @@ -8345,16 +8297,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.6.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, "mixin-deep": { @@ -8363,8 +8315,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -8373,7 +8325,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -8384,8 +8336,8 @@ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dev": true, "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" + "for-in": "0.1.8", + "is-extendable": "0.1.1" }, "dependencies": { "for-in": { @@ -8417,12 +8369,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "ms": { @@ -8436,8 +8388,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" + "dns-packet": "1.3.1", + "thunky": "1.0.3" } }, "multicast-dns-service-types": { @@ -8457,18 +8409,18 @@ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "arr-diff": { @@ -8530,18 +8482,18 @@ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.88.0", + "rimraf": "2.6.3", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.0" }, "dependencies": { "ajv": { @@ -8549,10 +8501,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "assert-plus": { @@ -8575,7 +8527,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "extend": { @@ -8588,8 +8540,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "requires": { - "ajv": "^5.3.0", - "har-schema": "^2.0.0" + "ajv": "5.5.2", + "har-schema": "2.0.0" } }, "http-signature": { @@ -8597,9 +8549,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" } }, "mime-db": { @@ -8612,7 +8564,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", "requires": { - "mime-db": "~1.36.0" + "mime-db": "1.36.0" } }, "oauth-sign": { @@ -8625,26 +8577,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.1.0", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.20", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" } }, "safe-buffer": { @@ -8662,8 +8614,8 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "1.1.29", + "punycode": "1.4.1" } }, "uuid": { @@ -8679,28 +8631,28 @@ "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", "dev": true, "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "3.0.0", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", + "url": "0.11.0", + "util": "0.11.1", "vm-browserify": "0.0.4" }, "dependencies": { @@ -8721,7 +8673,7 @@ "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", "dev": true, "requires": { - "semver": "^5.3.0" + "semver": "5.6.0" } }, "node-sass": { @@ -8729,25 +8681,25 @@ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.10.0", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.3", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.1", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.10.0", + "node-gyp": "3.8.0", + "npmlog": "4.1.2", + "request": "2.88.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.1", + "true-case-path": "1.0.3" }, "dependencies": { "ajv": { @@ -8755,10 +8707,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "ansi-styles": { @@ -8788,7 +8740,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "extend": { @@ -8806,8 +8758,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "ajv": "6.7.0", + "har-schema": "2.0.0" } }, "json-schema-traverse": { @@ -8825,7 +8777,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.37.0" } }, "oauth-sign": { @@ -8843,26 +8795,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.1.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.21", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" } }, "safe-buffer": { @@ -8880,8 +8832,8 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "1.1.29", + "punycode": "1.4.1" }, "dependencies": { "punycode": { @@ -8896,7 +8848,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "uuid": { @@ -8911,7 +8863,7 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { - "abbrev": "1" + "abbrev": "1.0.9" } }, "normalize-package-data": { @@ -8919,10 +8871,10 @@ "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.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { @@ -8931,7 +8883,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "normalize-range": { @@ -8946,10 +8898,10 @@ "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", "dev": true, "requires": { - "hosted-git-info": "^2.6.0", - "osenv": "^0.1.5", - "semver": "^5.5.0", - "validate-npm-package-name": "^3.0.0" + "hosted-git-info": "2.6.0", + "osenv": "0.1.5", + "semver": "5.6.0", + "validate-npm-package-name": "3.0.0" } }, "npm-registry-client": { @@ -8958,18 +8910,18 @@ "integrity": "sha512-7rjGF2eA7hKDidGyEWmHTiKfXkbrcQAsGL/Rh4Rt3x3YNRNHhwaTzVJfW3aNvvlhg4G62VCluif0sLCb/i51Hg==", "dev": true, "requires": { - "concat-stream": "^1.5.2", - "graceful-fs": "^4.1.6", - "normalize-package-data": "~1.0.1 || ^2.0.0", - "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "npmlog": "2 || ^3.1.0 || ^4.0.0", - "once": "^1.3.3", - "request": "^2.74.0", - "retry": "^0.10.0", - "safe-buffer": "^5.1.1", - "semver": "2 >=2.2.1 || 3.x || 4 || 5", - "slide": "^1.1.3", - "ssri": "^5.2.4" + "concat-stream": "1.6.2", + "graceful-fs": "4.1.11", + "normalize-package-data": "2.4.0", + "npm-package-arg": "6.1.0", + "npmlog": "4.1.2", + "once": "1.4.0", + "request": "2.86.0", + "retry": "0.10.1", + "safe-buffer": "5.1.1", + "semver": "5.6.0", + "slide": "1.1.6", + "ssri": "5.3.0" } }, "npm-run-path": { @@ -8978,7 +8930,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "npmlog": { @@ -8986,10 +8938,10 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "null-check": { @@ -9032,9 +8984,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -9043,7 +8995,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -9054,7 +9006,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" }, "dependencies": { "isobject": { @@ -9071,8 +9023,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "for-own": "0.1.5", + "is-extendable": "0.1.1" } }, "object.pick": { @@ -9081,7 +9033,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" }, "dependencies": { "isobject": { @@ -9118,7 +9070,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "opn": { @@ -9127,7 +9079,7 @@ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dev": true, "requires": { - "is-wsl": "^1.1.0" + "is-wsl": "1.1.0" } }, "optimist": { @@ -9136,8 +9088,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.10", + "wordwrap": "0.0.2" }, "dependencies": { "minimist": { @@ -9154,12 +9106,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "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": { @@ -9175,7 +9127,7 @@ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "requires": { - "url-parse": "^1.4.3" + "url-parse": "1.4.3" } }, "os-browserify": { @@ -9194,7 +9146,7 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "requires": { - "lcid": "^1.0.0" + "lcid": "1.0.0" } }, "os-tmpdir": { @@ -9207,8 +9159,8 @@ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "p-defer": { @@ -9235,7 +9187,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -9244,7 +9196,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-map": { @@ -9271,9 +9223,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "parse-asn1": { @@ -9282,12 +9234,12 @@ "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", "dev": true, "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17", + "safe-buffer": "5.1.1" } }, "parse-glob": { @@ -9296,10 +9248,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" } }, "parse-json": { @@ -9307,7 +9259,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.1" } }, "parse-passwd": { @@ -9328,7 +9280,7 @@ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { - "better-assert": "~1.0.0" + "better-assert": "1.0.2" } }, "parseuri": { @@ -9337,7 +9289,7 @@ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "better-assert": "~1.0.0" + "better-assert": "1.0.2" } }, "parseurl": { @@ -9358,8 +9310,8 @@ "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", "dev": true, "requires": { - "process": "^0.11.1", - "util": "^0.10.3" + "process": "0.11.10", + "util": "0.10.3" } }, "path-browserify": { @@ -9415,7 +9367,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" } }, "pbkdf2": { @@ -9424,11 +9376,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.1", + "sha.js": "2.4.11" } }, "performance-now": { @@ -9452,7 +9404,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "pkg-dir": { @@ -9461,7 +9413,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "2.1.0" } }, "portfinder": { @@ -9470,9 +9422,9 @@ "integrity": "sha512-syFcRIRzVI1BoEFOCaAiizwDolh1S1YXSodsVhncbhjzjZQulhczNRbqnUl9N31Q4dKGOXsNDqxC2BWBgSMqeQ==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" }, "dependencies": { "async": { @@ -9495,9 +9447,9 @@ "integrity": "sha512-9AXb//5UcjeOEof9T+yPw3XTa5SL207ZOIC/lHYP4mbUTEh4M0rDAQekQpVANCZdwQwKhBtFZCk3i3h3h2hdWg==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" }, "dependencies": { "source-map": { @@ -9514,10 +9466,10 @@ "integrity": "sha512-3KqKRZcaZAvxbY8DVLdd81tG5uKzbUQuiWIvy0o0fzEC42bKacqPYFWbfCQyw6L4LWUaqPz/idvIdbhpgQ32eQ==", "dev": true, "requires": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "postcss": "7.0.11", + "postcss-value-parser": "3.3.1", + "read-cache": "1.0.0", + "resolve": "1.5.0" } }, "postcss-load-config": { @@ -9526,8 +9478,8 @@ "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", "dev": true, "requires": { - "cosmiconfig": "^4.0.0", - "import-cwd": "^2.0.0" + "cosmiconfig": "4.0.0", + "import-cwd": "2.1.0" } }, "postcss-loader": { @@ -9536,10 +9488,10 @@ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" + "loader-utils": "1.1.0", + "postcss": "7.0.11", + "postcss-load-config": "2.0.0", + "schema-utils": "1.0.0" } }, "postcss-value-parser": { @@ -9579,7 +9531,7 @@ "dev": true, "optional": true, "requires": { - "asap": "~2.0.3" + "asap": "2.0.6" } }, "promise-inflight": { @@ -9594,21 +9546,21 @@ "integrity": "sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA==", "dev": true, "requires": { - "@types/q": "^0.0.32", - "@types/selenium-webdriver": "^3.0.0", - "blocking-proxy": "^1.0.0", - "browserstack": "^1.5.1", - "chalk": "^1.1.3", - "glob": "^7.0.3", + "@types/q": "0.0.32", + "@types/selenium-webdriver": "3.0.14", + "blocking-proxy": "1.0.1", + "browserstack": "1.5.2", + "chalk": "1.1.3", + "glob": "7.1.2", "jasmine": "2.8.0", - "jasminewd2": "^2.1.0", - "optimist": "~0.6.0", + "jasminewd2": "2.2.0", + "optimist": "0.6.1", "q": "1.4.1", - "saucelabs": "^1.5.0", + "saucelabs": "1.5.0", "selenium-webdriver": "3.6.0", - "source-map-support": "~0.4.0", + "source-map-support": "0.4.18", "webdriver-js-extender": "2.1.0", - "webdriver-manager": "^12.0.6" + "webdriver-manager": "12.1.1" }, "dependencies": { "ajv": { @@ -9617,10 +9569,10 @@ "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "ansi-styles": { @@ -9654,7 +9606,7 @@ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "del": { @@ -9704,8 +9656,8 @@ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "ajv": "6.7.0", + "har-schema": "2.0.0" } }, "json-schema-traverse": { @@ -9726,7 +9678,7 @@ "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.37.0" } }, "oauth-sign": { @@ -9811,7 +9763,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "uuid": { @@ -9826,17 +9778,17 @@ "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==", "dev": true, "requires": { - "adm-zip": "^0.4.9", - "chalk": "^1.1.1", - "del": "^2.2.0", - "glob": "^7.0.3", - "ini": "^1.3.4", - "minimist": "^1.2.0", - "q": "^1.4.1", - "request": "^2.87.0", - "rimraf": "^2.5.2", - "semver": "^5.3.0", - "xml2js": "^0.4.17" + "adm-zip": "0.4.13", + "chalk": "1.1.3", + "del": "2.2.2", + "glob": "7.1.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "q": "1.4.1", + "request": "2.88.0", + "rimraf": "2.6.3", + "semver": "5.6.0", + "xml2js": "0.4.19" } } } @@ -9848,10 +9800,10 @@ "dev": true, "requires": { "fs": "0.0.1-security", - "fs-extra": "^1.0.0", - "lodash": "^4.17.2", - "path": "^0.12.7", - "xmldoc": "^0.5.1" + "fs-extra": "1.0.0", + "lodash": "4.17.11", + "path": "0.12.7", + "xmldoc": "0.5.1" }, "dependencies": { "fs-extra": { @@ -9860,9 +9812,9 @@ "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1" } }, "jsonfile": { @@ -9871,7 +9823,7 @@ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.11" } } } @@ -9882,11 +9834,11 @@ "integrity": "sha1-RS2pyFPpw5hctSamqZM/XJerXYw=", "dev": true, "requires": { - "async": "^2.1.4", - "hat": "^0.0.3", - "lodash": "^4.17.0", - "mkdirp": "^0.5.0", - "string.prototype.startswith": "^0.2.0" + "async": "2.6.0", + "hat": "0.0.3", + "lodash": "4.17.11", + "mkdirp": "0.5.1", + "string.prototype.startswith": "0.2.0" } }, "proxy-addr": { @@ -9895,7 +9847,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.1.2", "ipaddr.js": "1.8.0" } }, @@ -9921,12 +9873,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.3", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" }, "dependencies": { "safe-buffer": { @@ -9943,8 +9895,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, "pumpify": { @@ -9953,9 +9905,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "duplexify": "3.6.1", + "inherits": "2.0.3", + "pump": "2.0.1" } }, "punycode": { @@ -10003,9 +9955,9 @@ "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", "dev": true, "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" }, "dependencies": { "is-number": { @@ -10028,7 +9980,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.1.1" } }, "randomfill": { @@ -10037,8 +9989,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" } }, "range-parser": { @@ -10071,7 +10023,7 @@ "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, "requires": { - "pify": "^2.3.0" + "pify": "2.3.0" }, "dependencies": { "pify": { @@ -10087,9 +10039,9 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" }, "dependencies": { "path-type": { @@ -10097,9 +10049,9 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, "pify": { @@ -10114,8 +10066,8 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "find-up": "1.1.2", + "read-pkg": "1.1.0" }, "dependencies": { "find-up": { @@ -10123,8 +10075,8 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "path-exists": { @@ -10132,7 +10084,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } } } @@ -10142,13 +10094,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "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" }, "dependencies": { "process-nextick-args": { @@ -10164,10 +10116,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" } }, "redent": { @@ -10175,8 +10127,8 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "indent-string": "2.1.0", + "strip-indent": "1.0.1" } }, "reflect-metadata": { @@ -10194,7 +10146,7 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, "regex-cache": { @@ -10203,7 +10155,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "^0.1.3" + "is-equal-shallow": "0.1.3" } }, "regex-not": { @@ -10212,8 +10164,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "regexpu-core": { @@ -10222,9 +10174,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } }, "regjsgen": { @@ -10239,7 +10191,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" }, "dependencies": { "jsesc": { @@ -10273,7 +10225,7 @@ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "request": { @@ -10282,27 +10234,27 @@ "integrity": "sha512-BQZih67o9r+Ys94tcIW4S7Uu8pthjrQVxhsZ/weOwHbDfACxvIyvnAbzFQxjy1jMtvFSzv5zf4my6cZsJBbVzw==", "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", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "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.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.1", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" }, "dependencies": { "assert-plus": { @@ -10323,7 +10275,7 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } }, "cryptiles": { @@ -10332,7 +10284,7 @@ "integrity": "sha512-8I1sgZHfVwcSOY6mSGpVU3lw/GSIZvusg8dD2+OGehCJpOhQRLNcH0qb9upQnOH4XhgxxFJSg6E2kx95deb1Tw==", "dev": true, "requires": { - "boom": "5.x.x" + "boom": "5.2.0" }, "dependencies": { "boom": { @@ -10352,9 +10304,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.17" }, "dependencies": { "combined-stream": { @@ -10363,7 +10315,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } } } @@ -10374,10 +10326,10 @@ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, "requires": { - "boom": "4.x.x", - "cryptiles": "3.x.x", - "hoek": "4.x.x", - "sntp": "2.x.x" + "boom": "4.3.1", + "cryptiles": "3.1.4", + "hoek": "4.2.1", + "sntp": "2.1.0" } }, "hoek": { @@ -10392,9 +10344,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" } }, "sntp": { @@ -10403,7 +10355,7 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } } } @@ -10435,7 +10387,7 @@ "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "1.0.5" } }, "resolve-cwd": { @@ -10444,7 +10396,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "3.0.0" } }, "resolve-from": { @@ -10484,7 +10436,7 @@ "dev": true, "optional": true, "requires": { - "align-text": "^0.1.1" + "align-text": "0.1.4" } }, "rimraf": { @@ -10492,7 +10444,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "glob": "^7.1.3" + "glob": "7.1.3" }, "dependencies": { "glob": { @@ -10500,12 +10452,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "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" } } } @@ -10516,8 +10468,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.3" } }, "run-queue": { @@ -10526,7 +10478,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "^1.1.1" + "aproba": "1.2.0" } }, "rxjs": { @@ -10534,7 +10486,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.0" } }, "rxjs-compat": { @@ -10545,7 +10497,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "safe-regex": { "version": "1.1.0", @@ -10553,7 +10505,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "safer-buffer": { @@ -10567,10 +10519,10 @@ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" + "glob": "7.1.2", + "lodash": "4.17.11", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" } }, "sass-loader": { @@ -10579,12 +10531,12 @@ "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", "dev": true, "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "clone-deep": "2.0.2", + "loader-utils": "1.1.0", + "lodash.tail": "4.1.1", + "neo-async": "2.6.0", + "pify": "3.0.0", + "semver": "5.6.0" } }, "saucelabs": { @@ -10593,7 +10545,7 @@ "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "dev": true, "requires": { - "https-proxy-agent": "^2.2.1" + "https-proxy-agent": "2.2.1" } }, "sax": { @@ -10608,9 +10560,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.4.0", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.2.0" } }, "scss-tokenizer": { @@ -10618,8 +10570,8 @@ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" + "js-base64": "2.4.9", + "source-map": "0.4.4" }, "dependencies": { "source-map": { @@ -10627,7 +10579,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -10649,10 +10601,10 @@ "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", "dev": true, "requires": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", + "jszip": "3.1.5", + "rimraf": "2.6.3", "tmp": "0.0.30", - "xml2js": "^0.4.17" + "xml2js": "0.4.19" }, "dependencies": { "tmp": { @@ -10661,7 +10613,7 @@ "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "os-tmpdir": "1.0.2" } } } @@ -10686,7 +10638,7 @@ "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", "dev": true, "requires": { - "semver": "^5.3.0" + "semver": "5.6.0" } }, "semver-intersect": { @@ -10695,7 +10647,7 @@ "integrity": "sha1-j6hKnhAovSOeRTDRo+GB5pjYhLo=", "dev": true, "requires": { - "semver": "^5.0.0" + "semver": "5.6.0" } }, "send": { @@ -10705,18 +10657,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" }, "dependencies": { "mime": { @@ -10739,13 +10691,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "~1.3.4", + "accepts": "1.3.5", "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" + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.17", + "parseurl": "1.3.2" } }, "serve-static": { @@ -10754,9 +10706,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", "send": "0.16.2" } }, @@ -10777,10 +10729,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -10789,7 +10741,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -10812,8 +10764,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.1" } }, "shallow-clone": { @@ -10822,9 +10774,9 @@ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" + "is-extendable": "0.1.1", + "kind-of": "5.1.0", + "mixin-object": "2.0.1" }, "dependencies": { "kind-of": { @@ -10841,7 +10793,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -10861,7 +10813,7 @@ "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", "dev": true, "requires": { - "debug": "^2.2.0" + "debug": "2.6.9" } }, "slash": { @@ -10882,14 +10834,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "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.2", + "use": "3.1.0" }, "dependencies": { "define-property": { @@ -10898,7 +10850,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -10907,7 +10859,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -10918,9 +10870,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -10929,7 +10881,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -10938,7 +10890,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -10947,7 +10899,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -10956,9 +10908,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "isobject": { @@ -10981,7 +10933,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" } }, "socket.io": { @@ -10990,12 +10942,12 @@ "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "dev": true, "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", + "debug": "3.1.0", + "engine.io": "3.2.1", + "has-binary2": "1.0.3", + "socket.io-adapter": "1.1.1", "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" + "socket.io-parser": "3.2.0" }, "dependencies": { "debug": { @@ -11025,15 +10977,15 @@ "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", + "debug": "3.1.0", + "engine.io-client": "3.2.1", + "has-binary2": "1.0.3", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", + "socket.io-parser": "3.2.0", "to-array": "0.1.4" }, "dependencies": { @@ -11055,7 +11007,7 @@ "dev": true, "requires": { "component-emitter": "1.2.1", - "debug": "~3.1.0", + "debug": "3.1.0", "isarray": "2.0.1" }, "dependencies": { @@ -11082,8 +11034,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "faye-websocket": "0.10.0", + "uuid": "3.1.0" }, "dependencies": { "faye-websocket": { @@ -11092,7 +11044,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "websocket-driver": "0.7.0" } } } @@ -11102,12 +11054,12 @@ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.3" }, "dependencies": { "debug": { @@ -11115,7 +11067,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -11143,8 +11095,8 @@ "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", "dev": true, "requires": { - "async": "^2.5.0", - "loader-utils": "^1.1.0" + "async": "2.6.0", + "loader-utils": "1.1.0" } }, "source-map-resolve": { @@ -11153,20 +11105,20 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.1", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "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==", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", "dev": true, "requires": { - "source-map": "^0.5.6" + "source-map": "0.5.7" } }, "source-map-url": { @@ -11180,8 +11132,8 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, "spdx-exceptions": { @@ -11194,8 +11146,8 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" } }, "spdx-license-ids": { @@ -11209,11 +11161,11 @@ "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "debug": "4.1.1", + "handle-thing": "2.0.0", + "http-deceiver": "1.2.7", + "select-hose": "2.0.0", + "spdy-transport": "3.0.0" }, "dependencies": { "debug": { @@ -11222,7 +11174,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -11239,12 +11191,12 @@ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "debug": "4.1.1", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "3.1.1", + "wbuf": "1.7.3" }, "dependencies": { "debug": { @@ -11253,7 +11205,7 @@ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -11268,9 +11220,9 @@ "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "2.0.3", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -11281,7 +11233,7 @@ "integrity": "sha512-S/guYjC4Izn5wY2d0+M4zowED/F77Lxh9yjkTZ+XAr244pr9c1MYNcXcRe9lx2hmAj0GPbOrBXgOF2YIp/CZ8A==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "2.4.2" } }, "split-string": { @@ -11290,7 +11242,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "sprintf-js": { @@ -11304,14 +11256,14 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" + "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": { @@ -11327,7 +11279,7 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "safe-buffer": "5.1.1" } }, "static-extend": { @@ -11336,8 +11288,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -11346,7 +11298,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -11357,7 +11309,7 @@ "integrity": "sha512-NT0YGhwuQ0EOX+uPhhUcI6/+1Sq/pMzNuSCBVT4GbFl/ac6I/JZefBcjlECNfAb1t3GOx5dEj1Z7x0cAxeeVLQ==", "dev": true, "requires": { - "lodash": "^4.17.4" + "lodash": "4.17.11" } }, "statuses": { @@ -11371,7 +11323,7 @@ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", "requires": { - "readable-stream": "^2.0.1" + "readable-stream": "2.3.6" } }, "stompjs": { @@ -11379,7 +11331,7 @@ "resolved": "https://registry.npmjs.org/stompjs/-/stompjs-2.3.3.tgz", "integrity": "sha1-NBeKx7uO4pTMXVVK2LUPf1RZ/Y4=", "requires": { - "websocket": "^1.0.26" + "websocket": "1.0.26" } }, "stream-browserify": { @@ -11388,8 +11340,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "stream-each": { @@ -11398,8 +11350,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" } }, "stream-http": { @@ -11408,11 +11360,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" } }, "stream-shift": { @@ -11427,10 +11379,10 @@ "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", "dev": true, "requires": { - "date-format": "^1.2.0", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "readable-stream": "^2.3.0" + "date-format": "1.2.0", + "debug": "3.2.6", + "mkdirp": "0.5.1", + "readable-stream": "2.3.6" }, "dependencies": { "debug": { @@ -11439,7 +11391,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -11455,9 +11407,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string.prototype.startswith": { @@ -11471,7 +11423,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "strip-ansi": { @@ -11479,7 +11431,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-bom": { @@ -11487,7 +11439,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "requires": { - "is-utf8": "^0.2.0" + "is-utf8": "0.2.1" } }, "strip-eof": { @@ -11501,7 +11453,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "requires": { - "get-stdin": "^4.0.1" + "get-stdin": "4.0.1" } }, "strip-json-comments": { @@ -11516,8 +11468,8 @@ "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "loader-utils": "1.1.0", + "schema-utils": "1.0.0" } }, "stylus": { @@ -11526,12 +11478,12 @@ "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", "dev": true, "requires": { - "css-parse": "1.7.x", - "debug": "*", - "glob": "7.0.x", - "mkdirp": "0.5.x", - "sax": "0.5.x", - "source-map": "0.1.x" + "css-parse": "1.7.0", + "debug": "2.6.9", + "glob": "7.0.6", + "mkdirp": "0.5.1", + "sax": "0.5.8", + "source-map": "0.1.43" }, "dependencies": { "glob": { @@ -11540,12 +11492,12 @@ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "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" } }, "sax": { @@ -11560,7 +11512,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -11571,9 +11523,9 @@ "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", "dev": true, "requires": { - "loader-utils": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "when": "~3.6.x" + "loader-utils": "1.1.0", + "lodash.clonedeep": "4.5.0", + "when": "3.6.4" } }, "supports-color": { @@ -11582,7 +11534,7 @@ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "symbol-observable": { @@ -11602,9 +11554,9 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" } }, "terser": { @@ -11613,9 +11565,9 @@ "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", "dev": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "commander": "2.17.1", + "source-map": "0.6.1", + "source-map-support": "0.5.10" }, "dependencies": { "commander": { @@ -11636,8 +11588,8 @@ "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.0.0", + "source-map": "0.6.1" } } } @@ -11648,14 +11600,14 @@ "integrity": "sha512-GGSt+gbT0oKcMDmPx4SRSfJPE1XaN3kQRWG4ghxKQw9cn5G9x6aCKSsgYdvyM0na9NJ4Drv0RG6jbBByZ5CMjw==", "dev": true, "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.8.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "cacache": "11.3.2", + "find-cache-dir": "2.0.0", + "schema-utils": "1.0.0", + "serialize-javascript": "1.6.1", + "source-map": "0.6.1", + "terser": "3.14.1", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" }, "dependencies": { "bluebird": { @@ -11841,8 +11793,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "readable-stream": "2.3.6", + "xtend": "4.0.1" } }, "thunky": { @@ -11857,13 +11809,13 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "^1.0.4" + "setimmediate": "1.0.5" } }, "tiny-emitter": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", - "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==" + "integrity": "sha1-gtJ0aKylrejl/R5tIrV91D69+3w=" }, "tmp": { "version": "0.0.33", @@ -11871,7 +11823,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "os-tmpdir": "1.0.2" } }, "to-array": { @@ -11898,7 +11850,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "to-regex": { @@ -11907,10 +11859,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -11919,8 +11871,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" }, "dependencies": { "is-number": { @@ -11929,7 +11881,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } } } @@ -11940,7 +11892,7 @@ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", "dev": true, "requires": { - "punycode": "^1.4.1" + "punycode": "1.4.1" } }, "tree-kill": { @@ -11965,7 +11917,7 @@ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "requires": { - "glob": "^7.1.2" + "glob": "7.1.2" } }, "ts-node": { @@ -11974,16 +11926,16 @@ "integrity": "sha512-xcZH12oVg9PShKhy3UHyDmuDLV3y7iKwX25aMVPt1SIXSuAfWkFiGPEkg+th8R4YKW/QCxDoW7lJdb15lx6QWg==", "dev": true, "requires": { - "arrify": "^1.0.0", - "chalk": "^2.3.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.0", - "tsconfig": "^7.0.0", - "v8flags": "^3.0.0", - "yn": "^2.0.0" + "arrify": "1.0.1", + "chalk": "2.3.2", + "diff": "3.5.0", + "make-error": "1.3.4", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.5.4", + "tsconfig": "7.0.0", + "v8flags": "3.0.2", + "yn": "2.0.0" }, "dependencies": { "ansi-styles": { @@ -11992,7 +11944,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { @@ -12001,9 +11953,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" } }, "has-flag": { @@ -12024,7 +11976,7 @@ "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", "dev": true, "requires": { - "source-map": "^0.6.0" + "source-map": "0.6.1" } }, "supports-color": { @@ -12033,7 +11985,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -12044,10 +11996,10 @@ "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", "dev": true, "requires": { - "@types/strip-bom": "^3.0.0", + "@types/strip-bom": "3.0.0", "@types/strip-json-comments": "0.0.30", - "strip-bom": "^3.0.0", - "strip-json-comments": "^2.0.0" + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "strip-bom": { @@ -12064,10 +12016,10 @@ "integrity": "sha512-NP+CjM1EXza/M8mOXBLH3vkFEJiu1zfEAlC5WdJxHPn8l96QPz5eooP6uAgYtw1CcKfuSyIiheNUdKxtDWCNeg==", "dev": true, "requires": { - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map": "^0.6.0", - "source-map-support": "^0.5.0" + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map": "0.6.1", + "source-map-support": "0.5.6" }, "dependencies": { "source-map": { @@ -12082,8 +12034,8 @@ "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.0.0", + "source-map": "0.6.1" } } } @@ -12099,18 +12051,18 @@ "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.12.1" + "babel-code-frame": "6.26.0", + "builtin-modules": "1.1.1", + "chalk": "2.3.2", + "commander": "2.12.2", + "diff": "3.5.0", + "glob": "7.1.2", + "js-yaml": "3.7.0", + "minimatch": "3.0.4", + "resolve": "1.5.0", + "semver": "5.6.0", + "tslib": "1.9.0", + "tsutils": "2.22.2" }, "dependencies": { "ansi-styles": { @@ -12119,7 +12071,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { @@ -12128,9 +12080,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" } }, "has-flag": { @@ -12145,7 +12097,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -12156,7 +12108,7 @@ "integrity": "sha512-u06FUSulCJ+Y8a2ftuqZN6kIGqdP2yJjUPEngXqmdPND4UQfb04igcotH+dw+IFr417yP6muCLE8/5/Qlfnx0w==", "dev": true, "requires": { - "tslib": "^1.8.1" + "tslib": "1.9.0" } }, "tty-browserify": { @@ -12170,7 +12122,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.1" } }, "tweetnacl": { @@ -12185,7 +12137,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "type-is": { @@ -12195,7 +12147,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "2.1.18" }, "dependencies": { "mime-db": { @@ -12210,7 +12162,7 @@ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.33.0" } } } @@ -12227,7 +12179,7 @@ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "optional": true, "requires": { - "is-typedarray": "^1.0.0" + "is-typedarray": "1.0.0" } }, "typescript": { @@ -12255,10 +12207,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { "extend-shallow": { @@ -12267,7 +12219,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "set-value": { @@ -12276,10 +12228,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } @@ -12290,7 +12242,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "2.0.1" } }, "unique-slug": { @@ -12299,7 +12251,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "^0.1.4" + "imurmurhash": "0.1.4" } }, "universalify": { @@ -12320,8 +12272,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -12330,9 +12282,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -12372,7 +12324,7 @@ "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", "dev": true, "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.0" }, "dependencies": { "punycode": { @@ -12412,8 +12364,8 @@ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz", "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", "requires": { - "querystringify": "^2.0.0", - "requires-port": "^1.0.0" + "querystringify": "2.0.0", + "requires-port": "1.0.0" } }, "use": { @@ -12422,7 +12374,7 @@ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "dev": true, "requires": { - "kind-of": "^6.0.2" + "kind-of": "6.0.2" }, "dependencies": { "kind-of": { @@ -12439,8 +12391,8 @@ "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "dev": true, "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" + "lru-cache": "4.1.3", + "tmp": "0.0.33" } }, "util": { @@ -12474,7 +12426,7 @@ "uuid": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=", "dev": true }, "v8flags": { @@ -12483,7 +12435,7 @@ "integrity": "sha512-6sgSKoFw1UpUPd3cFdF7QGnrH6tDeBgW1F3v9gy8gLY0mlbiBXq8soy8aQpY6xeeCjH5K+JvC62Acp7gtl7wWA==", "dev": true, "requires": { - "homedir-polyfill": "^1.0.1" + "homedir-polyfill": "1.0.1" } }, "validate-npm-package-license": { @@ -12491,8 +12443,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "validate-npm-package-name": { @@ -12501,7 +12453,7 @@ "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, "requires": { - "builtins": "^1.0.3" + "builtins": "1.0.3" } }, "vary": { @@ -12515,9 +12467,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" }, "dependencies": { "assert-plus": { @@ -12548,9 +12500,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "chokidar": "2.0.4", + "graceful-fs": "4.1.11", + "neo-async": "2.6.0" }, "dependencies": { "anymatch": { @@ -12559,8 +12511,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, "arr-diff": { @@ -12581,16 +12533,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -12599,7 +12551,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -12610,19 +12562,19 @@ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.1.0" } }, "expand-brackets": { @@ -12631,13 +12583,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -12646,7 +12598,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -12655,7 +12607,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -12664,7 +12616,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -12673,7 +12625,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -12684,7 +12636,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -12693,7 +12645,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -12704,9 +12656,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" } }, "kind-of": { @@ -12723,14 +12675,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -12739,7 +12691,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -12748,7 +12700,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -12759,10 +12711,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -12771,7 +12723,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -12782,8 +12734,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { "is-glob": { @@ -12792,7 +12744,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -12803,7 +12755,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -12812,7 +12764,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -12821,9 +12773,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "is-extglob": { @@ -12838,7 +12790,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-number": { @@ -12847,7 +12799,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -12856,7 +12808,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -12879,19 +12831,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } } } @@ -12902,7 +12854,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "1.0.1" } }, "webdriver-js-extender": { @@ -12911,8 +12863,8 @@ "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "dev": true, "requires": { - "@types/selenium-webdriver": "^3.0.0", - "selenium-webdriver": "^3.0.1" + "@types/selenium-webdriver": "3.0.14", + "selenium-webdriver": "3.6.0" } }, "webpack": { @@ -12925,26 +12877,26 @@ "@webassemblyjs/helper-module-context": "1.7.11", "@webassemblyjs/wasm-edit": "1.7.11", "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "acorn": "5.7.3", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.4.0", + "ajv-keywords": "3.2.0", + "chrome-trace-event": "1.0.0", + "enhanced-resolve": "4.1.0", + "eslint-scope": "4.0.0", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.4.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.6.0", + "node-libs-browser": "2.2.0", + "schema-utils": "0.4.7", + "tapable": "1.1.1", + "terser-webpack-plugin": "1.2.1", + "watchpack": "1.6.0", + "webpack-sources": "1.3.0" }, "dependencies": { "arr-diff": { @@ -13239,8 +13191,8 @@ "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", "dev": true, "requires": { - "source-list-map": "~0.1.7", - "source-map": "~0.4.1" + "source-list-map": "0.1.8", + "source-map": "0.4.4" }, "dependencies": { "source-list-map": { @@ -13255,7 +13207,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -13266,10 +13218,10 @@ "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", - "webpack-log": "^2.0.0" + "memory-fs": "0.4.1", + "mime": "2.4.0", + "range-parser": "1.2.0", + "webpack-log": "2.0.0" }, "dependencies": { "mime": { @@ -13287,34 +13239,34 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", - "import-local": "^2.0.0", - "internal-ip": "^3.0.1", - "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", - "schema-utils": "^1.0.0", - "selfsigned": "^1.9.1", - "semver": "^5.6.0", - "serve-index": "^1.7.2", + "bonjour": "3.5.0", + "chokidar": "2.0.4", + "compression": "1.7.3", + "connect-history-api-fallback": "1.6.0", + "debug": "3.2.6", + "del": "3.0.0", + "express": "4.16.4", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.18.0", + "import-local": "2.0.0", + "internal-ip": "3.0.1", + "ip": "1.1.5", + "killable": "1.0.1", + "loglevel": "1.6.1", + "opn": "5.3.0", + "portfinder": "1.0.17", + "schema-utils": "1.0.0", + "selfsigned": "1.10.4", + "semver": "5.6.0", + "serve-index": "1.9.1", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "^4.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", - "url": "^0.11.0", + "spdy": "4.0.0", + "strip-ansi": "3.0.1", + "supports-color": "5.5.0", + "url": "0.11.0", "webpack-dev-middleware": "3.4.0", - "webpack-log": "^2.0.0", + "webpack-log": "2.0.0", "yargs": "12.0.2" }, "dependencies": { @@ -13463,7 +13415,7 @@ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": "^1.0.0" + "original": "1.0.2" } }, "execa": { @@ -13865,12 +13817,12 @@ "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.3" } }, "string-width": { @@ -13900,7 +13852,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "which-module": { @@ -13952,8 +13904,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "ansi-colors": "3.2.3", + "uuid": "3.3.2" }, "dependencies": { "uuid": { @@ -13970,7 +13922,7 @@ "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==", "dev": true, "requires": { - "lodash": "^4.17.5" + "lodash": "4.17.11" } }, "webpack-sources": { @@ -13979,8 +13931,8 @@ "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "2.0.1", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -13997,7 +13949,7 @@ "integrity": "sha512-Az7y8xTniNhaA0620AV1KPwWOqawurVVDzQSpPAeR5RwNbL91GoBSJAAo9cfd+GiFHwsS5bbHepBw1e6Hzxy4w==", "dev": true, "requires": { - "webpack-core": "^0.6.8" + "webpack-core": "0.6.9" } }, "websocket": { @@ -14006,10 +13958,10 @@ "integrity": "sha512-fjcrYDPIQxpTnqFQ9JjxUQcdvR89MFAOjPBlF+vjOt49w/XW4fJknUoMz/mDIn2eK1AdslVojcaOxOqyZZV8rw==", "optional": true, "requires": { - "debug": "^2.2.0", - "nan": "^2.3.3", - "typedarray-to-buffer": "^3.1.2", - "yaeti": "^0.0.6" + "debug": "2.6.9", + "nan": "2.10.0", + "typedarray-to-buffer": "3.1.5", + "yaeti": "0.0.6" } }, "websocket-driver": { @@ -14017,8 +13969,8 @@ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "requires": { - "http-parser-js": ">=0.4.0", - "websocket-extensions": ">=0.1.1" + "http-parser-js": "0.4.9", + "websocket-extensions": "0.1.3" } }, "websocket-extensions": { @@ -14035,9 +13987,9 @@ "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -14050,7 +14002,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "requires": { - "string-width": "^1.0.2" + "string-width": "1.0.2" } }, "window-size": { @@ -14072,7 +14024,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "~0.1.7" + "errno": "0.1.7" } }, "wrap-ansi": { @@ -14080,8 +14032,8 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" } }, "wrappy": { @@ -14095,9 +14047,9 @@ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" } }, "xml2js": { @@ -14106,8 +14058,8 @@ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "sax": "1.2.4", + "xmlbuilder": "9.0.7" } }, "xmlbuilder": { @@ -14122,7 +14074,7 @@ "integrity": "sha1-kuQ36QDb/wRFDvrpDTyl8WVl9zg=", "dev": true, "requires": { - "sax": "~1.1.1" + "sax": "1.1.6" }, "dependencies": { "sax": { @@ -14173,19 +14125,19 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "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" }, "dependencies": { "camelcase": { @@ -14203,7 +14155,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "requires": { - "camelcase": "^3.0.0" + "camelcase": "3.0.0" } } } @@ -14214,7 +14166,7 @@ "integrity": "sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" } }, "yeast": { diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/DataHubPlugin.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/DataHubPlugin.groovy index 9acabefacb..25ebaef214 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/DataHubPlugin.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/DataHubPlugin.groovy @@ -17,16 +17,16 @@ package com.marklogic.gradle - import com.marklogic.appdeployer.command.Command import com.marklogic.appdeployer.impl.SimpleAppDeployer import com.marklogic.gradle.task.* import com.marklogic.hub.ApplicationConfig import com.marklogic.hub.deploy.commands.GeneratePiiCommand import com.marklogic.hub.deploy.commands.LoadHubModulesCommand -import com.marklogic.hub.deploy.commands.LoadUserModulesCommand import com.marklogic.hub.deploy.commands.LoadUserArtifactsCommand +import com.marklogic.hub.deploy.commands.LoadUserModulesCommand import com.marklogic.hub.impl.* +import com.marklogic.hub.legacy.impl.LegacyFlowManagerImpl import org.gradle.api.GradleException import org.gradle.api.Plugin import org.gradle.api.Project @@ -48,6 +48,7 @@ class DataHubPlugin implements Plugin { private MappingManagerImpl mappingManager private ProcessManagerImpl processManager private FlowManagerImpl flowManager + private LegacyFlowManagerImpl legacyFlowManager private EntityManagerImpl entityManager private GeneratePiiCommand generatePiiCommand @@ -90,8 +91,9 @@ class DataHubPlugin implements Plugin { project.task("hubCreateMapping", group: scaffoldGroup, type: CreateMappingTask) project.task("hubCreateProcess", group: scaffoldGroup, type: CreateProcessTask) project.task("hubCreateEntity", group: scaffoldGroup, type: CreateEntityTask) - project.task("hubCreateHarmonizeFlow", group: scaffoldGroup, type: CreateHarmonizeFlowTask) - project.task("hubCreateInputFlow", group: scaffoldGroup, type: CreateInputFlowTask) + project.task("hubCreateFlow", group: scaffoldGroup, type: CreateFlowTask) + project.task("hubCreateHarmonizeFlow", group: scaffoldGroup, type: CreateHarmonizeLegacyFlowTask) + project.task("hubCreateInputFlow", group: scaffoldGroup, type: CreateInputLegacyFlowTask) project.task("hubGeneratePii", group: scaffoldGroup, type: GeneratePiiTask, description: "Generates Security Configuration for all Entity Properties marked 'pii'") project.task("hubGenerateTDETemplates", group: scaffoldGroup, type: GenerateTDETemplateFromEntityTask, @@ -164,6 +166,7 @@ class DataHubPlugin implements Plugin { mappingManager = ctx.getBean(MappingManagerImpl.class) processManager = ctx.getBean(ProcessManagerImpl.class) flowManager = ctx.getBean(FlowManagerImpl.class) + legacyFlowManager = ctx.getBean(LegacyFlowManagerImpl.class) entityManager = ctx.getBean(EntityManagerImpl.class) generatePiiCommand = ctx.getBean(GeneratePiiCommand.class) @@ -213,6 +216,7 @@ class DataHubPlugin implements Plugin { project.extensions.add("mappingManager", mappingManager) project.extensions.add("processManager", processManager) project.extensions.add("flowManager", flowManager) + project.extensions.add("legacyFlowManager", legacyFlowManager) project.extensions.add("entityManager", entityManager) project.extensions.add("generatePiiCommand", generatePiiCommand) diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/exception/FlowAlreadyPresentException.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/exception/FlowAlreadyPresentException.groovy new file mode 100644 index 0000000000..a324c3b164 --- /dev/null +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/exception/FlowAlreadyPresentException.groovy @@ -0,0 +1,9 @@ +package com.marklogic.gradle.exception + +import org.gradle.api.GradleException + +class FlowAlreadyPresentException extends GradleException { + FlowAlreadyPresentException() { + super("Flow not created. Flow with the same name is already present.") + } +} diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateFlowTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateFlowTask.groovy index 8b556257b6..47ecb2d503 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateFlowTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateFlowTask.groovy @@ -1,79 +1,27 @@ -/* - * Copyright 2012-2019 MarkLogic Corporation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - package com.marklogic.gradle.task -import com.marklogic.gradle.exception.EntityNameRequiredException +import com.marklogic.gradle.exception.FlowAlreadyPresentException import com.marklogic.gradle.exception.FlowNameRequiredException -import com.marklogic.hub.flow.CodeFormat -import com.marklogic.hub.flow.DataFormat -import com.marklogic.hub.flow.FlowType -import com.marklogic.hub.scaffold.Scaffolding -import org.gradle.api.tasks.Input - -abstract class CreateFlowTask extends HubTask { - - @Input - public Boolean useES +import com.marklogic.hub.FlowManager +import com.marklogic.hub.flow.Flow +import org.gradle.api.tasks.TaskAction +class CreateFlowTask extends HubTask { - void createFlow(FlowType flowType) { - def entityName = project.hasProperty("entityName") ? project.property("entityName") : null - if (entityName == null) { - throw new EntityNameRequiredException() - } - def flowName = project.hasProperty("flowName") ? project.property("flowName") : null + @TaskAction + void createFlow() { + def propName = "flowName" + def flowName = project.hasProperty(propName) ? project.property(propName) : null if (flowName == null) { throw new FlowNameRequiredException() } - def pluginFormat = project.hasProperty("pluginFormat") ? - CodeFormat.getCodeFormat(project.property("pluginFormat")) : CodeFormat.JAVASCRIPT - - def dataFormatStr = project.hasProperty("dataFormat") ? - project.property("dataFormat") : "json" - - def dataFormat - switch(dataFormatStr) { - case "json": - dataFormat = DataFormat.JSON - break - case "xml": - dataFormat = DataFormat.XML - break - default: - println "invalid dataFormat: " + dataFormatStr - return - } - - if (useES == null) { - useES = project.hasProperty("useES") ? - Boolean.parseBoolean(project.property("useES")) : true - } - - def mappingName = project.hasProperty("mappingName") ? project.property("mappingName") : null - - def withMapping = "" - if(mappingName != null){ - withMapping = " with mapping: " + mappingName + FlowManager flowManager = getFlowManager() + if (flowManager.getFlow(flowName.toString()) == null) { + Flow flow = flowManager.createFlow(flowName.toString()) + flowManager.saveFlow(flow) + } else { + throw new FlowAlreadyPresentException() } - - Scaffolding scaffolding = getScaffolding() - println "Creating an " + pluginFormat + " " + flowType + " flow named " + flowName + " for entity " + entityName + withMapping - scaffolding.createFlow(entityName, flowName, flowType, pluginFormat, dataFormat, useES, mappingName) } } diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateHarmonizeFlowTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateHarmonizeLegacyFlowTask.groovy similarity index 87% rename from ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateHarmonizeFlowTask.groovy rename to ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateHarmonizeLegacyFlowTask.groovy index a0135020b7..34c1732cdb 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateHarmonizeFlowTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateHarmonizeLegacyFlowTask.groovy @@ -17,10 +17,10 @@ package com.marklogic.gradle.task -import com.marklogic.hub.flow.FlowType +import com.marklogic.hub.legacy.flow.FlowType import org.gradle.api.tasks.TaskAction -class CreateHarmonizeFlowTask extends CreateFlowTask { +class CreateHarmonizeLegacyFlowTask extends CreateLegacyFlowTask { @TaskAction void createHarmonizeFlow() { diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateInputFlowTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateInputLegacyFlowTask.groovy similarity index 87% rename from ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateInputFlowTask.groovy rename to ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateInputLegacyFlowTask.groovy index cbb859b277..5b7d05016f 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateInputFlowTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateInputLegacyFlowTask.groovy @@ -17,10 +17,10 @@ package com.marklogic.gradle.task -import com.marklogic.hub.flow.FlowType +import com.marklogic.hub.legacy.flow.FlowType import org.gradle.api.tasks.TaskAction -class CreateInputFlowTask extends CreateFlowTask { +class CreateInputLegacyFlowTask extends CreateLegacyFlowTask { @TaskAction void createInputFlow() { diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateLegacyFlowTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateLegacyFlowTask.groovy new file mode 100644 index 0000000000..3f47cf8c3d --- /dev/null +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateLegacyFlowTask.groovy @@ -0,0 +1,79 @@ +/* + * Copyright 2012-2019 MarkLogic Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package com.marklogic.gradle.task + +import com.marklogic.gradle.exception.EntityNameRequiredException +import com.marklogic.gradle.exception.FlowNameRequiredException +import com.marklogic.hub.legacy.flow.CodeFormat +import com.marklogic.hub.legacy.flow.DataFormat +import com.marklogic.hub.legacy.flow.FlowType +import com.marklogic.hub.scaffold.Scaffolding +import org.gradle.api.tasks.Input + +abstract class CreateLegacyFlowTask extends HubTask { + + @Input + public Boolean useES + + + void createFlow(FlowType flowType) { + def entityName = project.hasProperty("entityName") ? project.property("entityName") : null + if (entityName == null) { + throw new EntityNameRequiredException() + } + def flowName = project.hasProperty("flowName") ? project.property("flowName") : null + if (flowName == null) { + throw new FlowNameRequiredException() + } + + def pluginFormat = project.hasProperty("pluginFormat") ? + CodeFormat.getCodeFormat(project.property("pluginFormat")) : CodeFormat.JAVASCRIPT + + def dataFormatStr = project.hasProperty("dataFormat") ? + project.property("dataFormat") : "json" + + def dataFormat + switch(dataFormatStr) { + case "json": + dataFormat = DataFormat.JSON + break + case "xml": + dataFormat = DataFormat.XML + break + default: + println "invalid dataFormat: " + dataFormatStr + return + } + + if (useES == null) { + useES = project.hasProperty("useES") ? + Boolean.parseBoolean(project.property("useES")) : true + } + + def mappingName = project.hasProperty("mappingName") ? project.property("mappingName") : null + + def withMapping = "" + if(mappingName != null){ + withMapping = " with mapping: " + mappingName + } + + Scaffolding scaffolding = getScaffolding() + println "Creating an " + pluginFormat + " " + flowType + " flow named " + flowName + " for entity " + entityName + withMapping + scaffolding.createFlow(entityName, flowName, flowType, pluginFormat, dataFormat, useES, mappingName) + } +} diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/HubTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/HubTask.groovy index 8cbb7e62a3..0dce499d95 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/HubTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/HubTask.groovy @@ -27,6 +27,7 @@ import com.marklogic.hub.deploy.commands.LoadHubModulesCommand import com.marklogic.hub.deploy.commands.LoadUserArtifactsCommand import com.marklogic.hub.deploy.commands.LoadUserModulesCommand import com.marklogic.hub.job.JobManager +import com.marklogic.hub.legacy.LegacyFlowManager import com.marklogic.hub.scaffold.Scaffolding import org.gradle.api.DefaultTask import org.gradle.api.tasks.Internal @@ -103,6 +104,11 @@ abstract class HubTask extends DefaultTask { getProject().property("flowManager") } + @Internal + LegacyFlowManager getLegacyFlowManager() { + getProject().property("legacyFlowManager") + } + @Internal JobManager getJobManager() { return JobManager.create(getHubConfig().newJobDbClient()); diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/RunFlowTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/RunFlowTask.groovy index 345ea793ca..53df9de821 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/RunFlowTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/RunFlowTask.groovy @@ -24,8 +24,12 @@ import com.marklogic.gradle.exception.EntityNameRequiredException import com.marklogic.gradle.exception.FlowNameRequiredException import com.marklogic.gradle.exception.FlowNotFoundException import com.marklogic.gradle.exception.HubNotInstalledException -import com.marklogic.hub.FlowManager -import com.marklogic.hub.flow.* +import com.marklogic.hub.legacy.LegacyFlowManager +import com.marklogic.hub.legacy.flow.Flow +import com.marklogic.hub.legacy.flow.FlowItemCompleteListener +import com.marklogic.hub.legacy.flow.FlowItemFailureListener +import com.marklogic.hub.legacy.flow.FlowRunner +import com.marklogic.hub.legacy.flow.FlowType import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskExecutionException @@ -107,7 +111,7 @@ class RunFlowTask extends HubTask { throw new HubNotInstalledException() } - FlowManager fm = getFlowManager() + LegacyFlowManager fm = getLegacyFlowManager() Flow flow = fm.getFlow(entityName, flowName, FlowType.HARMONIZE) if (flow == null) { throw new FlowNotFoundException(entityName, flowName); diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/UpdateHubTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/UpdateHubTask.groovy index e28d1ce161..1ecd89b10f 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/UpdateHubTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/UpdateHubTask.groovy @@ -17,14 +17,14 @@ package com.marklogic.gradle.task -import com.marklogic.hub.DataHub + import org.gradle.api.tasks.TaskAction class UpdateHubTask extends HubTask { @TaskAction void updateHub() { - if (getFlowManager().getLegacyFlows().size() > 0) { + if (getLegacyFlowManager().getLegacyFlows().size() > 0) { def updatedFlows = new ArrayList() getDataHub().upgradeHub(updatedFlows) diff --git a/ml-data-hub-plugin/src/test/groovy/com/marklogic/gradle/task/CreateFlowTaskTest.groovy b/ml-data-hub-plugin/src/test/groovy/com/marklogic/gradle/task/CreateFlowTaskTest.groovy new file mode 100644 index 0000000000..246e746830 --- /dev/null +++ b/ml-data-hub-plugin/src/test/groovy/com/marklogic/gradle/task/CreateFlowTaskTest.groovy @@ -0,0 +1,65 @@ +package com.marklogic.gradle.task + +import com.marklogic.hub.HubConfig +import org.gradle.testkit.runner.UnexpectedBuildFailure +import org.gradle.testkit.runner.UnexpectedBuildSuccess + +import java.nio.file.Paths + +import static org.gradle.testkit.runner.TaskOutcome.FAILED +import static org.gradle.testkit.runner.TaskOutcome.SUCCESS + +class CreateFlowTaskTest extends BaseTest { + def setupSpec() { + createGradleFiles() + runTask('hubInit') + clearDatabases(HubConfig.DEFAULT_STAGING_NAME, HubConfig.DEFAULT_FINAL_NAME, HubConfig.DEFAULT_JOB_NAME); + } + + def "create flow with no name"() { + when: + def result = runFailTask('hubCreateFlow') + + then: + notThrown(UnexpectedBuildSuccess) + result.output.contains('flowName property is required') + result.task(":hubCreateFlow").outcome == FAILED + } + + def "create flow with valid name only"() { + given: + propertiesFile << """ + ext { + flowName=myTestFlow + } + """ + + when: + def result = runTask('hubCreateFlow') + + then: + notThrown(UnexpectedBuildFailure) + result.task(":hubCreateFlow").outcome == SUCCESS + + File flowDir = Paths.get(testProjectDir.root.toString(), "flows").toFile() + flowDir.isDirectory() + } + + def "create flow with existing name"() { + given: + propertiesFile << """ + ext { + flowName=myDuplicateFlow + } + """ + + when: + runTask('hubCreateFlow') + def failedResult = runFailTask('hubCreateFlow') + + then: + notThrown(UnexpectedBuildSuccess) + failedResult.output.contains('Flow with the same name is already present') + failedResult.task(":hubCreateFlow").outcome == FAILED + } +} diff --git a/quick-start/src/main/java/com/marklogic/quickstart/model/FlowModel.java b/quick-start/src/main/java/com/marklogic/quickstart/model/FlowModel.java index 3ad770c888..b2de562a75 100644 --- a/quick-start/src/main/java/com/marklogic/quickstart/model/FlowModel.java +++ b/quick-start/src/main/java/com/marklogic/quickstart/model/FlowModel.java @@ -16,9 +16,9 @@ */ package com.marklogic.quickstart.model; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import java.util.ArrayList; import java.util.List; diff --git a/quick-start/src/main/java/com/marklogic/quickstart/service/EntityManagerService.java b/quick-start/src/main/java/com/marklogic/quickstart/service/EntityManagerService.java index 2e64c675a4..4ff86f4bca 100644 --- a/quick-start/src/main/java/com/marklogic/quickstart/service/EntityManagerService.java +++ b/quick-start/src/main/java/com/marklogic/quickstart/service/EntityManagerService.java @@ -24,7 +24,7 @@ import com.marklogic.hub.HubConfig; import com.marklogic.hub.entity.HubEntity; import com.marklogic.hub.error.DataHubProjectException; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.impl.HubConfigImpl; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; diff --git a/quick-start/src/main/java/com/marklogic/quickstart/service/FlowManagerService.java b/quick-start/src/main/java/com/marklogic/quickstart/service/FlowManagerService.java index 729106e925..507e0ece02 100644 --- a/quick-start/src/main/java/com/marklogic/quickstart/service/FlowManagerService.java +++ b/quick-start/src/main/java/com/marklogic/quickstart/service/FlowManagerService.java @@ -19,12 +19,11 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.marklogic.client.datamovement.JobTicket; -import com.marklogic.hub.FlowManager; -import com.marklogic.hub.HubConfig; -import com.marklogic.hub.flow.Flow; -import com.marklogic.hub.flow.FlowRunner; -import com.marklogic.hub.flow.FlowStatusListener; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.LegacyFlowManager; +import com.marklogic.hub.legacy.flow.Flow; +import com.marklogic.hub.legacy.flow.FlowRunner; +import com.marklogic.hub.legacy.flow.FlowStatusListener; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.impl.HubConfigImpl; import com.marklogic.hub.util.MlcpRunner; import com.marklogic.quickstart.model.FlowModel; @@ -50,7 +49,7 @@ public class FlowManagerService { private static final String PROJECT_TMP_FOLDER = ".tmp"; @Autowired - private FlowManager flowManager; + private LegacyFlowManager flowManager; @Autowired private HubConfigImpl hubConfig; @@ -180,7 +179,7 @@ public void runMlcp(Flow flow, JsonNode json, FlowStatusListener statusListener) runner.start(); } - public FlowManager getFlowManager() { + public LegacyFlowManager getFlowManager() { return flowManager; } } diff --git a/quick-start/src/main/java/com/marklogic/quickstart/web/EntitiesController.java b/quick-start/src/main/java/com/marklogic/quickstart/web/EntitiesController.java index 67a92fad90..9e5be96b31 100644 --- a/quick-start/src/main/java/com/marklogic/quickstart/web/EntitiesController.java +++ b/quick-start/src/main/java/com/marklogic/quickstart/web/EntitiesController.java @@ -17,8 +17,8 @@ package com.marklogic.quickstart.web; import com.fasterxml.jackson.databind.JsonNode; -import com.marklogic.hub.flow.Flow; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.Flow; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.impl.HubConfigImpl; import com.marklogic.quickstart.model.FlowModel; import com.marklogic.quickstart.model.JobStatusMessage; diff --git a/quick-start/src/test/java/com/marklogic/quickstart/integrationtests/E2ETestsRequestHelper.java b/quick-start/src/test/java/com/marklogic/quickstart/integrationtests/E2ETestsRequestHelper.java index e77014db9a..73f097d575 100644 --- a/quick-start/src/test/java/com/marklogic/quickstart/integrationtests/E2ETestsRequestHelper.java +++ b/quick-start/src/test/java/com/marklogic/quickstart/integrationtests/E2ETestsRequestHelper.java @@ -14,9 +14,9 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.marklogic.hub.HubTestBase; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.quickstart.auth.LoginInfo; import com.marklogic.quickstart.model.FlowModel; import com.marklogic.quickstart.model.JobQuery; diff --git a/quick-start/src/test/java/com/marklogic/quickstart/integrationtests/EndToEndAPITest.java b/quick-start/src/test/java/com/marklogic/quickstart/integrationtests/EndToEndAPITest.java index b10399dbba..22f432aa4b 100644 --- a/quick-start/src/test/java/com/marklogic/quickstart/integrationtests/EndToEndAPITest.java +++ b/quick-start/src/test/java/com/marklogic/quickstart/integrationtests/EndToEndAPITest.java @@ -4,13 +4,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; -import com.marklogic.hub.mapping.Mapping; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.quickstart.DataHubApiConfiguration; import com.marklogic.quickstart.model.entity_services.EntityModel; -import com.marklogic.quickstart.service.EntityManagerServiceTest; import io.restassured.RestAssured; import io.restassured.path.json.JsonPath; import io.restassured.response.Response; @@ -32,7 +30,6 @@ import java.nio.file.Paths; import java.util.HashMap; import java.util.List; -import java.util.Map; import static org.junit.jupiter.api.Assertions.*; diff --git a/quick-start/src/test/java/com/marklogic/quickstart/service/EntityManagerServiceTest.java b/quick-start/src/test/java/com/marklogic/quickstart/service/EntityManagerServiceTest.java index 91bff761ec..e16ca9bfc3 100644 --- a/quick-start/src/test/java/com/marklogic/quickstart/service/EntityManagerServiceTest.java +++ b/quick-start/src/test/java/com/marklogic/quickstart/service/EntityManagerServiceTest.java @@ -21,9 +21,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.marklogic.hub.ApplicationConfig; import com.marklogic.hub.error.DataHubProjectException; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.impl.HubConfigImpl; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; diff --git a/quick-start/src/test/java/com/marklogic/quickstart/service/FlowManagerServiceTest.java b/quick-start/src/test/java/com/marklogic/quickstart/service/FlowManagerServiceTest.java index 81b295a645..41d03d4840 100644 --- a/quick-start/src/test/java/com/marklogic/quickstart/service/FlowManagerServiceTest.java +++ b/quick-start/src/test/java/com/marklogic/quickstart/service/FlowManagerServiceTest.java @@ -25,9 +25,9 @@ import com.marklogic.client.io.JacksonHandle; import com.marklogic.client.io.StringHandle; import com.marklogic.hub.ApplicationConfig; -import com.marklogic.hub.FlowManager; +import com.marklogic.hub.legacy.LegacyFlowManager; import com.marklogic.hub.HubConfig; -import com.marklogic.hub.flow.*; +import com.marklogic.hub.legacy.flow.*; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; import com.marklogic.hub.util.MlcpRunner; @@ -42,7 +42,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.io.IOException; @@ -65,7 +64,7 @@ public class FlowManagerServiceTest extends AbstractServiceTest { FlowManagerService fm; @Autowired - FlowManager flowManager; + LegacyFlowManager flowManager; @Autowired Scaffolding scaffolding; diff --git a/quick-start/src/test/java/com/marklogic/quickstart/service/TraceServiceTest.java b/quick-start/src/test/java/com/marklogic/quickstart/service/TraceServiceTest.java index 446603044e..8e33c8e83a 100644 --- a/quick-start/src/test/java/com/marklogic/quickstart/service/TraceServiceTest.java +++ b/quick-start/src/test/java/com/marklogic/quickstart/service/TraceServiceTest.java @@ -23,10 +23,10 @@ import com.marklogic.client.io.StringHandle; import com.marklogic.hub.ApplicationConfig; import com.marklogic.hub.HubConfig; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.Flow; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.Flow; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.quickstart.DataHubApiConfiguration; import com.marklogic.quickstart.auth.ConnectionAuthenticationToken; diff --git a/quick-start/src/test/java/com/marklogic/quickstart/web/EntitiesControllerTest.java b/quick-start/src/test/java/com/marklogic/quickstart/web/EntitiesControllerTest.java index fdd7febbf5..0a58a0d8a5 100644 --- a/quick-start/src/test/java/com/marklogic/quickstart/web/EntitiesControllerTest.java +++ b/quick-start/src/test/java/com/marklogic/quickstart/web/EntitiesControllerTest.java @@ -24,9 +24,9 @@ import com.marklogic.client.io.JacksonHandle; import com.marklogic.hub.ApplicationConfig; import com.marklogic.hub.HubConfig; -import com.marklogic.hub.flow.CodeFormat; -import com.marklogic.hub.flow.DataFormat; -import com.marklogic.hub.flow.FlowType; +import com.marklogic.hub.legacy.flow.CodeFormat; +import com.marklogic.hub.legacy.flow.DataFormat; +import com.marklogic.hub.legacy.flow.FlowType; import com.marklogic.hub.scaffold.Scaffolding; import com.marklogic.hub.util.FileUtil; import com.marklogic.quickstart.DataHubApiConfiguration;