diff --git a/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/main/java/org/dashbuilder/external/ExternalComponentServlet.java b/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/main/java/org/dashbuilder/external/ExternalComponentServlet.java index 1179ded978..801f25f6f1 100644 --- a/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/main/java/org/dashbuilder/external/ExternalComponentServlet.java +++ b/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/main/java/org/dashbuilder/external/ExternalComponentServlet.java @@ -51,16 +51,17 @@ public class ExternalComponentServlet extends HttpServlet { ComponentLoader loader; String cacheControlHeaderValue = "no-cache"; - private MimetypesFileTypeMap mimetypesFileTypeMap; + private MimetypesFileTypeMap mimeTypes; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - mimetypesFileTypeMap = new MimetypesFileTypeMap(); + mimeTypes = new MimetypesFileTypeMap(); String cacheControl = config.getInitParameter(CACHE_CONTROL_PARAM); if (cacheControl != null) { cacheControlHeaderValue = cacheControl; } + addAdditionalMimeTypes(); } @Override @@ -95,7 +96,7 @@ private void handle(HttpServletRequest req, HttpServletResponse resp) throws IOE try (InputStream assetStream = assetProvider.openAsset(assetPath)) { int size = IOUtils.copy(assetStream, resp.getOutputStream()); - String mimeType = mimetypesFileTypeMap.getContentType(pathInfo); + String mimeType = mimeTypes.getContentType(pathInfo); resp.setContentType(mimeType); resp.setContentLength(size); resp.setHeader(CACHE_CONTROL_PARAM, cacheControlHeaderValue); @@ -119,4 +120,9 @@ private void errorResponse(HttpServletResponse resp) { } } + private void addAdditionalMimeTypes() { + mimeTypes.addMimeTypes("text/javascript js"); + mimeTypes.addMimeTypes("text/css css"); + } + } \ No newline at end of file diff --git a/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/main/java/org/dashbuilder/external/impl/ComponentServiceImpl.java b/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/main/java/org/dashbuilder/external/impl/ComponentServiceImpl.java index 3bb18877d6..f92e8a4eb2 100644 --- a/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/main/java/org/dashbuilder/external/impl/ComponentServiceImpl.java +++ b/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/main/java/org/dashbuilder/external/impl/ComponentServiceImpl.java @@ -52,5 +52,17 @@ public Optional byId(String componentId) { .filter(c -> componentId.equals(c.getId())) .findFirst(); } + + @Override + public List listAllComponents() { + List allComponents = loader.loadExternal(); + List provided = loader.loadProvided(); + + allComponents.forEach(c -> c.setProvided(false)); + provided.forEach(c -> c.setProvided(true)); + allComponents.addAll(provided); + + return allComponents; + } } diff --git a/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/test/java/org/dashbuilder/external/impl/ComponentLoaderImplTest.java b/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/test/java/org/dashbuilder/external/impl/ComponentLoaderImplTest.java index ca1416a625..d7f3459afd 100644 --- a/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/test/java/org/dashbuilder/external/impl/ComponentLoaderImplTest.java +++ b/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/test/java/org/dashbuilder/external/impl/ComponentLoaderImplTest.java @@ -155,7 +155,7 @@ public void testLoadInternalComponents() throws IOException { externalComponentLoaderImpl.init(); List internalComponents = externalComponentLoaderImpl.loadProvided(); - assertEquals(1, internalComponents.size()); + assertEquals(3, internalComponents.size()); ExternalComponent component = internalComponents.get(0); assertEquals("logo-provided", component.getId()); diff --git a/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/test/java/org/dashbuilder/external/impl/ComponentServiceImplTest.java b/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/test/java/org/dashbuilder/external/impl/ComponentServiceImplTest.java index b320bf1975..672fa037a2 100644 --- a/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/test/java/org/dashbuilder/external/impl/ComponentServiceImplTest.java +++ b/dashbuilder/dashbuilder-backend/dashbuilder-external-backend/src/test/java/org/dashbuilder/external/impl/ComponentServiceImplTest.java @@ -17,6 +17,7 @@ package org.dashbuilder.external.impl; import java.util.Collections; +import java.util.List; import org.dashbuilder.external.model.ExternalComponent; import org.dashbuilder.external.service.ComponentLoader; @@ -31,6 +32,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ComponentServiceImplTest { @@ -62,10 +64,26 @@ public void testByIdProvidedPriority() { ExternalComponent c1_provided = new ExternalComponent(C1_ID, c1ProvidedName, "c1 icon", false, Collections.emptyList()); ExternalComponent c1_external = new ExternalComponent(C1_ID, "c1 external", "c1 icon", false, Collections.emptyList()); - Mockito.when(loader.loadProvided()).thenReturn(asList(c1_provided)); - Mockito.when(loader.loadExternal()).thenReturn(asList(c1_external)); + when(loader.loadProvided()).thenReturn(asList(c1_provided)); + when(loader.loadExternal()).thenReturn(asList(c1_external)); assertEquals(c1ProvidedName, externalComponentServiceImpl.byId(C1_ID).get().getName()); } + public void testListAllComponents() { + String providedId = "c1"; + String externalId = "c2"; + ExternalComponent c1_provided = new ExternalComponent(providedId, "name", "icon", false, Collections.emptyList()); + ExternalComponent c1_external = new ExternalComponent(externalId, "name", "icon", false, Collections.emptyList()); + + when(loader.loadProvided()).thenReturn(asList(c1_provided)); + when(loader.loadExternal()).thenReturn(asList(c1_external)); + + List comps = externalComponentServiceImpl.listAllComponents(); + ExternalComponent cp = comps.stream().filter(c -> providedId.equals(c.getId())).findAny().get(); + ExternalComponent ce = comps.stream().filter(c -> externalId.equals(c.getId())).findAny().get(); + assertTrue(cp.isProvided()); + assertFalse(ce.isProvided()); + } + } \ No newline at end of file diff --git a/dashbuilder/dashbuilder-backend/dashbuilder-services/src/main/java/org/dashbuilder/transfer/DataTransferServicesImpl.java b/dashbuilder/dashbuilder-backend/dashbuilder-services/src/main/java/org/dashbuilder/transfer/DataTransferServicesImpl.java index bcb9a1ac07..240aae12fb 100644 --- a/dashbuilder/dashbuilder-backend/dashbuilder-services/src/main/java/org/dashbuilder/transfer/DataTransferServicesImpl.java +++ b/dashbuilder/dashbuilder-backend/dashbuilder-services/src/main/java/org/dashbuilder/transfer/DataTransferServicesImpl.java @@ -67,8 +67,8 @@ import static org.dashbuilder.dataset.DataSetDefRegistryCDI.DATASET_EXT; import static org.uberfire.ext.plugin.model.Plugin.FILE_EXT; -@ApplicationScoped @Service +@ApplicationScoped public class DataTransferServicesImpl implements DataTransferServices { public static final String VERSION = "1.0.0"; @@ -86,6 +86,7 @@ public class DataTransferServicesImpl implements DataTransferServices { private NavTreeStorage navTreeStorage; private byte[] buffer = new byte[1024]; private ComponentLoader externalComponentLoader; + private LayoutComponentHelper layoutComponentsHelper; private String dashbuilderLocation; private String exportDir; @@ -108,7 +109,8 @@ public DataTransferServicesImpl( final Event pluginAddedEvent, final Event navTreeChangedEvent, final NavTreeStorage navTreeStorage, - final ComponentLoader externalComponentLoader) { + final ComponentLoader externalComponentLoader, + final LayoutComponentHelper layoutComponentsHelper) { this.ioService = ioService; this.datasetsFS = datasetsFS; @@ -122,6 +124,7 @@ public DataTransferServicesImpl( this.navTreeChangedEvent = navTreeChangedEvent; this.navTreeStorage = navTreeStorage; this.externalComponentLoader = externalComponentLoader; + this.layoutComponentsHelper = layoutComponentsHelper; } @PostConstruct @@ -175,13 +178,18 @@ public String doExport(DataTransferExportModel exportModel) throws java.io.IOExc .append("://") .append(componentsPath) .toString()); - externalComponentLoader.loadExternal().forEach(c -> { - Path componentPath = componentsBasePath.resolve(c.getId()); - zipComponentFiles(componentsBasePath, - componentPath, - zos, - p -> true); - }); + Predicate pagesComponentsFilter = page -> exportModel.isExportAll() || exportModel.getPages().contains(page); + layoutComponentsHelper.findComponentsInTemplates(pagesComponentsFilter) + .stream() + .map(c -> componentsBasePath.resolve(c)) + .filter(Files::exists) + .forEach(c -> { + Path componentPath = componentsBasePath.resolve(c); + zipComponentFiles(componentsBasePath, + componentPath, + zos, + p -> true); + }); } } diff --git a/dashbuilder/dashbuilder-backend/dashbuilder-services/src/main/java/org/dashbuilder/transfer/LayoutComponentHelper.java b/dashbuilder/dashbuilder-backend/dashbuilder-services/src/main/java/org/dashbuilder/transfer/LayoutComponentHelper.java new file mode 100644 index 0000000000..81ea7df0be --- /dev/null +++ b/dashbuilder/dashbuilder-backend/dashbuilder-services/src/main/java/org/dashbuilder/transfer/LayoutComponentHelper.java @@ -0,0 +1,58 @@ +/* + * Copyright 2019 Red Hat, Inc. and/or its affiliates. + * + * 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 org.dashbuilder.transfer; + +import java.util.List; +import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; + +import org.dashbuilder.external.model.ExternalComponent; +import org.uberfire.ext.layout.editor.api.PerspectiveServices; +import org.uberfire.ext.layout.editor.api.editor.LayoutComponent; +import org.uberfire.ext.layout.editor.api.editor.LayoutRow; +import org.uberfire.ext.layout.editor.api.editor.LayoutTemplate; + +@ApplicationScoped +public class LayoutComponentHelper { + + @Inject + private PerspectiveServices perspectiveServices; + + public List findComponentsInTemplates(Predicate pageFilter) { + return perspectiveServices.listLayoutTemplates() + .stream() + .filter(lt -> pageFilter.test(lt.getName())) + .map(LayoutTemplate::getRows) + .flatMap(this::allComponentsStream) + .map(lt -> lt.getProperties().get(ExternalComponent.COMPONENT_ID_KEY)) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + } + + private Stream allComponentsStream(List row) { + return row.stream() + .flatMap(r -> r.getLayoutColumns().stream()) + .flatMap(cl -> Stream.concat(cl.getLayoutComponents().stream(), + allComponentsStream(cl.getRows()))); + } + +} diff --git a/dashbuilder/dashbuilder-backend/dashbuilder-services/src/test/java/org/dashbuilder/transfer/DataTransferServicesTest.java b/dashbuilder/dashbuilder-backend/dashbuilder-services/src/test/java/org/dashbuilder/transfer/DataTransferServicesTest.java index 5cd38121e2..c2beac4f1f 100644 --- a/dashbuilder/dashbuilder-backend/dashbuilder-services/src/test/java/org/dashbuilder/transfer/DataTransferServicesTest.java +++ b/dashbuilder/dashbuilder-backend/dashbuilder-services/src/test/java/org/dashbuilder/transfer/DataTransferServicesTest.java @@ -96,6 +96,8 @@ public class DataTransferServicesTest { DataSetDefJSONMarshaller dataSetDefJSONMarshaller; @Mock ComponentLoader externalComponentLoader; + @Mock + LayoutComponentHelper layoutComponentsHelper; Path componentsDir; @@ -124,7 +126,8 @@ public void setup() { pluginAddedEvent, navTreeChangedEvent, navTreeStorage, - externalComponentLoader); + externalComponentLoader, + layoutComponentsHelper); } @After @@ -301,7 +304,7 @@ public void testDoExportWithoutNavigation() throws Exception { @Test public void testDoExportWithComponents() throws Exception { - when(externalComponentLoader.loadExternal()).thenReturn(asList(component("c1"))); + when(layoutComponentsHelper.findComponentsInTemplates((any()))).thenReturn(asList("c1")); createFile(perspectivesFS, "page1/perspective_layout", ""); createFile(perspectivesFS, "page1/perspective_layout.plugin", ""); @@ -314,6 +317,13 @@ public void testDoExportWithComponents() throws Exception { // lost file in component Dir that should be ignored createComponentFile("lost", "lostfile", "ignore-me-import"); + // Other component that is not used so it should not be exported + createComponentFile("c2", "manifest.json", "manifest"); + createComponentFile("c2", "index.html", "html"); + createComponentFile("c2", "css/style.css", "style"); + createComponentFile("c2", "js/index.js", "js"); + + dataTransferServices.doExport(DataTransferExportModel.exportAll()); ZipInputStream zis = getZipInputStream(); diff --git a/dashbuilder/dashbuilder-backend/dashbuilder-services/src/test/java/org/dashbuilder/transfer/LayoutComponentHelperTest.java b/dashbuilder/dashbuilder-backend/dashbuilder-services/src/test/java/org/dashbuilder/transfer/LayoutComponentHelperTest.java new file mode 100644 index 0000000000..46081f5386 --- /dev/null +++ b/dashbuilder/dashbuilder-backend/dashbuilder-services/src/test/java/org/dashbuilder/transfer/LayoutComponentHelperTest.java @@ -0,0 +1,95 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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 org.dashbuilder.transfer; + +import java.util.Arrays; +import java.util.List; + +import org.dashbuilder.external.model.ExternalComponent; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.uberfire.ext.layout.editor.api.PerspectiveServices; +import org.uberfire.ext.layout.editor.api.editor.LayoutColumn; +import org.uberfire.ext.layout.editor.api.editor.LayoutComponent; +import org.uberfire.ext.layout.editor.api.editor.LayoutRow; +import org.uberfire.ext.layout.editor.api.editor.LayoutTemplate; + +import static java.util.Collections.singletonList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class LayoutComponentHelperTest { + + @Mock + PerspectiveServices perspectiveServices; + + @InjectMocks + LayoutComponentHelper layoutComponentsHelper; + + @Test + public void testComponentId() { + String c1 = "c1"; + String c2 = "c2"; + LayoutTemplate lt = createLayoutTemplate("lt", c1, c2); + when(perspectiveServices.listLayoutTemplates()).thenReturn(singletonList(lt)); + + List components = layoutComponentsHelper.findComponentsInTemplates(p -> true); + + assertEquals(2, components.size()); + assertEquals(components, Arrays.asList(c1, c2)); + } + + public void testNoComponentId() { + LayoutTemplate lt = createLayoutTemplate("lt"); + when(perspectiveServices.listLayoutTemplates()).thenReturn(singletonList(lt)); + + List components = layoutComponentsHelper.findComponentsInTemplates(p -> true); + + assertTrue(components.isEmpty()); + } + + public void testPageFilter() { + String c1 = "c1"; + LayoutTemplate lt = createLayoutTemplate("lt", c1); + when(perspectiveServices.listLayoutTemplates()).thenReturn(singletonList(lt)); + + List components = layoutComponentsHelper.findComponentsInTemplates(p -> false); + + assertTrue(components.isEmpty()); + } + + private LayoutTemplate createLayoutTemplate(String name, String... componentIds) { + LayoutTemplate lt = new LayoutTemplate(name); + LayoutRow lr = new LayoutRow(); + LayoutColumn lc = new LayoutColumn(""); + + lr.add(lc); + lt.addRow(lr); + for (String componentId : componentIds) { + LayoutComponent lComp = new LayoutComponent(); + lComp.addProperty(ExternalComponent.COMPONENT_ID_KEY, componentId); + lc.add(lComp); + } + return lt; + } + +} diff --git a/dashbuilder/dashbuilder-client/dashbuilder-cms-client/src/main/java/org/dashbuilder/client/cms/widget/NewPerspectivePopUpView.java b/dashbuilder/dashbuilder-client/dashbuilder-cms-client/src/main/java/org/dashbuilder/client/cms/widget/NewPerspectivePopUpView.java index 5e2543569c..3e59971037 100644 --- a/dashbuilder/dashbuilder-client/dashbuilder-cms-client/src/main/java/org/dashbuilder/client/cms/widget/NewPerspectivePopUpView.java +++ b/dashbuilder/dashbuilder-client/dashbuilder-cms-client/src/main/java/org/dashbuilder/client/cms/widget/NewPerspectivePopUpView.java @@ -19,6 +19,7 @@ import javax.enterprise.context.Dependent; import javax.inject.Inject; +import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.user.client.Event; import org.dashbuilder.client.cms.resources.i18n.ContentManagerConstants; import org.gwtbootstrap3.client.ui.Modal; @@ -187,6 +188,16 @@ public void okClick(final Event event) { buttonPressed = ButtonPressed.OK; presenter.onOK(); } + + @SinkNative(Event.ONMOUSEDOWN) + @EventHandler("nameInput") + public void nameInputEnter(final Event event) { + if (event.getKeyCode() == KeyCodes.KEY_ENTER) { + buttonPressed = ButtonPressed.OK; + presenter.onOK(); + } + } + @SinkNative(Event.ONCLICK) @EventHandler("cancelButton") diff --git a/dashbuilder/dashbuilder-client/dashbuilder-displayer-client/src/main/resources/org/dashbuilder/displayer/client/resources/i18n/CommonConstants.properties b/dashbuilder/dashbuilder-client/dashbuilder-displayer-client/src/main/resources/org/dashbuilder/displayer/client/resources/i18n/CommonConstants.properties index be27051b8d..7ffc24c92d 100644 --- a/dashbuilder/dashbuilder-client/dashbuilder-displayer-client/src/main/resources/org/dashbuilder/displayer/client/resources/i18n/CommonConstants.properties +++ b/dashbuilder/dashbuilder-client/dashbuilder-displayer-client/src/main/resources/org/dashbuilder/displayer/client/resources/i18n/CommonConstants.properties @@ -182,8 +182,8 @@ removeFilter=Remove filter DisplayerErrorWidget.displayerErrorTitle=Unexpected Error DisplayerErrorWidget.errorDetails=Details -ExternalComponentView.configurationIssueTitle=Modify DataSet Configuration -ExternalComponentView.configurationIssueDescription=Component does not support the current columns configuration. +ExternalComponentView.configurationIssueTitle=Modify Configuration +ExternalComponentView.configurationIssueDescription=Component does not support the current configuration. loadingComponent=Loading Component componentEditor=Component Editor diff --git a/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/ComponentGroupProducer.java b/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/ComponentGroupProducer.java new file mode 100644 index 0000000000..32ab208969 --- /dev/null +++ b/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/ComponentGroupProducer.java @@ -0,0 +1,123 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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 org.dashbuilder.client.editor.external; + +import java.util.List; +import java.util.stream.Collectors; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.event.Observes; +import javax.inject.Inject; + +import org.dashbuilder.client.editor.resources.i18n.Constants; +import org.dashbuilder.external.model.ExternalComponent; +import org.dashbuilder.external.service.ComponentService; +import org.jboss.errai.common.client.api.Caller; +import org.jboss.errai.ioc.client.container.SyncBeanManager; +import org.uberfire.ext.layout.editor.client.api.LayoutDragComponentGroup; +import org.uberfire.ext.layout.editor.client.api.LayoutDragComponentPalette; +import org.uberfire.ext.layout.editor.client.widgets.LayoutComponentPaletteGroupProvider; +import org.uberfire.ext.plugin.client.perspective.editor.events.PerspectiveEditorFocusEvent; + +@ApplicationScoped +public class ComponentGroupProducer { + + private static final Constants i18n = Constants.INSTANCE; + + private SyncBeanManager beanManager; + private LayoutDragComponentPalette layoutDragComponentPalette; + private Caller componentService; + + @Inject + public ComponentGroupProducer(Caller externalComponentService, + SyncBeanManager beanManager, + LayoutDragComponentPalette layoutDragComponentPalette) { + this.componentService = externalComponentService; + this.beanManager = beanManager; + this.layoutDragComponentPalette = layoutDragComponentPalette; + } + + public void onEditorFocus(@Observes PerspectiveEditorFocusEvent event) { + loadComponents(); + } + + public void loadComponents() { + + componentService.call((List components) -> { + addProvidedComponents(components.stream() + .filter(c -> c.isProvided()) + .collect(Collectors.toList())); + addExternalComponents(components.stream() + .filter(c -> !c.isProvided()) + .collect(Collectors.toList())); + }).listAllComponents(); + + } + + public void addExternalComponents(List components) { + String groupId = i18n.externalComponentsGroupName(); + if (!components.isEmpty()) { + checkGroup(groupId); + } + components.forEach(comp -> { + layoutDragComponentPalette.addDraggableComponent(groupId, + comp.getId(), + produceDragComponent(comp)); + }); + + } + + public void addProvidedComponents(List components) { + components.stream().forEach(component -> { + String groupId = component.getCategory() != null ? component.getCategory() : i18n.internalComponentsGroupName(); + checkGroup(groupId); + layoutDragComponentPalette.addDraggableComponent(groupId, component.getId(), produceDragComponent(component)); + }); + + } + + private void checkGroup(String groupId) { + if (!layoutDragComponentPalette.hasDraggableGroup(groupId)) { + layoutDragComponentPalette.addDraggableGroup(new LayoutComponentPaletteGroupProvider() { + + @Override + public String getName() { + return groupId; + } + + @Override + public LayoutDragComponentGroup getComponentGroup() { + return new LayoutDragComponentGroup(groupId); + } + }); + } + + } + + ExternalComponentDragDef produceDragComponent(ExternalComponent comp) { + ExternalComponentDragDef dragComp; + if (comp.isNoData()) { + dragComp = beanManager.lookupBean(ExternalDragComponent.class).getInstance(); + } else { + dragComp = beanManager.lookupBean(ExternalDisplayerDragComponent.class).getInstance(); + } + dragComp.setDragInfo(comp.getName(), comp.getIcon()); + dragComp.setComponentId(comp.getId()); + return dragComp; + } + +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/ComponentGroupProvider.java b/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/ComponentGroupProvider.java deleted file mode 100644 index c59c11e7a6..0000000000 --- a/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/ComponentGroupProvider.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2020 Red Hat, Inc. and/or its affiliates. - * - * 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 org.dashbuilder.client.editor.external; - -import java.util.Collections; -import java.util.List; - -import org.dashbuilder.external.model.ExternalComponent; -import org.jboss.errai.ioc.client.container.SyncBeanManager; -import org.uberfire.ext.layout.editor.client.api.LayoutDragComponentGroup; -import org.uberfire.ext.plugin.client.perspective.editor.api.PerspectiveEditorComponentGroupProvider; - -public abstract class ComponentGroupProvider implements PerspectiveEditorComponentGroupProvider { - - SyncBeanManager beanManager; - - List loadedComponents = Collections.emptyList(); - - public abstract void loadComponents(); - - @Override - public LayoutDragComponentGroup getComponentGroup() { - LayoutDragComponentGroup group = new LayoutDragComponentGroup(getName()); - - loadedComponents.forEach(comp -> { - ExternalComponentDragDef dragComp = produceDragComponent(comp); - group.addLayoutDragComponent(comp.getId(), dragComp); - }); - - return group; - } - - ExternalComponentDragDef produceDragComponent(ExternalComponent comp) { - ExternalComponentDragDef dragComp; - if (comp.isNoData()) { - dragComp = beanManager.lookupBean(ExternalDragComponent.class).getInstance(); - } else { - dragComp = beanManager.lookupBean(ExternalDisplayerDragComponent.class).getInstance(); - } - dragComp.setDragInfo(comp.getName(), comp.getIcon()); - dragComp.setComponentId(comp.getId()); - return dragComp; - } - -} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/ExternalComponentGroupProvider.java b/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/ExternalComponentGroupProvider.java deleted file mode 100644 index 482bd0c8fe..0000000000 --- a/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/ExternalComponentGroupProvider.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2020 Red Hat, Inc. and/or its affiliates. - * - * 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 org.dashbuilder.client.editor.external; - -import java.util.List; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; - -import org.dashbuilder.client.editor.resources.i18n.Constants; -import org.dashbuilder.external.model.ExternalComponent; -import org.dashbuilder.external.service.ComponentService; -import org.jboss.errai.common.client.api.Caller; -import org.jboss.errai.ioc.client.api.AfterInitialization; -import org.jboss.errai.ioc.client.api.EntryPoint; -import org.jboss.errai.ioc.client.container.SyncBeanManager; - -@EntryPoint -@ApplicationScoped -public class ExternalComponentGroupProvider extends ComponentGroupProvider { - - private final Constants i18n = Constants.INSTANCE; - - Caller externalComponentService; - - @Inject - public ExternalComponentGroupProvider(Caller externalComponentService, - SyncBeanManager beanManager) { - this.externalComponentService = externalComponentService; - this.beanManager = beanManager; - } - - @Override - @AfterInitialization - public void loadComponents() { - externalComponentService.call((List components) -> loadedComponents = components) - .listExternalComponents(); - } - - @Override - public String getName() { - return i18n.externalComponentsGroupName(); - } - -} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/InternalComponentGroupProvider.java b/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/InternalComponentGroupProvider.java deleted file mode 100644 index 8f0dc0995d..0000000000 --- a/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/main/java/org/dashbuilder/client/editor/external/InternalComponentGroupProvider.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2020 Red Hat, Inc. and/or its affiliates. - * - * 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 org.dashbuilder.client.editor.external; - -import java.util.List; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; - -import org.dashbuilder.client.editor.resources.i18n.Constants; -import org.dashbuilder.external.model.ExternalComponent; -import org.dashbuilder.external.service.ComponentService; -import org.jboss.errai.common.client.api.Caller; -import org.jboss.errai.ioc.client.api.AfterInitialization; -import org.jboss.errai.ioc.client.api.EntryPoint; -import org.jboss.errai.ioc.client.container.SyncBeanManager; - -@EntryPoint -@ApplicationScoped -public class InternalComponentGroupProvider extends ComponentGroupProvider { - - private static final Constants i18n = Constants.INSTANCE; - - Caller externalComponentService; - - @Inject - public InternalComponentGroupProvider(Caller externalComponentService, - SyncBeanManager beanManager) { - this.externalComponentService = externalComponentService; - this.beanManager = beanManager; - } - - @Override - @AfterInitialization - public void loadComponents() { - externalComponentService.call((List components) -> loadedComponents = components) - .listProvidedComponents(); - } - - @Override - public String getName() { - return i18n.internalComponentsGroupName(); - } - -} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/test/java/org/dashbuilder/client/editor/external/ExternalComponentGroupProviderTest.java b/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/test/java/org/dashbuilder/client/editor/external/ExternalComponentGroupProviderTest.java index 1573c26a1e..a872443b78 100644 --- a/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/test/java/org/dashbuilder/client/editor/external/ExternalComponentGroupProviderTest.java +++ b/dashbuilder/dashbuilder-client/dashbuilder-displayer-editor/src/test/java/org/dashbuilder/client/editor/external/ExternalComponentGroupProviderTest.java @@ -50,7 +50,7 @@ public class ExternalComponentGroupProviderTest { SyncBeanManager beanManager; @InjectMocks - ExternalComponentGroupProvider externalComponentGroupProvider; + ComponentGroupProducer componentGroupProducer; @Test public void testProduceDragComponent() { @@ -63,11 +63,11 @@ public void testProduceDragComponent() { when(c1.isNoData()).thenReturn(false); when(c2.isNoData()).thenReturn(true); - externalComponentGroupProvider.produceDragComponent(c1); - externalComponentGroupProvider.produceDragComponent(c2); + componentGroupProducer.produceDragComponent(c1); + componentGroupProducer.produceDragComponent(c2); verify(beanManager).lookupBean(eq(ExternalDisplayerDragComponent.class)); verify(beanManager).lookupBean(eq(ExternalDragComponent.class)); } -} \ No newline at end of file +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/package.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/package.json index 96cd434765..43b949a246 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/package.json +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/package.json @@ -10,10 +10,10 @@ "packages/*" ], "dependencies": { - "@types/react": "16.8.8", - "@types/react-dom": "16.8.2", - "react": "16.12.0", - "react-dom": "16.12.0" + "@types/react": "^16.8.8", + "@types/react-dom": "^16.8.2", + "react": "^16.12.0", + "react-dom": "^16.12.0" }, "scripts": { "init": "yarn install --force", @@ -28,43 +28,44 @@ "classNameTemplate": "org.dashbuilder.components.tests.{filename}.{classname}" }, "devDependencies": { - "@babel/core": "7.7.2", - "@babel/preset-env": "7.7.1", - "@babel/preset-react": "7.7.0", - "@testing-library/jest-dom": "5.3.0", + "@babel/core": "^7.7.2", + "@babel/preset-env": "^7.7.1", + "@babel/preset-react": "^7.7.0", + "@testing-library/jest-dom": "^5.3.0", "@testing-library/react": "^10.0.2", "@testing-library/react-hooks": "^3.2.1", "@types/jest": "^25.2.3", - "@types/mocha": "5.2.7", - "@types/node": "12.12.5", - "@types/react": "16.8.8", - "@types/react-dom": "16.8.2", - "@types/react-router": "5.1.1", - "@types/react-router-dom": "5.1.1", - "babel-loader": "8.0.6", - "circular-dependency-plugin": "5.2.0", - "clean-webpack-plugin": "0.1.19", - "copy-webpack-plugin": "5.1.0", - "cross-var": "1.1.0", - "css-loader": "3.2.0", + "@types/mocha": "^5.2.7", + "@types/node": "^12.12.5", + "@types/react": "^16.8.8", + "@types/react-dom": "^16.8.2", + "@types/react-router": "^5.1.1", + "@types/react-router-dom": "^5.1.1", + "babel-loader": "^8.0.6", + "circular-dependency-plugin": "^5.2.0", + "clean-webpack-plugin": "^0.1.19", + "copy-webpack-plugin": "^5.1.0", + "cross-var": "^1.1.0", + "css-loader": "^3.2.0", "jest": "^25.2.7", - "jest-junit": "9.0.0", + "jest-junit": "^9.0.0", "jest-webextension-mock": "^3.5.0", "lock-treatment-tool": "^0.4.1", - "node-sass": "4.12.0", - "null-loader": "3.0.0", - "prettier": "1.19.1", - "style-loader": "1.0.0", + "node-sass": "^4.12.0", + "null-loader": "^3.0.0", + "prettier": "^1.19.1", + "style-loader": "^1.0.0", "ts-jest": "^25.5.1", - "ts-loader": "6.2.1", - "tslint": "5.12.1", - "tslint-config-prettier": "1.15.0", - "tslint-react": "3.6.0", - "typescript": "3.8.3", - "webpack": "4.41.2", - "webpack-cli": "3.3.10", - "webpack-dev-server": "3.9.0", + "ts-loader": "^6.2.1", + "tslint": "^5.12.1", + "tslint-config-prettier": "^1.15.0", + "tslint-react": "^3.6.0", + "typescript": "^3.8.3", + "webpack": "^4.41.2", + "webpack-cli": "^3.3.10", + "webpack-dev-server": "^3.9.0", "webpack-merge": "^5.0.9", - "webpack-node-externals": "1.7.2" + "webpack-node-externals": "^1.7.2", + "canvas": "^2.6.1" } -} +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/package.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/package.json index da2a7a0a1d..a53e9d32b3 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/package.json +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/package.json @@ -1,7 +1,7 @@ { "name": "@dashbuilder-js/component-api", - "version": "0.1.0", - "description": "", + "version": "0.2.0", + "description": "Dashbuilder API to create external visual components.", "license": "Apache-2.0", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/ComponentApi.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/ComponentApi.ts new file mode 100644 index 0000000000..ded2a94215 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/ComponentApi.ts @@ -0,0 +1,54 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + * */ + +import { DataSet } from "./dataset"; +import { BrowserComponentBus } from "./controller/BrowserComponentBus"; +import { DashbuilderComponentController } from "./controller/DashbuilderComponentController"; +import { DashbuilderComponentDispatcher } from "./controller/DashbuilderComponentDispatcher"; +import { ComponentBus, ComponentController } from "./controller"; + +export class ComponentApi { + private bus: ComponentBus; + private controller: DashbuilderComponentController; + private listener: DashbuilderComponentDispatcher; + constructor() { + this.bus = new BrowserComponentBus(); + this.controller = new DashbuilderComponentController(this.bus); + this.listener = new DashbuilderComponentDispatcher(this.bus, this.controller); + this.listener.init(); + } + public getComponentController( + onInit?: (params: Map) => void, + onDataSet?: (dataSet: DataSet, params?: Map) => void + ): ComponentController { + if (onInit) { + this.controller.setOnInit(onInit); + } + if (onDataSet) { + this.controller.setOnDataSet(onDataSet); + } + return this.controller; + } + + public restart() { + this.destroy(); + this.listener.init(); + } + + public destroy() { + this.listener.stop(); + } +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/__tests__/api.test.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/__tests__/api.test.ts index 20336ef042..783b868238 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/__tests__/api.test.ts +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/__tests__/api.test.ts @@ -13,15 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import * as ComponentAPI from "../controller/api"; -import * as Bus from "../controller/ComponentBus"; +import { ComponentBus } from "../controller"; +import { ComponentApi } from "../ComponentApi"; import { ColumnType, DataSet, FilterRequest } from "../dataset"; import { FunctionCallRequest, FunctionResponse, FunctionResultType } from "../function"; import { ComponentMessage, MessageType } from "../message"; import { MessageProperty } from "../message/MessageProperty"; +import { DashbuilderComponentController } from "../controller/DashbuilderComponentController"; -const controller = ComponentAPI.getComponentController(); +const controller = new ComponentApi().getComponentController() as DashbuilderComponentController; const sampleDataSet: DataSet = { columns: [ @@ -77,12 +77,14 @@ describe("[Controller API] Callbacks", () => { describe("[Controller API] Sending Requests", () => { const bus = mockBus(); + const componentId = "42"; beforeAll(() => { + const params = new Map(); + params.set(MessageProperty.COMPONENT_ID, componentId); + controller.init(params); controller.setComponentBus(bus); }); - afterAll(() => { - controller.setComponentBus(Bus.INSTANCE); - }); + it("Configuration Issues", async () => { const configIssue = "some configuration issue."; const params = new Map(); @@ -95,7 +97,7 @@ describe("[Controller API] Sending Requests", () => { controller.requireConfigurationFix(configIssue); await delay(0); - expect(bus.send).toBeCalledWith(expected); + expect(bus.send).toBeCalledWith(componentId, expected); }); it("Configuration Fixed", async () => { @@ -106,7 +108,7 @@ describe("[Controller API] Sending Requests", () => { controller.configurationOk(); await delay(0); - expect(bus.send).toBeCalledWith(message); + expect(bus.send).toBeCalledWith(componentId, message); }); it("Filter", async () => { @@ -122,7 +124,7 @@ describe("[Controller API] Sending Requests", () => { properties: props }; controller.filter(filterRequest); - expect(bus.send).toBeCalledWith(message); + expect(bus.send).toBeCalledWith(componentId, message); }); }); @@ -215,7 +217,7 @@ async function postMessage(message: ComponentMessage) { await delay(0); } -function mockBus(): Bus.ComponentBus { +function mockBus(): ComponentBus { return { destroy: jest.fn(), start: jest.fn(), diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/BrowserComponentBus.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/BrowserComponentBus.ts new file mode 100644 index 0000000000..a3498ba21c --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/BrowserComponentBus.ts @@ -0,0 +1,46 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ +import { ComponentMessage, MessageProperty } from "../message"; +import { ComponentBus } from "./ComponentBus"; + +export class BrowserComponentBus implements ComponentBus { + + private listener: (message: ComponentMessage) => void; + + private readonly messageListener = (e: MessageEvent) => { + this.listener(e.data as ComponentMessage); + }; + + public start() { + window.addEventListener("message", this.messageListener, false); + } + + public send(componentId: string, message: ComponentMessage): void { + console.debug("[BrowserComponentBus] Sending Message"); + console.debug(message); + message.properties.set(MessageProperty.COMPONENT_ID, componentId); + window.parent.postMessage(message, window.location.href); + } + + public setListener(onMessage: (message: ComponentMessage) => void): void { + this.listener = onMessage; + } + + public destroy(): void { + window.removeEventListener("message", this.messageListener, false); + } + +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/ComponentBus.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/ComponentBus.ts index c51ae477c4..49c2e127d2 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/ComponentBus.ts +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/ComponentBus.ts @@ -18,34 +18,7 @@ import { ComponentMessage } from "../message"; export interface ComponentBus { start(): void; - send(message: ComponentMessage): void; + send(componentId: string, message: ComponentMessage): void; setListener(onMessage: (message: ComponentMessage) => void): void; destroy(): void; -} - -class BrowserComponentBus implements ComponentBus { - private listener: (message: ComponentMessage) => void; - private readonly messageDispatcher = (e: MessageEvent) => { - if (this.listener) { - this.listener(e.data as ComponentMessage); - } - }; - - public start() { - window.addEventListener("message", this.messageDispatcher, false); - } - - public send(message: ComponentMessage): void { - window.parent.postMessage(message, window.location.href); - } - - public setListener(onMessage: (message: ComponentMessage) => void): void { - this.listener = onMessage; - } - - public destroy(): void { - window.removeEventListener("message", this.messageDispatcher, false); - } -} - -export const INSTANCE: ComponentBus = new BrowserComponentBus(); +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/DashbuilderComponentController.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/DashbuilderComponentController.ts index 2f2dcd255e..ed5f128ec2 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/DashbuilderComponentController.ts +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/DashbuilderComponentController.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import * as Bus from "./ComponentBus"; import { DataSet, FilterRequest } from "../dataset"; import { FunctionCallRequest, FunctionResponse, FunctionResultType } from "../function"; import { MessageType } from "../message"; import { MessageProperty } from "../message/MessageProperty"; +import { ComponentBus } from "./ComponentBus"; import { ComponentController } from "./ComponentController"; interface FunctionCallbacks { @@ -30,18 +30,25 @@ interface FunctionCallbacks { export class DashbuilderComponentController implements ComponentController { private callbacks: Map = new Map(); - private bus = Bus.INSTANCE; + constructor(private bus: ComponentBus, private componentId?: string) { + // no op + } public onInit: (params: Map) => void = p => { - console.log("Received INIT."); - console.log(p); + console.debug("Received INIT."); + console.debug(p); }; public onDataSet: (dataSet: DataSet, params?: Map) => void = ds => { - console.log("Received DataSet."); - console.log(ds); + console.debug("Received DataSet."); + console.debug(ds); }; + public init(params: Map) { + this.componentId = params.get(MessageProperty.COMPONENT_ID); + this.onInit(params); + } + public setOnDataSet(onDataSet: (dataSet: DataSet, params?: Map) => void) { this.onDataSet = onDataSet; } @@ -57,13 +64,13 @@ export class DashbuilderComponentController implements ComponentController { public requireConfigurationFix(message: string): void { const props = new Map(); props.set(MessageProperty.CONFIGURATION_ISSUE, message); - this.bus.send({ + this.bus.send(this.componentId!, { type: MessageType.FIX_CONFIGURATION, properties: props }); } public configurationOk(): void { - this.bus.send({ + this.bus.send(this.componentId!, { type: MessageType.CONFIGURATION_OK, properties: new Map() }); @@ -72,7 +79,7 @@ export class DashbuilderComponentController implements ComponentController { public filter(filterRequest: FilterRequest): void { const props = new Map(); props.set(MessageProperty.FILTER, filterRequest); - this.bus.send({ + this.bus.send(this.componentId!, { type: MessageType.FILTER, properties: props }); @@ -80,7 +87,7 @@ export class DashbuilderComponentController implements ComponentController { public callFunction(functionCallRequest: FunctionCallRequest): Promise { const props = new Map(); props.set(MessageProperty.FUNCTION_CALL, functionCallRequest); - this.bus.send({ + this.bus.send(this.componentId!, { type: MessageType.FUNCTION_CALL, properties: props }); @@ -111,7 +118,7 @@ export class DashbuilderComponentController implements ComponentController { this.callbacks.delete(key); } - public setComponentBus(bus: Bus.ComponentBus) { + public setComponentBus(bus: ComponentBus) { this.bus = bus; } diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/DashbuilderComponentDispatcher.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/DashbuilderComponentDispatcher.ts index fa5a4310c1..6a57b8acf0 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/DashbuilderComponentDispatcher.ts +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/DashbuilderComponentDispatcher.ts @@ -18,25 +18,22 @@ import { DataSet } from "../dataset"; import { FunctionResponse } from "../function"; import { ComponentMessage, MessageType } from "../message"; import { MessageProperty } from "../message/MessageProperty"; - -import * as Bus from "./ComponentBus"; +import { ComponentBus } from "./ComponentBus"; import { DashbuilderComponentController } from "./DashbuilderComponentController"; import { InternalComponentDispatcher } from "./InternalComponentListener"; export class DashbuilderComponentDispatcher implements InternalComponentDispatcher { - public readonly componentController: DashbuilderComponentController; - private componentId: string; - constructor(componentController: DashbuilderComponentController) { - this.componentController = componentController; + constructor(private readonly bus: ComponentBus, public readonly componentController: DashbuilderComponentController) { + // no op } private readonly messageDispatcher = (message: ComponentMessage) => { if (message.type === MessageType.INIT) { this.componentId = message.properties.get(MessageProperty.COMPONENT_ID); - this.componentController.onInit(message.properties); + this.componentController.init(message.properties); } if (message.type === MessageType.DATASET) { @@ -56,8 +53,8 @@ export class DashbuilderComponentDispatcher implements InternalComponentDispatch } public init(): void { - Bus.INSTANCE.setListener(this.messageDispatcher); - Bus.INSTANCE.start(); + this.bus.setListener(this.messageDispatcher); + this.bus.start(); } public sendMessage(componentMessage: ComponentMessage): void { @@ -66,6 +63,6 @@ export class DashbuilderComponentDispatcher implements InternalComponentDispatch } public stop(): void { - Bus.INSTANCE.destroy(); + this.bus.destroy(); } } diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/api.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/api.ts deleted file mode 100644 index 462e75392f..0000000000 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/api.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2020 Red Hat, Inc. and/or its affiliates. - * - * 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. - * */ - -import { DataSet } from "../dataset"; -import { DashbuilderComponentController } from "./DashbuilderComponentController"; -import { DashbuilderComponentDispatcher } from "./DashbuilderComponentDispatcher"; - -const controller = new DashbuilderComponentController(); -const listener = new DashbuilderComponentDispatcher(controller); - -listener.init(); - -export function getComponentController( - onInit?: (params: Map) => void, - onDataSet?: (dataSet: DataSet, params?: Map) => void -) { - if (onInit) { - controller.setOnInit(onInit); - } - if (onDataSet) { - controller.setOnDataSet(onDataSet); - } - return controller; -} - -export function restart() { - destroy(); - listener.init(); -} - - -export function destroy() { - listener.stop(); -} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/index.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/index.ts index 38285d8763..ee9dadd1be 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/index.ts +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/controller/index.ts @@ -13,4 +13,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export * from "./ComponentController"; \ No newline at end of file +export * from "./ComponentController"; +export * from "./ComponentBus" \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/index.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/index.ts index c32ca2a43b..2a9802e6ee 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/index.ts +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/index.ts @@ -17,4 +17,5 @@ export * from "./message"; export * from "./dataset"; export * from "./function"; -export * from "./controller/api"; +export * from "./controller"; +export * from "./ComponentApi"; \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/message/index.ts b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/message/index.ts index c71b46c361..e4a56f1c1c 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/message/index.ts +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-api/src/message/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ export * from "./MessageType"; +export * from "./MessageProperty" export * from "./ComponentMessage"; \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/jest.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/jest.config.js new file mode 100644 index 0000000000..6f02e4bde6 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/jest.config.js @@ -0,0 +1,29 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +module.exports = { + reporters: ["default"], + moduleDirectories: ["node_modules", "src"], + moduleFileExtensions: ["js", "jsx", "ts", "tsx"], + testRegex: "/__tests__/.*\\.test\\.(jsx?|tsx?)$", + transform: { + "^.+\\.jsx?$": "babel-jest", + "^.+\\.tsx?$": "ts-jest" + }, + moduleNameMapper: { + "\\.(css|less|sass|scss)$": "/__mocks__/styleMock.js" + } +}; diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/package.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/package.json new file mode 100644 index 0000000000..6f9cdd9a04 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/package.json @@ -0,0 +1,32 @@ +{ + "name": "@dashbuilder-js/component-dev", + "version": "0.2.0", + "description": "", + "license": "Apache-2.0", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "lint": "tslint -c ../../tslint.json 'src/**/*.{ts,tsx,js,jsx}'", + "test": "jest --verbose --silent --passWithNoTests", + "test:clearCache": "jest --clearCache", + "build:fast": "rm -rf dist && webpack", + "build": "yarn run lint && yarn test && yarn run build:fast", + "build:prod": "yarn run build --mode production --devtool none", + "start": "webpack-dev-server -d --host 0.0.0.0" + }, + "dependencies": { + "@dashbuilder-js/component-api": "0.1.0" + }, + "babel": { + "presets": [ + "@babel/env", + "@babel/react" + ] + }, + "jest-junit": { + "outputDirectory": "./target" + } +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/src/ComponentDevPane.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/src/ComponentDevPane.tsx new file mode 100644 index 0000000000..f72eacb5a4 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/src/ComponentDevPane.tsx @@ -0,0 +1,30 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; + +export interface DevPaneProps { + sendInit: () => void; + sendDataSet: () => void; +} +export function ComponentDevPane(props: DevPaneProps) { + return ( +
+ + +
+ ); +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/src/index.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/src/index.tsx new file mode 100644 index 0000000000..a657d1b4db --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/src/index.tsx @@ -0,0 +1,163 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import { ComponentDevPane } from "./ComponentDevPane"; +import { + DataSet, + MessageProperty, + ComponentMessage, + MessageType, + FunctionResponse, + FunctionCallRequest, + FunctionResultType +} from "@dashbuilder-js/component-api"; + +const DEV_FILE = "/manifest.dev.json"; +const COMP_ID = 42; +let initMessage: ComponentMessage; +let dataSetMessage: ComponentMessage; +let functions: FunctionDef[]; + +interface Prop { + key: string; + value: string; +} + +interface FunctionDef { + name: string; + response: string; + params: Prop[]; +} + +interface ComponentDevConfiguration { + init: Prop[]; + functions: FunctionDef[]; + dataSet: DataSet; +} + +function handleDevConf(text: string) { + const devConf = JSON.parse(text) as ComponentDevConfiguration; + const devPane = document.createElement("div"); + document.body.prepend(devPane); + + ReactDOM.render( + sendMessage(dataSetMessage)} sendInit={() => sendMessage(initMessage)} />, + devPane + ); + + window.addEventListener("message", e => { + const message = e.data as ComponentMessage; + if (message.type === MessageType.FUNCTION_CALL) { + respondFunctionCall(message); + } + }); + + functions = devConf.functions; + createInit(devConf); + createDataSet(devConf); + + setTimeout(() => { + sendMessage(initMessage); + setTimeout(() => { + sendMessage(dataSetMessage); + }, 100); + }, 100); +} + +function respondFunctionCall(message: ComponentMessage) { + const functionCall = message.properties.get(MessageProperty.FUNCTION_CALL) as FunctionCallRequest; + const functionName = functionCall.functionName; + + const confResponse = functions + ? functions.filter(f => f.name === functionName).filter(f => paramsMatch(functionCall.parameters, f.params))[0] + : undefined; + console.debug("[COMPONENT DEV] Function response: "); + console.debug(confResponse); + let functionResponse: FunctionResponse; + if (confResponse === undefined) { + functionResponse = { + message: "Function not found", + request: functionCall, + resultType: FunctionResultType.NOT_FOUND, + result: undefined + }; + } else if (confResponse.response === "ERROR") { + functionResponse = { + message: "Function Error!", + request: functionCall, + resultType: FunctionResultType.ERROR, + result: undefined + }; + } else { + functionResponse = { + message: "Success!", + request: functionCall, + resultType: FunctionResultType.SUCCESS, + result: confResponse.response + }; + } + + const props = new Map(); + props.set(MessageProperty.FUNCTION_RESPONSE, functionResponse); + sendMessage({ + type: MessageType.FUNCTION_RESPONSE, + properties: props + }); +} + +function createInit(devConf: ComponentDevConfiguration) { + const props = new Map(); + devConf.init.forEach(prop => props.set(prop.key, prop.value)); + initMessage = { + type: MessageType.INIT, + properties: props + }; +} + +function createDataSet(devConf: ComponentDevConfiguration) { + const props = new Map(); + devConf.init.forEach(prop => props.set(prop.key, prop.value)); + props.set(MessageProperty.DATASET, devConf.dataSet); + dataSetMessage = { + type: MessageType.DATASET, + properties: props + }; +} + +function paramsMatch(requestParams: Map, devParams: Prop[]): boolean { + const devParamsEmpty = !devParams || devParams.length === 0; + const requestParamsEmpty = !requestParams || requestParams.size === 0; + const allMatch = + devParams && requestParams ? !devParamsEmpty && devParams.every(p => requestParams.get(p.key) === p.value) : false; + return (devParamsEmpty && requestParamsEmpty) || allMatch; +} + +function sendMessage(message: ComponentMessage) { + console.debug("[COMPONENT DEV] Sending Message"); + console.debug(message); + message.properties.set(MessageProperty.COMPONENT_ID, COMP_ID); + window.postMessage(message, window.location.href); +} + +export class ComponentDev { + public start() { + fetch(DEV_FILE) + .then(r => r.text()) + .then(text => handleDevConf(text)) + .catch(e => console.log("Not able to load manifest DEV file: " + e)); + } +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/tsconfig.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/tsconfig.json new file mode 100644 index 0000000000..039e0b4d16 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src"] +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/webpack.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/webpack.config.js new file mode 100644 index 0000000000..6a0569c110 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/component-dev/webpack.config.js @@ -0,0 +1,29 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +const { merge } = require("webpack-merge"); +const common = require("../../webpack.common.config"); + +module.exports = async (env, argv) => { + return merge(common, { + entry: { + index: "./src/index.tsx" + }, + output: { + libraryTarget: "commonjs2" + } + }); +}; diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/jest.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/jest.config.js new file mode 100644 index 0000000000..6f02e4bde6 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/jest.config.js @@ -0,0 +1,29 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +module.exports = { + reporters: ["default"], + moduleDirectories: ["node_modules", "src"], + moduleFileExtensions: ["js", "jsx", "ts", "tsx"], + testRegex: "/__tests__/.*\\.test\\.(jsx?|tsx?)$", + transform: { + "^.+\\.jsx?$": "babel-jest", + "^.+\\.tsx?$": "ts-jest" + }, + moduleNameMapper: { + "\\.(css|less|sass|scss)$": "/__mocks__/styleMock.js" + } +}; diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/package.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/package.json new file mode 100644 index 0000000000..8c688c70d3 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/package.json @@ -0,0 +1,34 @@ +{ + "name": "@dashbuilder-js/heatmap-base", + "version": "0.1.0", + "description": "", + "license": "Apache-2.0", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "lint": "tslint -c ../../tslint.json 'src/**/*.{ts,tsx,js,jsx}'", + "test": "jest --silent --verbose --passWithNoTests", + "test:clearCache": "jest --clearCache", + "build:fast": "rm -rf dist && webpack", + "build": "yarn run lint && yarn test && yarn run build:fast", + "build:prod": "yarn run build --mode production --devtool none", + "debug": "node --inspect-brk ../../node_modules/jest/bin/jest.js -i", + "start": "webpack-dev-server -d --host 0.0.0.0" + }, + "dependencies": { + "@types/heatmap.js": "^2.0.36", + "heatmap.js": "2.0.5" + }, + "babel": { + "presets": [ + "@babel/env", + "@babel/react" + ] + }, + "jest-junit": { + "outputDirectory": "./target" + } +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/src/SvgHeatmap.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/src/SvgHeatmap.tsx new file mode 100644 index 0000000000..139f6d7290 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/src/SvgHeatmap.tsx @@ -0,0 +1,121 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import { useCallback, useEffect, createRef, useState } from "react"; +import * as heatmap from "heatmap.js"; + +export interface SvgNodeValue { + nodeId: string; + value: number; +} + +interface NodeInfo { + x: number; + y: number; + size: number; +} + +interface HeatData { + x: number; + y: number; + value: number; + radius?: number; +} + +const reduce = (data: HeatData[], reducer: (v1: number, v2: number) => number) => + data.length > 0 ? data.map(d => d.value).reduce((d1, d2) => reducer(d1, d2)) : 0; + +function createHeatmap(parent: HTMLElement, heatData: HeatData[]) { + return heatmap + .create({ + container: parent + }) + .setData({ + max: reduce(heatData, Math.max), + min: reduce(heatData, Math.min), + data: heatData + }); +} + +const getNodeInfo = (el: HTMLElement): NodeInfo => { + const bounds = el.getBoundingClientRect(); + const radius = Math.sqrt((bounds.width * bounds.height) / 4); + return { + x: (bounds.left + bounds.right) / 2, + y: (bounds.top + bounds.bottom) / 2, + size: radius + }; +}; + +export interface SvgHeatmapProps { + svgNodesValues: SvgNodeValue[]; + svgContent: string; + width?: string; + height?: string; +} + +export function SvgHeatmap(props: SvgHeatmapProps) { + const parentRef = createRef(); + const [svgHeatmap, setSvgHeatmap] = useState>(); + const [repaint, setRepaint] = useState(false); + + useEffect(() => { + if (props.svgContent) { + const heatmapContainer = parentRef.current!; + heatmapContainer.innerHTML = props.svgContent; + const svg = heatmapContainer.querySelector("svg")!; + svg.style.width = "100%"; + svg.style.height = "auto"; + setSvgHeatmap(createHeatmap(heatmapContainer, [])); + } + }, [props.svgContent]); + + useEffect(() => { + if (svgHeatmap && props.svgNodesValues && props.svgNodesValues.length > 0) { + const values = props.svgNodesValues + .filter(n => document.getElementById(n.nodeId)) + .map(nodeValue => { + const node = document.getElementById(nodeValue.nodeId); + const nodeInfo = getNodeInfo(node!); + return { + x: Math.ceil(nodeInfo.x), + y: Math.ceil(nodeInfo.y), + radius: nodeInfo.size, + value: nodeValue.value + }; + }); + + if (values.length > 0) { + svgHeatmap.setData({ + min: values.map(d => d.value).reduce((d1, d2) => Math.min(d1, d2)), + max: values.map(d => d.value).reduce((d1, d2) => Math.max(d1, d2)), + data: values + }); + } + svgHeatmap.repaint(); + } + }, [svgHeatmap, props.svgNodesValues, repaint]); + + const onResize = useCallback(() => setRepaint(previous => !previous), [repaint]); + + useEffect(() => { + window.addEventListener("resize", onResize, false); + return () => window.removeEventListener("resize", onResize, false); + }, [repaint]); + + return
; +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/src/__tests__/svgHeatmap.test.disabled b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/src/__tests__/svgHeatmap.test.disabled new file mode 100644 index 0000000000..1d8f313375 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/src/__tests__/svgHeatmap.test.disabled @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ +import * as React from "react"; +import { render } from "@testing-library/react"; +import { SVGHeatmap } from "../SVGHeatmap"; + +const svg = ` + + + +`; + +test("svg heatmap component with node values", () => { + const heatmapResult = render( + + ); + const canvas = heatmapResult.container.getElementsByTagName("canvas")[0] as HTMLCanvasElement; + expect(canvas).toBeTruthy(); + expect(canvas.toDataURL("image/jpg")).toBe( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABmJLR0QA/wD/AP+gvaeTAAAAX0lEQVR4nO3RsQ3AIBAEwX9cgvsvFUHMOzcgzYQXnbQ5nhhRZI+sG/9ouw+wEuQwghzmG+SNvuEHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwG0mpkMEGmNamG8AAAAASUVORK5CYII=" + ); +}); + +test("svg heatmap component without values", () => { + const heatmapResult = render(); + const canvas = heatmapResult.container.getElementsByTagName("canvas")[0] as HTMLCanvasElement; + expect(canvas).toBeTruthy(); + + expect(canvas.toDataURL("image/jpg")).toBe( + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAABmJLR0QA/wD/AP+gvaeTAAAADElEQVQImWNgoBMAAABpAAFEI8ARAAAAAElFTkSuQmCC" + ); +}); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/src/index.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/src/index.tsx new file mode 100644 index 0000000000..23f5066fcb --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/src/index.tsx @@ -0,0 +1,17 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +export * from "./SvgHeatmap"; \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/tsconfig.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/tsconfig.json new file mode 100644 index 0000000000..930ee0e208 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + }, + "include": ["src"] +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/webpack.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/webpack.config.js new file mode 100644 index 0000000000..e3cc8641c3 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-base/webpack.config.js @@ -0,0 +1,31 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +const nodeExternals = require("webpack-node-externals"); +const { merge } = require("webpack-merge"); +const common = require("../../webpack.common.config"); + +module.exports = async (env, argv) => { + return merge(common, { + entry: { + index: "./src/index.tsx" + }, + output: { + libraryTarget: "commonjs2" + }, + externals: [nodeExternals({ modulesDir: "../../node_modules" })] + }); +}; diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/jest.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/jest.config.js new file mode 100644 index 0000000000..6f02e4bde6 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/jest.config.js @@ -0,0 +1,29 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +module.exports = { + reporters: ["default"], + moduleDirectories: ["node_modules", "src"], + moduleFileExtensions: ["js", "jsx", "ts", "tsx"], + testRegex: "/__tests__/.*\\.test\\.(jsx?|tsx?)$", + transform: { + "^.+\\.jsx?$": "babel-jest", + "^.+\\.tsx?$": "ts-jest" + }, + moduleNameMapper: { + "\\.(css|less|sass|scss)$": "/__mocks__/styleMock.js" + } +}; diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/package.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/package.json new file mode 100644 index 0000000000..e881d4f532 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/package.json @@ -0,0 +1,36 @@ +{ + "name": "@dashbuilder-js/heatmap-component", + "version": "0.1.0", + "description": "", + "license": "Apache-2.0", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "lint": "tslint -c ../../tslint.json 'src/**/*.{ts,tsx,js,jsx}'", + "test": "jest --silent --verbose --passWithNoTests", + "test:clearCache": "jest --clearCache", + "build:fast": "rm -rf dist && webpack", + "build": "yarn run lint && yarn test && yarn run build:fast", + "build:prod": "yarn run build --mode production --devtool none", + "start": "webpack-dev-server -d --host 0.0.0.0" + }, + "dependencies": { + "@dashbuilder-js/component-api": "0.2.0", + "@dashbuilder-js/heatmap-base": "0.1.0" + }, + "devDependencies": { + "@dashbuilder-js/component-dev": "0.2.0" + }, + "babel": { + "presets": [ + "@babel/env", + "@babel/react" + ] + }, + "jest-junit": { + "outputDirectory": "./target" + } +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/src/SVGHeatmapComponent.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/src/SVGHeatmapComponent.tsx new file mode 100644 index 0000000000..8db95516cd --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/src/SVGHeatmapComponent.tsx @@ -0,0 +1,120 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import { useEffect, useState } from "react"; + +import { SvgHeatmap, SvgNodeValue } from "@dashbuilder-js/heatmap-base"; +import { ColumnType, DataSet } from "@dashbuilder-js/component-api"; +import { ComponentController } from "@dashbuilder-js/component-api/dist/controller/ComponentController"; + +const SVG_CONTENT_PARAM = "svgContent"; +const SVG_URL_PARAM = "svgUrl"; + +const NOT_ENOUGH_COLUMNS_MSG = "Heatmap expects 2 columns: Node ID (TEXT or Label) and value (NUMBER)"; +const INVALID_COLUMNS_TYPE_MSG = "Wrong columns type. First column should be TEXT or LABEL and second column NUMBER."; +const MISSING_PARAM_MSG = "You must provide either a SVG URL or the SVG Content."; + +const notEmpty = (param?: string) => param !== undefined && param.trim() !== ""; + +const validateDataSet = (ds: DataSet): string | undefined => { + if (ds.columns.length < 2) { + return NOT_ENOUGH_COLUMNS_MSG; + } + if ( + (ds.columns[0].type !== ColumnType.TEXT && ds.columns[0].type !== ColumnType.LABEL) || + ds.columns[1].type !== ColumnType.NUMBER + ) { + return INVALID_COLUMNS_TYPE_MSG; + } +}; + +const validateParams = (params: Map) => { + const svgContent = params.get(SVG_CONTENT_PARAM); + const svgUrl = params.get(SVG_URL_PARAM) as string; + if (!(svgContent || svgUrl)) { + return MISSING_PARAM_MSG; + } +}; +const extractNodeInfo = (dataset: string[][]): SvgNodeValue[] => + dataset.map(row => ({ + nodeId: row[0], + value: +row[1] + })); + +interface AppState { + svgContent?: string; + data: SvgNodeValue[]; + errorMessage?: string; +} + +interface Props { + controller: ComponentController; +} + +export function SVGHeatmapComponent(props: Props) { + const [appState, setAppState] = useState({ data: [] }); + + const onDataset = (ds: DataSet, params: Map) => { + const validationMessage = validateDataSet(ds) || validateParams(params); + if (validationMessage) { + props.controller.requireConfigurationFix(validationMessage); + setAppState(previousState => ({ + ...previousState, + errorMessage: validationMessage + })); + return; + } + props.controller.configurationOk(); + + const userSvgContent = params.get(SVG_CONTENT_PARAM); + const svgUrl = params.get(SVG_URL_PARAM); + + if (notEmpty(userSvgContent)) { + setAppState(previousState => ({ + ...previousState, + data: extractNodeInfo(ds.data), + svgContent: userSvgContent + })); + } else { + fetch(svgUrl) + .then(r => r.text()) + .then(urlSvgContent => + setAppState(previousState => ({ + ...previousState, + data: extractNodeInfo(ds.data), + svgContent: urlSvgContent + })) + ) + .catch(e => + setAppState(previousState => ({ + ...previousState, + data: [], + svgContent: undefined, + errorMessage: e + })) + ); + } + }; + + useEffect(() => props.controller.setOnDataSet(onDataset), [appState.data]); + + return appState?.errorMessage ? ( + {appState.errorMessage} + ) : ( + + ); +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/src/index-dev.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/src/index-dev.tsx new file mode 100644 index 0000000000..338a4d35fa --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/src/index-dev.tsx @@ -0,0 +1,30 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import * as ReactDOM from "react-dom"; + +import { ComponentDev } from "@dashbuilder-js/component-dev"; +import { ComponentApi } from "@dashbuilder-js/component-api"; +import { SVGHeatmapComponent } from "./SVGHeatmapComponent"; + +const componentApi = new ComponentApi(); +ReactDOM.render( + , + document.getElementById("app")! +); + +new ComponentDev().start(); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/src/index.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/src/index.tsx new file mode 100644 index 0000000000..c099070704 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/src/index.tsx @@ -0,0 +1,24 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import * as ReactDOM from "react-dom"; + +import { ComponentApi } from "@dashbuilder-js/component-api"; +import { SVGHeatmapComponent } from "./SVGHeatmapComponent"; + +const api = new ComponentApi(); +ReactDOM.render(, document.getElementById("app")!); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/dev.svg b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/dev.svg new file mode 100644 index 0000000000..d6d1716e54 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/dev.svg @@ -0,0 +1,472 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/index.html b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/index.html new file mode 100644 index 0000000000..dd6e43da96 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/index.html @@ -0,0 +1,28 @@ + + + + + Heatmap Component + + + + + +
+ + + diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/manifest.dev.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/manifest.dev.json new file mode 100644 index 0000000000..2f5ff471b5 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/manifest.dev.json @@ -0,0 +1,49 @@ +{ + "init": [ + { + "key": "svgUrl", + "value": "/world.svg" + } + ], + "dataSet": { + "columns": [ + { + "name": "nodeId", + "type": "TEXT", + "settings": { + "columnId": "nodeId", + "columnName": "Node ID", + "valueExpression": "value", + "emptyTemplate": "---", + "valuePattern": "#" + } + }, + { + "name": "value", + "type": "NUMBER", + "settings": { + "columnId": "value", + "columnName": "Value", + "valueExpression": "value", + "emptyTemplate": "---", + "valuePattern": "#" + } + } + ], + "data": [ + ["US", "1"], + ["BO", "1"], + ["BR", "1"], + ["CD", "1"], + ["MG", "1"], + ["MZ", "1"], + ["ZM", "1"], + + ["GB", "1"], + ["AU", "1"], + ["CN", "1"], + ["CA", "0"], + ["RU", "2"] + ] + } +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/manifest.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/manifest.json new file mode 100644 index 0000000000..d44f6ba2c1 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/manifest.json @@ -0,0 +1,17 @@ +{ + "name": "Heatmap", + "parameters": [ + { + "name": "svgContent", + "label": "SVG Content", + "type": "text", + "defaultValue": "" + }, + { + "name": "svgUrl", + "type": "text", + "label": "SVG URL", + "defaultValue": "" + } + ] +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/world.svg b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/world.svg new file mode 100644 index 0000000000..53f7c6b19c --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/static/world.svg @@ -0,0 +1,1583 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/tsconfig.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/tsconfig.json new file mode 100644 index 0000000000..3012080925 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "declaration": false + }, + "include": ["src"] +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/webpack.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/webpack.config.js new file mode 100644 index 0000000000..11df0fd28e --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/heatmap-component/webpack.config.js @@ -0,0 +1,49 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +const path = require("path"); +const CopyPlugin = require("copy-webpack-plugin"); +const { merge } = require("webpack-merge"); +const common = require("../../webpack.common.config"); + +module.exports = async (env, argv) => { + let entryPoint = "./src/index.tsx"; + const copyResources = [ + { from: "./static/index.html", to: "./index.html" }, + { from: "./static/manifest.json", to: "./manifest.json" } + ]; + + if (process.env.WEBPACK_DEV_SERVER) { + entryPoint = "./src/index-dev.tsx"; + copyResources.push({ from: "./static/manifest.dev.json", to: "./manifest.dev.json" }); + copyResources.push({ from: "./static/dev.svg", to: "./dev.svg" }); + } + + return merge(common, { + entry: { + index: entryPoint + }, + plugins: [new CopyPlugin(copyResources)], + devServer: { + historyApiFallback: false, + disableHostCheck: true, + watchContentBase: true, + contentBase: [path.join(__dirname, "./dist"), path.join(__dirname, "./static")], + compress: true, + port: 9001 + } + }); +}; \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/package.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/package.json index 8c398cdefc..9ef60d7ee5 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/package.json +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/package.json @@ -15,10 +15,13 @@ "build:fast": "rm -rf dist && webpack", "build": "yarn run lint && yarn test && yarn run build:fast", "build:prod": "yarn run build --mode production --devtool none", - "start": "webpack-dev-server -d --host 0.0.0.0" + "start": "webpack-dev-server -d --host 0.0.0.0 --env WEBPACK_DEV_SERVER=true" }, "dependencies": { - "@dashbuilder-js/component-api": "0.1.0" + "@dashbuilder-js/component-api": "0.2.0" + }, + "devDependencies": { + "@dashbuilder-js/component-dev": "0.2.0" }, "babel": { "presets": [ diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/Logo.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/Logo.tsx index be8321b150..02227f7ea8 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/Logo.tsx +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/Logo.tsx @@ -24,4 +24,4 @@ export interface LogoProps { export function Logo(props: LogoProps) { return ; -} +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/App.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/LogoComponent.tsx similarity index 61% rename from dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/App.tsx rename to dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/LogoComponent.tsx index ba7041b827..d6a69dd72a 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/App.tsx +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/LogoComponent.tsx @@ -14,33 +14,31 @@ * limitations under the License. */ +import { ComponentController } from "@dashbuilder-js/component-api"; import * as React from "react"; -import { useEffect, useState } from "react"; +import { useState, useEffect } from "react"; import { Logo, LogoProps } from "./Logo"; -import * as ComponentAPI from "@dashbuilder-js/component-api"; -const DEFAULT_SRC = "./images/dashbuilder-logo.png"; const SRC_PROP = "src"; const WIDTH_PROP = "width"; const HEIGHT_PROP = "height"; -export function App() { +interface Props { + controller: ComponentController; +} +export function LogoComponent(props: Props) { const [logoProps, setLogoProps] = useState({ - src: DEFAULT_SRC + src: "" }); - const handleInit = (componentProps: Map) => { - setLogoProps({ - src: (componentProps.get(SRC_PROP) as string) || DEFAULT_SRC, - width: componentProps.get(WIDTH_PROP) as string, - height: componentProps.get(HEIGHT_PROP) as string - }); - }; - useEffect(() => { - ComponentAPI.getComponentController(handleInit); - return () => { - ComponentAPI.destroy(); - }; + props.controller.setOnInit(componentProps => { + setLogoProps({ + src: (componentProps.get(SRC_PROP) as string) || "", + width: componentProps.get(WIDTH_PROP) as string, + height: componentProps.get(HEIGHT_PROP) as string + }); + }); }, []); + return ; } diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/index-dev.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/index-dev.tsx new file mode 100644 index 0000000000..13210f0a65 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/index-dev.tsx @@ -0,0 +1,27 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import { LogoComponent } from "./LogoComponent"; +import { ComponentDev } from "@dashbuilder-js/component-dev"; +import { ComponentApi } from "@dashbuilder-js/component-api"; + +const api = new ComponentApi(); + +ReactDOM.render(, document.getElementById("app")!); + +new ComponentDev().start(); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/index.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/index.tsx index bc803c41b9..859d10cde6 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/index.tsx +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/src/index.tsx @@ -14,9 +14,11 @@ * limitations under the License. */ - import * as React from "react"; import * as ReactDOM from "react-dom"; -import { App } from "./App"; +import { LogoComponent } from "./LogoComponent"; +import { ComponentApi } from "@dashbuilder-js/component-api"; -ReactDOM.render(, document.getElementById("app")!); \ No newline at end of file +const api = new ComponentApi(); + +ReactDOM.render(, document.getElementById("app")!); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/index.html b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/index.html index a59edb3d93..3d3d5b84d0 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/index.html +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/index.html @@ -21,7 +21,7 @@ - +
diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/manifest.dev.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/manifest.dev.json new file mode 100644 index 0000000000..f920d23fdc --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/manifest.dev.json @@ -0,0 +1,53 @@ +{ + "init": [ + { + "key": "src", + "value": "https://www.redhat.com/cms/managed-files/Logo-redhat-color-375.png" + }, + { + "key": "width", + "value": "500px" + } + ], + "functions": [ + { + "name": "ping", + "response": "pong" + } + ], + "dataSet": { + "columns": [ + { + "name": "Country", + "type": "LABEL", + "settings": { + "columnId": "Country", + "columnName": "Country", + "valueExpression": "value", + "emptyTemplate": "---", + "valuePattern": null + } + }, + { + "name": "GDP 2014", + "type": "NUMBER", + "settings": { + "columnId": "GDP 2014", + "columnName": "GDP 2014", + "valueExpression": "value", + "emptyTemplate": "---", + "valuePattern": "#,##0.00" + } + } + ], + "data": [ + ["United States", "16768100"], + ["China", "9240270"], + ["Japan", "4919563"], + ["Germany", "3730261"], + ["United Kingdom", "2678455"], + ["France", "2806428"], + ["Brazil", "2245673"] + ] + } +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/manifest.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/manifest.json index 76dac18a21..6c46b1a16d 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/manifest.json +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/static/manifest.json @@ -1,7 +1,8 @@ { "name": "Logo", "noData": true, - + "category": "Core", + "icon": "pficon pficon-messages", "parameters": [ { "name": "src", diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/webpack.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/webpack.config.js index a96e9240ea..cd2984dd92 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/webpack.config.js +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/logo-component/webpack.config.js @@ -20,18 +20,23 @@ const { merge } = require("webpack-merge"); const common = require("../../webpack.common.config"); module.exports = async (env, argv) => { + let entryPoint = "./src/index.tsx"; + const copyResources = [ + { from: "./static/images", to: "./images" }, + { from: "./static/index.html", to: "./index.html" }, + { from: "./static/manifest.json", to: "./manifest.json" } + ]; + + if (process.env.WEBPACK_DEV_SERVER) { + entryPoint = "./src/index-dev.tsx"; + copyResources.push({ from: "./static/manifest.dev.json", to: "./manifest.dev.json" }); + } + return merge(common, { entry: { - index: "./src/index.tsx" + index: entryPoint }, - plugins: [ - new CopyPlugin([ - { from: "./static/resources", to: "./resources" }, - { from: "./static/images", to: "./images" }, - { from: "./static/index.html", to: "./index.html" }, - { from: "./static/manifest.json", to: "./manifest.json" }, - ]) - ], + plugins: [new CopyPlugin(copyResources)], devServer: { historyApiFallback: false, disableHostCheck: true, diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/jest.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/jest.config.js new file mode 100644 index 0000000000..6f02e4bde6 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/jest.config.js @@ -0,0 +1,29 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +module.exports = { + reporters: ["default"], + moduleDirectories: ["node_modules", "src"], + moduleFileExtensions: ["js", "jsx", "ts", "tsx"], + testRegex: "/__tests__/.*\\.test\\.(jsx?|tsx?)$", + transform: { + "^.+\\.jsx?$": "babel-jest", + "^.+\\.tsx?$": "ts-jest" + }, + moduleNameMapper: { + "\\.(css|less|sass|scss)$": "/__mocks__/styleMock.js" + } +}; diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/package.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/package.json new file mode 100644 index 0000000000..2b4081cdc6 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/package.json @@ -0,0 +1,36 @@ +{ + "name": "@dashbuilder-js/process-heatmap-component", + "version": "0.1.0", + "description": "", + "license": "Apache-2.0", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "lint": "tslint -c ../../tslint.json 'src/**/*.{ts,tsx,js,jsx}'", + "test": "jest --silent --verbose --passWithNoTests", + "test:clearCache": "jest --clearCache", + "build:fast": "rm -rf dist && webpack", + "build": "yarn run lint && yarn test && yarn run build:fast", + "build:prod": "yarn run build --mode production --devtool none", + "start": "webpack-dev-server -d --host 0.0.0.0" + }, + "dependencies": { + "@dashbuilder-js/component-api": "0.2.0", + "@dashbuilder-js/heatmap-base": "0.1.0" + }, + "devDependencies": { + "@dashbuilder-js/component-dev": "0.2.0" + }, + "babel": { + "presets": [ + "@babel/env", + "@babel/react" + ] + }, + "jest-junit": { + "outputDirectory": "./target" + } +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/src/ProcessHeatmapComponent.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/src/ProcessHeatmapComponent.tsx new file mode 100644 index 0000000000..cd177d7b4d --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/src/ProcessHeatmapComponent.tsx @@ -0,0 +1,176 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import { useEffect, useState, useCallback } from "react"; +import { ColumnType, DataSet, FunctionCallRequest } from "@dashbuilder-js/component-api"; +import { ComponentController } from "@dashbuilder-js/component-api/dist/controller/ComponentController"; +import { SvgNodeValue, SvgHeatmap } from "@dashbuilder-js/heatmap-base"; + +const NOT_ENOUGH_COLUMNS_MSG = "Process Heatmap expects 2 columns: Node Id(LABEL or TEXT),Value (NUMBER)."; +const FIRST_COLUMN_INVALID_MSG = "Wrong type for first column, it should be either LABEL or TEXT."; +const SECOND_COLUMN_INVALID_MSG = "Wrong type for second column, it should be NUMBER."; + +enum Params { + SERVER_TEMPLATE = "serverTemplate", + CONTAINER_ID = "containerId", + PROCESS_ID = "processId" +} + +enum AppStateType { + ERROR = "Error", + INIT = "Initializing", + LOADING_SVG = "Loading SVG", + LOADED_SVG = "Loaded SVG", + FINISHED = "Finished loading" +} + +interface AppState { + state: AppStateType; + processesNodesValues: SvgNodeValue[]; + svgRequest?: FunctionCallRequest; + processSVG?: string; + configurationIssue: string; + message?: string; +} + +const isEmpty = (param?: string) => param === undefined || param.trim() === ""; + +const validateParams = (params: Map): string | undefined => { + if (isEmpty(params.get(Params.SERVER_TEMPLATE))) { + return "Server template is required."; + } + if (isEmpty(params.get(Params.CONTAINER_ID))) { + return "Container ID is required."; + } + if (isEmpty(params.get(Params.PROCESS_ID))) { + return "Process ID is required."; + } +}; + +const validateDataSet = (ds: DataSet): string | undefined => { + if (ds.columns.length < 2) { + return NOT_ENOUGH_COLUMNS_MSG; + } + if (ds.columns[0].type !== ColumnType.LABEL && ds.columns[0].type !== ColumnType.TEXT) { + return FIRST_COLUMN_INVALID_MSG; + } + if (ds.columns[1].type !== ColumnType.NUMBER) { + return SECOND_COLUMN_INVALID_MSG; + } +}; + +interface Props { + controller: ComponentController; +} + +export function ProcessHeatmapComponent(props: Props) { + const [appState, setAppState] = useState({ + state: AppStateType.INIT, + processesNodesValues: [], + configurationIssue: "" + }); + + const onInit = useCallback( + (params: Map) => { + const validationMessage = validateParams(params); + if (validationMessage) { + setAppState(previousAppState => ({ + ...previousAppState, + state: AppStateType.ERROR, + message: validationMessage, + configurationIssue: validationMessage + })); + } else { + setAppState(previousAppState => ({ + ...previousAppState, + state: AppStateType.LOADING_SVG, + svgRequest: { + functionName: "ProcessSVGFunction", + parameters: params + }, + configurationIssue: "" + })); + } + }, + [appState] + ); + + const onDataset = useCallback((ds: DataSet, params: Map) => { + const validationMessage = validateParams(params) || validateDataSet(ds); + if (validationMessage) { + setAppState(previousAppState => ({ + ...previousAppState, + state: AppStateType.ERROR, + message: validationMessage, + configurationIssue: validationMessage + })); + } else { + setAppState(previousAppState => ({ + ...previousAppState, + processesNodesValues: ds.data.map(d => ({ nodeId: d[0], value: +d[1] })), + state: AppStateType.FINISHED, + configurationIssue: "" + })); + } + }, []); + + useEffect(() => { + props.controller.setOnInit(onInit); + props.controller.setOnDataSet(onDataset); + }, [appState]); + + useEffect(() => { + if (appState.configurationIssue) { + props.controller.requireConfigurationFix(appState.configurationIssue); + } else { + props.controller.configurationOk(); + } + }, [appState.configurationIssue]); + + useEffect(() => { + if (appState.svgRequest) { + props.controller + .callFunction(appState.svgRequest!) + .then((result: any) => + setAppState(previousAppState => ({ ...previousAppState, state: AppStateType.LOADED_SVG, processSVG: result })) + ) + .catch((errorMsg: string) => + setAppState(previousAppState => ({ + ...previousAppState, + state: AppStateType.ERROR, + message: `There was an error retrieving process SVG: ${errorMsg}` + })) + ); + } + }, [appState.svgRequest]); + + return ( +
+ {(() => { + switch (appState.state) { + case AppStateType.ERROR: + return {appState.message}; + case AppStateType.LOADED_SVG: + case AppStateType.FINISHED: + return ; + default: + return Status: {appState.state}; + } + })()} +
+ ); +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/src/index-dev.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/src/index-dev.tsx new file mode 100644 index 0000000000..d3d7533c83 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/src/index-dev.tsx @@ -0,0 +1,27 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import { ProcessHeatmapComponent } from "./ProcessHeatmapComponent"; +import { ComponentApi } from "@dashbuilder-js/component-api"; +import { ComponentDev } from "@dashbuilder-js/component-dev"; + +const api = new ComponentApi(); + +ReactDOM.render(, document.getElementById("app")!); + +new ComponentDev().start(); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/src/index.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/src/index.tsx new file mode 100644 index 0000000000..1c36e9f68d --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/src/index.tsx @@ -0,0 +1,25 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import { ProcessHeatmapComponent } from "./ProcessHeatmapComponent"; + +import { ComponentApi } from "@dashbuilder-js/component-api"; + +const api = new ComponentApi(); + +ReactDOM.render(, document.getElementById("app")!); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/static/index.html b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/static/index.html new file mode 100644 index 0000000000..4b731e611b --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/static/index.html @@ -0,0 +1,28 @@ + + + + + Process Heatmap Component + + + + + +
+ + + diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/static/manifest.dev.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/static/manifest.dev.json new file mode 100644 index 0000000000..69bbb3f011 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/static/manifest.dev.json @@ -0,0 +1,55 @@ +{ + "init": [ + { + "key": "serverTemplate", + "value": "sample template" + }, + { + "key": "containerId", + "value": "sample container id" + }, + { + "key": "processId", + "value": "process id" + } + ], + "dataSet": { + "columns": [ + { + "name": "nodeId", + "type": "TEXT" + }, + { + "name": "value", + "type": "NUMBER" + } + ], + "data": [ + ["_8DF7D18B-1357-470B-BFDF-E8F168CD2D51", "1"], + ["_31FBFFDF-B095-483C-BBCE-2AA83609521E", "1"], + ["_7E897E88-A5A1-49F4-ABC4-D67A42B1177F", "1"] + ] + }, + "functions": [ + { + "name": "ProcessSVGFunction", + "params": [ + { + "key": "serverTemplate", + "value": "sample template" + }, + { + "key": "containerId", + "value": "sample container id" + }, + { + "key": "processId", + "value": "process id" + } + + ], + + "response": "Sample Task" + } + ] +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/static/manifest.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/static/manifest.json new file mode 100644 index 0000000000..118c170c65 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/static/manifest.json @@ -0,0 +1,28 @@ +{ + "name": "Process Heatmap", + "category": "Heatmaps", + "icon": "pficon pficon-blueprint", + "parameters": [ + { + "name": "serverTemplate", + "label": "Server Template", + "type": "text", + "defaultValue": "", + "mandatory": true + }, + { + "name": "containerId", + "label": "Container ID", + "type": "text", + "defaultValue": "", + "mandatory": true + }, + { + "name": "processId", + "label": "Process Definition ID", + "type": "text", + "defaultValue": "", + "mandatory": true + } + ] +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/tsconfig.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/tsconfig.json new file mode 100644 index 0000000000..3012080925 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "declaration": false + }, + "include": ["src"] +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/webpack.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/webpack.config.js new file mode 100644 index 0000000000..f95c98f59d --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/process-heatmap-component/webpack.config.js @@ -0,0 +1,48 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +const path = require("path"); +const CopyPlugin = require("copy-webpack-plugin"); +const { merge } = require("webpack-merge"); +const common = require("../../webpack.common.config"); + +module.exports = async (env, argv) => { + let entryPoint = "./src/index.tsx"; + const copyResources = [ + { from: "./static/index.html", to: "./index.html" }, + { from: "./static/manifest.json", to: "./manifest.json" } + ]; + + if (process.env.WEBPACK_DEV_SERVER) { + entryPoint = "./src/index-dev.tsx"; + copyResources.push({ from: "./static/manifest.dev.json", to: "./manifest.dev.json" }); + } + + return merge(common, { + entry: { + index: entryPoint + }, + plugins: [new CopyPlugin(copyResources)], + devServer: { + historyApiFallback: false, + disableHostCheck: true, + watchContentBase: true, + contentBase: [path.join(__dirname, "./dist"), path.join(__dirname, "./static")], + compress: true, + port: 9001 + } + }); +}; diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/jest.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/jest.config.js new file mode 100644 index 0000000000..6f02e4bde6 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/jest.config.js @@ -0,0 +1,29 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +module.exports = { + reporters: ["default"], + moduleDirectories: ["node_modules", "src"], + moduleFileExtensions: ["js", "jsx", "ts", "tsx"], + testRegex: "/__tests__/.*\\.test\\.(jsx?|tsx?)$", + transform: { + "^.+\\.jsx?$": "babel-jest", + "^.+\\.tsx?$": "ts-jest" + }, + moduleNameMapper: { + "\\.(css|less|sass|scss)$": "/__mocks__/styleMock.js" + } +}; diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/package.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/package.json new file mode 100644 index 0000000000..70c0ba1795 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/package.json @@ -0,0 +1,36 @@ +{ + "name": "@dashbuilder-js/processes-heatmaps-component", + "version": "0.1.0", + "description": "", + "license": "Apache-2.0", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "lint": "tslint -c ../../tslint.json 'src/**/*.{ts,tsx,js,jsx}'", + "test": "jest --silent --verbose --passWithNoTests", + "test:clearCache": "jest --clearCache", + "build:fast": "rm -rf dist && webpack", + "build": "yarn run lint && yarn test && yarn run build:fast", + "build:prod": "yarn run build --mode production --devtool none", + "start": "webpack-dev-server -d --host 0.0.0.0" + }, + "dependencies": { + "@dashbuilder-js/component-api": "0.2.0", + "@dashbuilder-js/heatmap-base": "0.1.0" + }, + "devDependencies": { + "@dashbuilder-js/component-dev": "0.2.0" + }, + "babel": { + "presets": [ + "@babel/env", + "@babel/react" + ] + }, + "jest-junit": { + "outputDirectory": "./target" + } +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/ProcessSelector.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/ProcessSelector.tsx new file mode 100644 index 0000000000..30a073d851 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/ProcessSelector.tsx @@ -0,0 +1,126 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import { useEffect, useCallback, useState, createRef } from "react"; + +export interface KieServerContainer { + id: string; + processes: string[]; +} + +interface SelectedValue { + container: KieServerContainer; + process: string; +} + +export interface ProcessSelectorProps { + containers: KieServerContainer[]; + onContainerProcessSelected: (container: string, process: string) => void; + selectedContainer?: string; + selectedProcess?: string; +} + +export function ProcessSelector(props: ProcessSelectorProps) { + const containerSelectRef = createRef(); + const titleRef = createRef(); + const bodyRef = createRef(); + const processSelectRef = createRef(); + const [selectedValue, setSelectedValue] = useState(); + + const onTitleClicked = useCallback((e: any) => { + titleRef.current?.classList.toggle("active"); + const bodyRefEl = bodyRef.current; + if (bodyRefEl) { + const bodyHidden = bodyRefEl.style.display === "none"; + bodyRefEl.style.display = bodyHidden ? "block" : "none"; + } + }, [titleRef, bodyRef]); + + const onContainerSelected = useCallback( + (e: any) => { + const containerName = containerSelectRef.current?.value; + const selectedContainer = props.containers.filter(c => c.id === containerName)[0]; + props.onContainerProcessSelected(selectedContainer.id, selectedContainer.processes[0]); + setSelectedValue({ container: selectedContainer, process: selectedContainer.processes[0] }); + }, + [selectedValue, containerSelectRef.current] + ); + const onProcessSelected = useCallback( + (e: any) => props.onContainerProcessSelected(selectedValue?.container.id!, processSelectRef.current?.value!), + [selectedValue, processSelectRef.current] + ); + useEffect(() => { + const containers = props.containers; + if (containers?.length > 0) { + const selectedContainer = props.selectedContainer + ? containers.filter(c => c.id === props.selectedContainer)[0] + : containers[0]; + setSelectedValue({ + container: selectedContainer, + process: props.selectedProcess + ? selectedContainer.processes.filter(p => p === props.selectedProcess)[0] + : selectedContainer.processes[0] + }); + } + }, [props.containers]); + + return ( +
+
+
+ Process Selector +
+
+ {props.containers && props.containers.length > 0 && ( +
+ Container + +
+ )} + + {selectedValue?.container?.processes?.length! > 0 && ( +
+ Process + +
+ )} +
+
+
+ ); +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/ProcessesHeatmapsComponent.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/ProcessesHeatmapsComponent.tsx new file mode 100644 index 0000000000..614a0caaa2 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/ProcessesHeatmapsComponent.tsx @@ -0,0 +1,242 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import { useEffect, useState, useCallback } from "react"; + +import { ColumnType, DataSet } from "@dashbuilder-js/component-api"; +import { ComponentController } from "@dashbuilder-js/component-api/dist/controller/ComponentController"; +import { SvgNodeValue, SvgHeatmap } from "@dashbuilder-js/heatmap-base"; +import { ProcessSelector } from "./ProcessSelector"; + +const NOT_ENOUGH_COLUMNS_MSG = + "All Processes Heatmaps expects 4 columns: Container Id (or External Id), Process Id, Node Id ,Value (NUMBER)."; +const INVALID_TEXT_COLUMN = "Wrong type for column {0}, it should be either LABEL or TEXT."; +const VALUE_COLUMN_INVALID_MSG = "Wrong type for node value column, it should be NUMBER."; +const NO_DATA_MESSAGE = "Dataset is empty. Please provide data with container id, process id, node id and value."; +enum Params { + SERVER_TEMPLATE = "serverTemplate", + SHOW_STATUS = "showStatus", + SHOW_PROCESS_SELECTOR = "showProcessSelector" +} +enum AppStateType { + ERROR = "Error", + INIT = "Initializing", + WAITING_DATA = "Waiting Data", + LOADING_SVG = "Loading SVG", + LOADED_SVG = "Loaded SVG", + FINISHED = "Finished loading" +} + +interface NodeData { + nodeid: string; + value: number; +} + +interface ProcessData { + processId: string; + nodeValues: NodeData[]; +} + +interface ContainerData { + containerId: string; + processData: ProcessData[]; +} + +interface AppState { + state: AppStateType; + nodesValues: SvgNodeValue[]; + serverTemplate?: string; + processSvg?: string; + containerData: ContainerData[]; + message?: string; + selectedContainer?: string; + selectedProcess?: string; + showStatus?: boolean; +} + +const isEmpty = (param?: string) => param === undefined || param.trim() === ""; + +const validateParams = (params: Map): string | undefined => { + if (isEmpty(params.get(Params.SERVER_TEMPLATE))) { + return "Server template is required. (Component Properties)"; + } +}; + +const validateDataSet = (ds: DataSet): string | undefined => { + if (ds.columns.length < 4) { + return NOT_ENOUGH_COLUMNS_MSG; + } + + for (let i = 0; i < ds.columns.length; i++) { + const column = ds.columns[i]; + const columnType = column.type; + if (i < 3 && columnType !== ColumnType.LABEL && columnType !== ColumnType.TEXT) { + return INVALID_TEXT_COLUMN.replace("{0}", column.name); + } + if (i === 3 && columnType !== ColumnType.NUMBER) { + return VALUE_COLUMN_INVALID_MSG; + } + } +}; + +interface Props { + controller: ComponentController; +} + +export function ProcessesHeatmapsComponent(props: Props) { + const [appState, setAppState] = useState({ + state: AppStateType.INIT, + nodesValues: [], + containerData: [], + showStatus: false + }); + + const onDataset = useCallback( + (ds: DataSet, params: Map) => { + const validation = validateParams(params) || validateDataSet(ds); + if (validation) { + setAppState(previousState => ({ + ...previousState, + state: AppStateType.ERROR, + message: validation + })); + props.controller.requireConfigurationFix(validation); + return; + } + if (ds.data.length === 0) { + setAppState(previousState => ({ + ...previousState, + state: AppStateType.ERROR, + message: NO_DATA_MESSAGE + })); + props.controller.requireConfigurationFix(NO_DATA_MESSAGE); + return; + } + + props.controller.configurationOk(); + + const allContainerData: ContainerData[] = []; + ds.data.map(d => { + const cid = d[0]; + const pid = d[1]; + const nid = d[2]; + const nodeValue = +d[3]; + + let containerData = allContainerData.filter(c => c.containerId === cid)[0]; + if (!containerData) { + containerData = { containerId: cid, processData: [] }; + allContainerData.push(containerData); + } + const processData = containerData.processData.filter(p => p.processId === pid)[0]; + if (processData) { + processData.nodeValues.push({ nodeid: nid, value: nodeValue }); + } else { + containerData.processData.push({ processId: pid, nodeValues: [{ nodeid: nid, value: nodeValue }] }); + } + }); + + setAppState(previousState => ({ + ...previousState, + nodesValues: ds.data.map((d: string[]) => { + return { nodeId: d[2], value: +d[3] }; + }), + state: AppStateType.LOADING_SVG, + containerData: allContainerData, + serverTemplate: params.get(Params.SERVER_TEMPLATE), + showStatus: params.get(Params.SHOW_STATUS) === "true", + selectedContainer: appState.selectedContainer || allContainerData[0].containerId, + selectedProcess: appState.selectedProcess || allContainerData[0].processData[0].processId + })); + }, + [appState] + ); + + const onProcessSelected = useCallback( + (containerId: string, processId: string) => { + if ( + !appState.serverTemplate || + (containerId === appState.selectedContainer && processId === appState.selectedProcess) + ) { + return; + } + setAppState(previousState => ({ + ...previousState, + state: AppStateType.LOADING_SVG, + selectedContainer: containerId, + selectedProcess: processId + })); + }, + [appState.serverTemplate, appState.selectedContainer, appState.selectedProcess] + ); + + useEffect(() => props.controller.setOnDataSet(onDataset), [appState]); + + useEffect(() => { + if (appState.serverTemplate && appState.selectedContainer && appState.selectedProcess) { + const params = new Map(); + params.set(Params.SERVER_TEMPLATE, appState.serverTemplate!); + params.set("containerId", appState.selectedContainer!); + params.set("processId", appState.selectedProcess!); + props.controller + .callFunction({ + functionName: "ProcessSVGFunction", + parameters: params + }) + .then((result: any) => + setAppState(previousState => ({ ...previousState, state: AppStateType.LOADED_SVG, processSvg: result })) + ) + .catch((errorMsg: string) => + setAppState(previousState => ({ + ...previousState, + state: AppStateType.ERROR, + processSvg: undefined, + message: `Error loading SVG for process "${appState.selectedProcess}" from container "${appState.selectedContainer}". + Please make sure the process SVG exists. Error: ${errorMsg}` + })) + ); + } + }, [appState.serverTemplate, appState.selectedContainer, appState.selectedProcess]); + + return ( +
+ {appState.state !== AppStateType.ERROR && appState.processSvg && ( + + )} + {appState.containerData.length > 0 && ( + { + return { + id: c.containerId, + processes: c.processData.map(p => p.processId) + }; + })} + onContainerProcessSelected={onProcessSelected} + selectedContainer={appState.selectedContainer} + selectedProcess={appState.selectedProcess} + /> + )} + {appState.state === AppStateType.ERROR &&

{appState.message}

} + {appState.showStatus && ( +
+ + {appState.state} {appState.message ? `: ${appState.message}` : ""} + +
+ )} +
+ ); +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/index-dev.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/index-dev.tsx new file mode 100644 index 0000000000..e26927e64d --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/index-dev.tsx @@ -0,0 +1,30 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import { ProcessesHeatmapsComponent } from "./ProcessesHeatmapsComponent"; +import { ComponentApi } from "@dashbuilder-js/component-api"; +import { ComponentDev } from "@dashbuilder-js/component-dev"; + +const api = new ComponentApi(); + +ReactDOM.render( + , + document.getElementById("app")! +); + +new ComponentDev().start(); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/index.tsx b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/index.tsx new file mode 100644 index 0000000000..bf3c734349 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/src/index.tsx @@ -0,0 +1,27 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import { ProcessesHeatmapsComponent } from "./ProcessesHeatmapsComponent"; +import { ComponentApi } from "@dashbuilder-js/component-api"; + +const api = new ComponentApi(); + +ReactDOM.render( + , + document.getElementById("app")! +); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/index.html b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/index.html new file mode 100644 index 0000000000..4e033b9fe6 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/index.html @@ -0,0 +1,29 @@ + + + + + Process Heatmap Component + + + + + + +
+ + + diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/manifest.dev.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/manifest.dev.json new file mode 100644 index 0000000000..496f5d5425 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/manifest.dev.json @@ -0,0 +1,104 @@ +{ + "init": [ + { + "key": "serverTemplate", + "value": "server" + }, + { + "key": "showStatus", + "value": "true" + } + ], + "dataSet": { + "columns": [ + { + "name": "containerId", + "type": "TEXT" + }, + { + "name": "processId", + "type": "TEXT" + }, + { + "name": "nodeId", + "type": "TEXT" + }, + { + "name": "value", + "type": "NUMBER" + } + ], + "data": [ + ["container1", "process1", "_8DF7D18B-1357-470B-BFDF-E8F168CD2D51", "1"], + ["container1", "process1", "_31FBFFDF-B095-483C-BBCE-2AA83609521E", "1"], + ["container1", "process1", "_7E897E88-A5A1-49F4-ABC4-D67A42B1177F", "1"], + + ["container1", "process2", "_E39122D0-55A7-464D-A209-EF468A3D9939", "10"], + ["container1", "process2", "_F71FB1D8-8363-4628-AF74-887C949FCD81", "12"], + ["container1", "process2", "_14A95F6E-2421-4623-BD7F-C8BF879F9ECE", "1"], + + ["container2", "process1process1process1process1process1process1process1", "_8FCF18E2-0158-42A4-B15B-DE7E0DB3B5D7", "100"], + ["container2", "process1process1process1process1process1process1process1", "_DDEA4967-7EAB-4224-A5A0-EC3CE37F194C", "101"], + ["container2", "process1process1process1process1process1process1process1", "_51C46971-52B0-4C16-8CE1-CD28956EA343", "102"] + ] + }, + "functions": [ + { + "name": "ProcessSVGFunction", + "params": [ + { + "key": "serverTemplate", + "value": "server" + }, + { + "key": "containerId", + "value": "container1" + }, + { + "key": "processId", + "value": "process1" + } + ], + + "response": "Sample Task" + }, + { + "name": "ProcessSVGFunction", + "params": [ + { + "key": "serverTemplate", + "value": "server" + }, + { + "key": "containerId", + "value": "container1" + }, + { + "key": "processId", + "value": "process2" + } + ], + + "response": "T1T2T3" + }, + { + "name": "ProcessSVGFunction", + "params": [ + { + "key": "serverTemplate", + "value": "server" + }, + { + "key": "containerId", + "value": "container2" + }, + { + "key": "processId_", + "value": "process1process1process1process1process1process1process1" + } + ], + + "response": "" + } + ] +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/manifest.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/manifest.json new file mode 100644 index 0000000000..87a156226d --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/manifest.json @@ -0,0 +1,22 @@ +{ + "name": "All Processes Heatmaps", + "category": "Heatmaps", + "icon": "pficon pficon-blueprint", + "parameters": [ + { + "name": "serverTemplate", + "label": "Server Template", + "type": "text", + "category": "Server Template", + "defaultValue": "", + "mandatory": true + }, + { + "name": "showStatus", + "label": "Status", + "type": "boolean", + "category": "Display", + "defaultValue": "true" + } + ] +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/style.css b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/style.css new file mode 100644 index 0000000000..79854e76e2 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/static/style.css @@ -0,0 +1,136 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ +.allProcessHeatmapsComponent { + width: 100%; + height: 100%; +} +.statusContainer { + position: absolute; + width: 100%; + height: 20px; + border: 1px; + bottom: 0px; + background-color: rgba(240, 240, 240, 0.7); +} +.statusLabel { + color: gray; +} +.processSelectorContainer { + position: absolute; + top: 0; + left: 0; + margin: 10px; + opacity: 0.6; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); + transition: 0.3s; + max-width: 130px; + min-width: 130px; +} + +.processSelectorContainer:hover { + opacity: 1; + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); +} + +.errorMessage { + color: #9F6000; + background-color: #FEEFB3; +} + +.cardTitle { + margin: 2px; + margin-bottom: 4px; +} + +.cardBody { + display: flex; + flex-direction: column; +} + +.processSelectorContainer select { + max-width: 100px; + min-width: 100px; + background-color: #f1f1f1; + color: #4d5258; + border-color: #bbb; + font-size: 12px; + overflow: hidden; +} + +.processSelectorContainer select:hover { + border-color: #7dc3e8; +} + +.processSelectorContainer select:focus { + border-color: #0088ce; + outline: 0 !important; + box-shadow: inset 0 1px 1px rgba(3, 3, 3, 0.075), 0 0 8px rgba(0, 136, 206, 0.6); +} + +.processSelectorContainer select.select-items { + position: absolute; + background-color: DodgerBlue; + top: 100%; + left: 0; + right: 0; + z-index: 99; +} +.processSelectorContainer fieldset { + border-color: #dddddd; + border-radius: 10px; + border-width: 1px; + border-style: dotted; +} +.processSelectorContainer fieldset legend { + font-size: 12px; + font-weight: bold; +} + +.collapsible { + background-color: #eee; + color: #444; + cursor: pointer; + width: 100%; + border: none; + text-align: left; + outline: none; + font-size: 15px; +} + +/* Add a background color to the button if it is clicked on (add the .active class with JS), and when you move the mouse over it (hover) */ +.active, .collapsible:hover { + background-color: #ccc; +} + +/* Style the collapsible content. Note: hidden by default */ +.content { + padding: 0 18px; + display: none; + overflow: hidden; + background-color: #f1f1f1; +} + +.collapsible:after { + content: '\02795'; /* Unicode character for "plus" sign (+) */ + font-size: 8px; + color: white; + float: right; + margin: 5px; +} + +.active:after { + content: "\2796"; /* Unicode character for "minus" sign (-) */ +} diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/tsconfig.json b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/tsconfig.json new file mode 100644 index 0000000000..3012080925 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "declaration": false + }, + "include": ["src"] +} \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/webpack.config.js b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/webpack.config.js new file mode 100644 index 0000000000..e90060b076 --- /dev/null +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/packages/processes-heatmaps-component/webpack.config.js @@ -0,0 +1,49 @@ +/* + * Copyright 2020 Red Hat, Inc. and/or its affiliates. + * + * 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. + */ + +const path = require("path"); +const CopyPlugin = require("copy-webpack-plugin"); +const { merge } = require("webpack-merge"); +const common = require("../../webpack.common.config"); + +module.exports = async (env, argv) => { + let entryPoint = "./src/index.tsx"; + const copyResources = [ + { from: "./static/index.html", to: "./index.html" }, + { from: "./static/manifest.json", to: "./manifest.json" }, + { from: "./static/style.css", to: "./style.css" } + ]; + + if (process.env.WEBPACK_DEV_SERVER) { + entryPoint = "./src/index-dev.tsx"; + copyResources.push({ from: "./static/manifest.dev.json", to: "./manifest.dev.json" }); + } + + return merge(common, { + entry: { + index: entryPoint + }, + plugins: [new CopyPlugin(copyResources)], + devServer: { + historyApiFallback: false, + disableHostCheck: true, + watchContentBase: true, + contentBase: [path.join(__dirname, "./dist"), path.join(__dirname, "./static")], + compress: true, + port: 9001 + } + }); +}; diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/pom.xml b/dashbuilder/dashbuilder-shared/dashbuilder-js/pom.xml index ff2254611a..6adc27c59e 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/pom.xml +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/pom.xml @@ -41,7 +41,7 @@ - logo-provided + logo-provided,process-heatmap-provided,processes-heatmaps-provided web/dashbuilder/components @@ -131,7 +131,7 @@ maven-resources-plugin - copy-resources + copy-logo-component prepare-package copy-resources @@ -148,8 +148,46 @@ + + copy-process-heatmap-component + prepare-package + + copy-resources + + + + + ${project.build.outputDirectory}/${dashbuilder.internal.components.root}/process-heatmap-provided + + + + packages/process-heatmap-component/dist/ + false + + + + + + copy-processes-heatmaps-component + prepare-package + + copy-resources + + + + + ${project.build.outputDirectory}/${dashbuilder.internal.components.root}/processes-heatmaps-provided + + + + packages/processes-heatmaps-component/dist/ + false + + + + - + \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/src/main/java/org/dashbuilder/components/internal/ProvidedComponentInfo.java b/dashbuilder/dashbuilder-shared/dashbuilder-js/src/main/java/org/dashbuilder/components/internal/ProvidedComponentInfo.java index 9376e8f7d0..391a0806a4 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/src/main/java/org/dashbuilder/components/internal/ProvidedComponentInfo.java +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/src/main/java/org/dashbuilder/components/internal/ProvidedComponentInfo.java @@ -85,7 +85,7 @@ private void loadInternalComponentsList(Properties properties) { logger.warning("Internal components list is empty"); } else { this.internalComponentsList = Arrays.stream(componentsListStr.split("\\,")).collect(Collectors.toList()); - logger.log(Level.WARNING, () -> "Registered internal dashbuilder components: " + internalComponentsList); + logger.log(Level.INFO, () -> "Registered internal dashbuilder components: " + internalComponentsList); } } diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-js/yarn.lock b/dashbuilder/dashbuilder-shared/dashbuilder-js/yarn.lock index 670163b7ac..4bfc20b276 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-js/yarn.lock +++ b/dashbuilder/dashbuilder-shared/dashbuilder-js/yarn.lock @@ -2,32 +2,17 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.5.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== dependencies: "@babel/highlight" "^7.10.4" -"@babel/core@7.7.2": - version "7.7.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.2.tgz#ea5b99693bcfc058116f42fa1dd54da412b29d91" - integrity sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.2" - "@babel/helpers" "^7.7.0" - "@babel/parser" "^7.7.2" - "@babel/template" "^7.7.0" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.7.2" - convert-source-map "^1.7.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" +"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== "@babel/core@^7.1.0", "@babel/core@^7.7.5": version "7.12.3" @@ -51,7 +36,29 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.12.1", "@babel/generator@^7.12.5", "@babel/generator@^7.7.2": +"@babel/core@^7.7.2": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== @@ -75,7 +82,7 @@ "@babel/helper-explode-assignable-expression" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-builder-react-jsx-experimental@^7.12.1": +"@babel/helper-builder-react-jsx-experimental@^7.12.4": version "7.12.4" resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48" integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og== @@ -92,6 +99,27 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/helper-create-regexp-features-plugin@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz#18b1302d4677f9dc4740fe8c9ed96680e29d37e8" @@ -147,7 +175,7 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.7.0": +"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== @@ -176,7 +204,7 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== @@ -233,6 +261,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-option@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + "@babel/helper-wrap-function@^7.10.4": version "7.12.3" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" @@ -243,7 +276,7 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helpers@^7.12.1", "@babel/helpers@^7.7.0": +"@babel/helpers@^7.12.1", "@babel/helpers@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== @@ -261,12 +294,17 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5", "@babel/parser@^7.7.2": +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0" integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ== -"@babel/plugin-proposal-async-generator-functions@^7.7.0": +"@babel/parser@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" + integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== @@ -275,7 +313,15 @@ "@babel/helper-remap-async-to-generator" "^7.12.1" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-dynamic-import@^7.7.0": +"@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== @@ -283,7 +329,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.2.0": +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== @@ -291,7 +345,31 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-object-rest-spread@^7.6.2": +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== @@ -300,7 +378,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== @@ -308,7 +386,24 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.7.0": +"@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== @@ -316,7 +411,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-async-generators@^7.2.0", "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -330,20 +425,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": +"@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -351,7 +453,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-json-strings@^7.2.0", "@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== @@ -365,63 +467,63 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.7.0": +"@babel/plugin-syntax-top-level-await@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.2.0": +"@babel/plugin-transform-arrow-functions@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.7.0": +"@babel/plugin-transform-async-to-generator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== @@ -430,21 +532,21 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.12.1" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": +"@babel/plugin-transform-block-scoped-functions@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.6.3": +"@babel/plugin-transform-block-scoping@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.7.0": +"@babel/plugin-transform-classes@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== @@ -458,21 +560,21 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": +"@babel/plugin-transform-computed-properties@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.6.0": +"@babel/plugin-transform-destructuring@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.7.0": +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== @@ -480,14 +582,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.5.0": +"@babel/plugin-transform-duplicate-keys@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": +"@babel/plugin-transform-exponentiation-operator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== @@ -495,14 +597,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.4.4": +"@babel/plugin-transform-for-of@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.7.0": +"@babel/plugin-transform-function-name@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== @@ -510,21 +612,21 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.2.0": +"@babel/plugin-transform-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.2.0": +"@babel/plugin-transform-member-expression-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.5.0": +"@babel/plugin-transform-modules-amd@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== @@ -533,7 +635,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.7.0": +"@babel/plugin-transform-modules-commonjs@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== @@ -543,7 +645,7 @@ "@babel/helper-simple-access" "^7.12.1" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.7.0": +"@babel/plugin-transform-modules-systemjs@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== @@ -554,7 +656,7 @@ "@babel/helper-validator-identifier" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.7.0": +"@babel/plugin-transform-modules-umd@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== @@ -562,21 +664,21 @@ "@babel/helper-module-transforms" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.7.0": +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.12.1" -"@babel/plugin-transform-new-target@^7.4.4": +"@babel/plugin-transform-new-target@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-super@^7.5.5": +"@babel/plugin-transform-object-super@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== @@ -584,73 +686,90 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.12.1" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.4.4": +"@babel/plugin-transform-parameters@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.2.0": +"@babel/plugin-transform-property-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-display-name@^7.0.0": +"@babel/plugin-transform-react-display-name@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx-self@^7.0.0": +"@babel/plugin-transform-react-jsx-development@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.7.tgz#4c2a647de79c7e2b16bfe4540677ba3121e82a08" + integrity sha512-Rs3ETtMtR3VLXFeYRChle5SsP/P9Jp/6dsewBQfokDSzKJThlsuFcnzLTDRALiUmTC48ej19YD9uN1mupEeEDg== + dependencies: + "@babel/helper-builder-react-jsx-experimental" "^7.12.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + +"@babel/plugin-transform-react-jsx-self@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28" integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx-source@^7.0.0": +"@babel/plugin-transform-react-jsx-source@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b" integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.7.0": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.5.tgz#39ede0e30159770561b6963be143e40af3bde00c" - integrity sha512-2xkcPqqrYiOQgSlM/iwto1paPijjsDbUynN13tI6bosDz/jOW3CRzYguIE8wKX32h+msbBM22Dv5fwrFkUOZjQ== +"@babel/plugin-transform-react-jsx@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz#8b14d45f6eccd41b7f924bcb65c021e9f0a06f7f" + integrity sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ== dependencies: "@babel/helper-builder-react-jsx" "^7.10.4" - "@babel/helper-builder-react-jsx-experimental" "^7.12.1" + "@babel/helper-builder-react-jsx-experimental" "^7.12.4" "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.12.1" -"@babel/plugin-transform-regenerator@^7.7.0": +"@babel/plugin-transform-react-pure-annotations@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" + integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.2.0": +"@babel/plugin-transform-reserved-words@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-shorthand-properties@^7.2.0": +"@babel/plugin-transform-shorthand-properties@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.6.2": +"@babel/plugin-transform-spread@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== @@ -658,29 +777,35 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz#5c24cf50de396d30e99afc8d1c700e8bce0f5caf" - integrity sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ== +"@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== dependencies: "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.4.4": +"@babel/plugin-transform-template-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.2.0": +"@babel/plugin-transform-typeof-symbol@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-regex@^7.7.0": +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== @@ -688,73 +813,101 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/preset-env@7.7.1": - version "7.7.1" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.1.tgz#04a2ff53552c5885cf1083e291c8dd5490f744bb" - integrity sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA== +"@babel/preset-env@^7.7.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55" + integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew== dependencies: - "@babel/helper-module-imports" "^7.7.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.0" - "@babel/plugin-proposal-dynamic-import" "^7.7.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-syntax-top-level-await" "^7.7.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.7.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.3" - "@babel/plugin-transform-classes" "^7.7.0" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.7.0" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.7.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.7.0" - "@babel/plugin-transform-modules-systemjs" "^7.7.0" - "@babel/plugin-transform-modules-umd" "^7.7.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.0" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.7.0" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.6.2" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.7.0" - "@babel/types" "^7.7.1" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.7" + core-js-compat "^3.7.0" semver "^5.5.0" -"@babel/preset-react@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.0.tgz#8ab0c4787d98cf1f5f22dabf115552bf9e4e406c" - integrity sha512-IXXgSUYBPHUGhUkH+89TR6faMcBtuMW0h5OHbMuVbL3/5wK2g6a2M2BBpkLa+Kw0sAHiZ9dNVgqJMDP/O4GRBA== +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.7.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.7.0": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.7.tgz#36d61d83223b07b6ac4ec55cf016abb0f70be83b" + integrity sha512-wKeTdnGUP5AEYCYQIMeXMMwU7j+2opxrG0WzuZfxuuW9nhKvvALBjl67653CWamZJVefuJGI219G591RSldrqQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.7" + "@babel/plugin-transform-react-jsx-development" "^7.12.7" + "@babel/plugin-transform-react-jsx-self" "^7.12.1" + "@babel/plugin-transform-react-jsx-source" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" "@babel/runtime-corejs3@^7.10.2": version "7.12.5" @@ -771,7 +924,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.3.3", "@babel/template@^7.7.0": +"@babel/template@^7.10.4", "@babel/template@^7.3.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== @@ -780,7 +933,16 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.2": +"@babel/template@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095" integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA== @@ -795,7 +957,22 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.7.1", "@babel/types@^7.7.2": +"@babel/traverse@^7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" + integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.12.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96" integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA== @@ -804,6 +981,15 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.12.7", "@babel/types@^7.4.4": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" + integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -817,6 +1003,11 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@dashbuilder-js/component-api@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@dashbuilder-js/component-api/-/component-api-0.1.0.tgz#782009d0d755d237f99858be63169f49923b37e4" + integrity sha512-n4NyovE3xXYqcTDfVDM7+B5EFuHhPttbQiyCYHyhNmjgY8Dvn3dpQHlaxd8/6YpTgxWBwHsZ7PZDx345tBXYZg== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1042,18 +1233,17 @@ lz-string "^1.4.4" pretty-format "^26.6.2" -"@testing-library/jest-dom@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.3.0.tgz#2ae813b8b0eb69e8808f75d3af8efa3f0dc4d7ec" - integrity sha512-Cdhpc3BHL888X55qBNyra9eM0UG63LCm/FqCWTa1Ou/0MpsUbQTM9vW1NU6/jBQFoSLgkFfDG5XVpm2V0dOm/A== +"@testing-library/jest-dom@^5.3.0": + version "5.11.6" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.6.tgz#782940e82e5cd17bc0a36f15156ba16f3570ac81" + integrity sha512-cVZyUNRWwUKI0++yepYpYX7uhrP398I+tGz4zOlLVlUYnZS+Svuxv4fwLeCIy7TnBYKXUaOlQr3vopxL8ZfEnA== dependencies: "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.0.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^4.2.2" chalk "^3.0.0" - css "^2.2.4" + css "^3.0.0" css.escape "^1.5.1" - jest-diff "^25.1.0" - jest-matcher-utils "^25.1.0" lodash "^4.17.15" redent "^3.0.0" @@ -1111,6 +1301,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/geojson@*": + version "7946.0.7" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad" + integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ== + "@types/glob@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" @@ -1126,6 +1321,13 @@ dependencies: "@types/node" "*" +"@types/heatmap.js@^2.0.36": + version "2.0.36" + resolved "https://registry.yarnpkg.com/@types/heatmap.js/-/heatmap.js-2.0.36.tgz#b3f4795b43acca6eec4436fa2b3c1b1a983fde9c" + integrity sha512-QfRp5X1qbWxgtOxnAORWZdtjwZSGeUY0dA5TSzap9pa5nJyMJ996oZcobwUZar5tBYcBSRGorAIqLcGpxEgtrg== + dependencies: + "@types/leaflet" "^0" + "@types/history@*": version "4.7.8" resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" @@ -1179,12 +1381,19 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== +"@types/leaflet@^0": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/leaflet/-/leaflet-0.7.34.tgz#7c0619e075399985aa76d7f3633a5c973aae8584" + integrity sha512-NOon/TgvB9QiJ6H5EfxfL4PsmNgAh/dvZQ9cSE7LkSGbidPutx7f/JdxdziCSIR5A7TxRiDqm2CrK2Kkc7rorQ== + dependencies: + "@types/geojson" "*" + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/mocha@5.2.7": +"@types/mocha@^5.2.7": version "5.2.7" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== @@ -1194,10 +1403,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.8.tgz#2127bd81949a95c8b7d3240f3254352d72563aec" integrity sha512-z/5Yd59dCKI5kbxauAJgw6dLPzW+TNOItNE00PkpzNwUIEwdj/Lsqwq94H5DdYBX7C13aRA0CY32BK76+neEUA== -"@types/node@12.12.5": - version "12.12.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.5.tgz#66103d2eddc543d44a04394abb7be52506d7f290" - integrity sha512-KEjODidV4XYUlJBF3XdjSH5FWoMCtO0utnhtdLf1AgeuZLOrRbvmU/gaRCVg7ZaQDjVf3l84egiY0mRNe5xE4A== +"@types/node@^12.12.5": + version "12.19.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.8.tgz#efd6d1a90525519fc608c9db16c8a78f7693a978" + integrity sha512-D4k2kNi0URNBxIRCb1khTnkWNHv8KSL1owPmS/K5e5t8B2GzMReY7AsJIY1BnP5KdlgC4rj9jk2IkDMasIE7xg== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1214,23 +1423,23 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/react-dom@16.8.2": - version "16.8.2" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.8.2.tgz#9bd7d33f908b243ff0692846ef36c81d4941ad12" - integrity sha512-MX7n1wq3G/De15RGAAqnmidzhr2Y9O/ClxPxyqaNg96pGyeXUYPSvujgzEVpLo9oIP4Wn1UETl+rxTN02KEpBw== +"@types/react-dom@^16.8.2": + version "16.9.10" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.10.tgz#4485b0bec3d41f856181b717f45fd7831101156f" + integrity sha512-ItatOrnXDMAYpv6G8UCk2VhbYVTjZT9aorLtA/OzDN9XJ2GKcfam68jutoAcILdRjsRUO8qb7AmyObF77Q8QFw== dependencies: - "@types/react" "*" + "@types/react" "^16" -"@types/react-router-dom@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.1.tgz#77a2dae8ba6ff1df51d27517f7646127a51a1a3e" - integrity sha512-yXqWGaehta/cdmjvEQfCbHFX6l1c7QHuE5n2OfhcJ33ufbt55xhAKqQ0BmT24YM3s7OKwrrUUgY3FaSzO7be3Q== +"@types/react-router-dom@^5.1.1": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.6.tgz#07b14e7ab1893a837c8565634960dc398564b1fb" + integrity sha512-gjrxYqxz37zWEdMVvQtWPFMFj1dRDb4TGOcgyOfSXTrEXdF92L00WE3C471O3TV/RF1oskcStkXsOU0Ete4s/g== dependencies: "@types/history" "*" "@types/react" "*" "@types/react-router" "*" -"@types/react-router@*": +"@types/react-router@*", "@types/react-router@^5.1.1": version "5.1.8" resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.8.tgz#4614e5ba7559657438e17766bb95ef6ed6acc3fa" integrity sha512-HzOyJb+wFmyEhyfp4D4NYrumi+LQgQL/68HvJO+q6XtuHSDvw6Aqov7sCAhjbNq3bUPgPqbdvjXC5HeB2oEAPg== @@ -1238,14 +1447,6 @@ "@types/history" "*" "@types/react" "*" -"@types/react-router@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.1.tgz#e0b827556abc70da3473d05daf074c839d6852aa" - integrity sha512-S7SlFAPb7ZKr6HHMW0kLHGcz8pyJSL0UdM+JtlWthDqKUWwr7E6oPXuHgkofDI8dKCm16slg8K8VCf5pZJquaA== - dependencies: - "@types/history" "*" - "@types/react" "*" - "@types/react-test-renderer@*": version "16.9.3" resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.3.tgz#96bab1860904366f4e848b739ba0e2f67bcae87e" @@ -1261,20 +1462,20 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/react@16.8.8": - version "16.8.8" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.8.tgz#4b60a469fd2469f7aa6eaa0f8cfbc51f6d76e662" - integrity sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg== +"@types/react@^16", "@types/react@^16.8.8": + version "16.14.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.2.tgz#85dcc0947d0645349923c04ccef6018a1ab7538c" + integrity sha512-BzzcAlyDxXl2nANlabtT4thtvbbnhee8hMmH/CcJrISDBVcJS1iOsP1f0OAgSdGE0MsY9tqcrb9YoZcOFv9dbQ== dependencies: "@types/prop-types" "*" - csstype "^2.2.0" + csstype "^3.0.2" "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -"@types/testing-library__jest-dom@^5.0.2": +"@types/testing-library__jest-dom@^5.9.1": version "5.9.5" resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz#5bf25c91ad2d7b38f264b12275e5c92a66d849b0" integrity sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ== @@ -1307,150 +1508,149 @@ dependencies: "@types/yargs-parser" "*" -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== - dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" - -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== - -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== - -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== - -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== - dependencies: - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== - -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== - dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" - -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== - -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== - -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -1494,7 +1694,7 @@ acorn-walk@^6.0.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn@^6.0.1, acorn@^6.2.1: +acorn@^6.0.1, acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== @@ -1763,7 +1963,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= @@ -1957,15 +2157,15 @@ babel-jest@^25.5.1: graceful-fs "^4.2.4" slash "^3.0.0" -babel-loader@8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== +babel-loader@^8.0.6: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - pify "^4.0.1" + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" babel-messages@^6.23.0: version "6.23.0" @@ -2734,7 +2934,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.14.6, browserslist@^4.6.0: +browserslist@^4.14.5, browserslist@^4.14.7: version "4.14.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6" integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ== @@ -2865,11 +3065,6 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -2880,6 +3075,15 @@ caniuse-lite@^1.0.30001157: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz#bebde28f893fa9594dadcaa7d6b8e2aa0299df20" integrity sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA== +canvas@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.6.1.tgz#0d087dd4d60f5a5a9efa202757270abea8bef89e" + integrity sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA== + dependencies: + nan "^2.14.0" + node-pre-gyp "^0.11.0" + simple-get "^3.0.3" + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -2892,15 +3096,6 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -2912,6 +3107,15 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" @@ -2987,10 +3191,10 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -circular-dependency-plugin@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz#e09dbc2dd3e2928442403e2d45b41cea06bc0a93" - integrity sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw== +circular-dependency-plugin@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz#39e836079db1d3cf2f988dc48c5188a44058b600" + integrity sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ== class-utils@^0.3.5: version "0.3.6" @@ -3002,31 +3206,13 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-webpack-plugin@0.1.19: +clean-webpack-plugin@^0.1.19: version "0.1.19" resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz#ceda8bb96b00fe168e9b080272960d20fdcadd6d" integrity sha512-M1Li5yLHECcN2MahoreuODul5LkjohJGFxLPTjl3j1ttKrF5rgjZET1SJduuqxLAuT1gAPOdkhg03qcaaU1KeA== dependencies: rimraf "^2.6.1" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3229,10 +3415,10 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-webpack-plugin@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.0.tgz#cd6bb506ffbbe830bf9ecb3d15cc4946b2edd011" - integrity sha512-0sNrj/Sx7/cWA0k7CVQa0sdA/dzCybqSb0+GbhKuQdOlAvnAwgC2osmbAFOAfha7ZXnreoQmCq5oDjG3gP4VHw== +copy-webpack-plugin@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz#8a889e1dcafa6c91c6cd4be1ad158f1d3823bae2" + integrity sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ== dependencies: cacache "^12.0.3" find-cache-dir "^2.1.0" @@ -3244,15 +3430,15 @@ copy-webpack-plugin@5.1.0: normalize-path "^3.0.0" p-limit "^2.2.1" schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + serialize-javascript "^4.0.0" webpack-log "^2.0.0" -core-js-compat@^3.1.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.7.0.tgz#8479c5d3d672d83f1f5ab94cf353e57113e065ed" - integrity sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg== +core-js-compat@^3.7.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.0.tgz#3248c6826f4006793bd637db608bca6e4cd688b1" + integrity sha512-o9QKelQSxQMYWHXc/Gc4L8bx/4F7TTraE5rhuN8I7mKBt5dBIUpXpIR3omv70ebr8ST5R3PqbDQr+ZI3+Tt1FQ== dependencies: - browserslist "^4.14.6" + browserslist "^4.14.7" semver "7.0.0" core-js-pure@^3.0.0: @@ -3301,17 +3487,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@6.0.5, cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -3329,6 +3504,17 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^7.0.0: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -3338,7 +3524,7 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" -cross-var@1.1.0: +cross-var@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/cross-var/-/cross-var-1.1.0.tgz#f0f0d4bb235d95138d1a539842d290f00db71cd6" integrity sha1-8PDUuyNdlRONGlOYQtKQ8A23HNY= @@ -3366,38 +3552,38 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-loader@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.2.0.tgz#bb570d89c194f763627fcf1f80059c6832d009b2" - integrity sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ== +css-loader@^3.2.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== dependencies: camelcase "^5.3.1" cssesc "^3.0.0" icss-utils "^4.1.1" loader-utils "^1.2.3" normalize-path "^3.0.0" - postcss "^7.0.17" + postcss "^7.0.32" postcss-modules-extract-imports "^2.0.0" postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.1.0" + postcss-modules-scope "^2.2.0" postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.0" - schema-utils "^2.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= -css@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== +css@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== dependencies: - inherits "^2.0.3" + inherits "^2.0.4" source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" + source-map-resolve "^0.6.0" cssesc@^3.0.0: version "3.0.0" @@ -3421,11 +3607,6 @@ cssstyle@^2.0.0: dependencies: cssom "~0.3.6" -csstype@^2.2.0: - version "2.6.14" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.14.tgz#004822a4050345b55ad4dcc00be1d9cf2f4296de" - integrity sha512-2mSc+VEpGPblzAxyeR+vZhJKgYg0Og0nnRi7pmRXFYYxSfnOnW8A5wwQb4n4cE2nIOzqKOAzLCaEX6aBmNEv8A== - csstype@^3.0.2: version "3.0.5" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8" @@ -3466,7 +3647,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" -debug@^3.1.1, debug@^3.2.5: +debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -3480,7 +3661,7 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -3490,6 +3671,13 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -3502,6 +3690,11 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -3602,6 +3795,11 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -3622,10 +3820,10 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diffie-hellman@^5.0.0: version "5.0.3" @@ -3704,9 +3902,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.591: - version "1.3.601" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.601.tgz#881824eaef0b2f97c89e1abb5835fdd224997d34" - integrity sha512-ctRyXD9y0mZu8pgeNwBUhLP3Guyr5YuqkfLKYmpTwYx7o9JtCEJme9JVX4xBXPr5ZNvr/iBXUvHLFEVJQThATg== + version "1.3.602" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.602.tgz#a176db985a9826c9a3fbf614d054fc42c5c9f478" + integrity sha512-+JbC10U8vpKAqAtrEqORdzaWewRgEj5DY+QQNyP/dxDTshPqqgpjrvt6smewKS/5F3vT5prYgg7/VTxb5FROjw== elliptic@^6.5.3: version "6.5.3" @@ -3731,11 +3929,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -3753,16 +3946,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== @@ -4153,7 +4337,7 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: +find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -4162,6 +4346,15 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -4185,7 +4378,7 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@3.0.0: +findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== @@ -4252,6 +4445,13 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -4326,11 +4526,6 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -4408,13 +4603,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -4424,6 +4612,13 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -4596,6 +4791,11 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +heatmap.js@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/heatmap.js/-/heatmap.js-2.0.5.tgz#466d3b86513f5d49112a49d25700ab2730149153" + integrity sha1-Rm07hlE/XUkRKknSVwCrJzAUkVM= + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -4642,7 +4842,7 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -html-entities@^1.2.1: +html-entities@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== @@ -4732,7 +4932,7 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4756,12 +4956,19 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== -import-local@2.0.0, import-local@^2.0.0: +import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== @@ -4832,7 +5039,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -4845,10 +5052,10 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== invariant@^2.2.2: version "2.2.4" @@ -4857,16 +5064,6 @@ invariant@^2.2.2: dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -5265,7 +5462,7 @@ jest-config@^25.5.4: pretty-format "^25.5.0" realpath-native "^2.0.0" -jest-diff@^25.1.0, jest-diff@^25.2.1, jest-diff@^25.5.0: +jest-diff@^25.2.1, jest-diff@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== @@ -5385,7 +5582,7 @@ jest-jasmine2@^25.5.4: pretty-format "^25.5.0" throat "^5.0.0" -jest-junit@9.0.0: +jest-junit@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-9.0.0.tgz#9eb247dda7a8d2e1647a92f58a03a1490c74aea5" integrity sha512-jnABGjL5pd2lhE1w3RIslZSufFbWQZGx8O3eluDES7qKxQuonXMtsPIi+4AKl4rtjb4DvMAjwLi4eHukc2FP/Q== @@ -5404,7 +5601,7 @@ jest-leak-detector@^25.5.0: jest-get-type "^25.2.6" pretty-format "^25.5.0" -jest-matcher-utils@^25.1.0, jest-matcher-utils@^25.5.0: +jest-matcher-utils@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== @@ -5628,11 +5825,6 @@ js-base64@^2.1.8: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -5643,7 +5835,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.1, js-yaml@^3.7.0: +js-yaml@^3.13.1: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -5733,7 +5925,7 @@ json3@^3.3.2: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@2.x, json5@^2.1.0, json5@^2.1.2: +json5@2.x, json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -5796,20 +5988,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -5849,16 +6027,7 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - -loader-utils@^1.0.2, loader-utils@^1.2.3: +loader-utils@^1.0.2, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -5867,6 +6036,15 @@ loader-utils@^1.0.2, loader-utils@^1.2.3: emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -5900,15 +6078,15 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@~4.17.10: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -loglevel@^1.6.4: - version "1.7.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" - integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== lolex@^5.0.0: version "5.1.2" @@ -5960,7 +6138,7 @@ make-dir@^2.0.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -5979,18 +6157,6 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -6022,16 +6188,7 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -6140,11 +6297,16 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== -mimic-fn@^2.0.0, mimic-fn@^2.1.0: +mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -6172,6 +6334,21 @@ minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -6196,7 +6373,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -6243,7 +6420,7 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -nan@^2.12.1, nan@^2.13.2: +nan@^2.12.1, nan@^2.13.2, nan@^2.14.0: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== @@ -6270,6 +6447,15 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +needle@^2.2.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.5.2.tgz#cf1a8fce382b5a280108bba90a14993c00e4010a" + integrity sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -6358,15 +6544,31 @@ node-notifier@^6.0.0: shellwords "^0.1.1" which "^1.3.1" +node-pre-gyp@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" + integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + node-releases@^1.1.66: version "1.1.67" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== -node-sass@4.12.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" - integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== +node-sass@^4.12.0: + version "4.14.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.14.1.tgz#99c87ec2efb7047ed638fb4c9db7f3a42e2217b5" + integrity sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -6375,14 +6577,14 @@ node-sass@4.12.0: get-stdin "^4.0.1" glob "^7.0.3" in-publish "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.15" meow "^3.7.0" mkdirp "^0.5.1" nan "^2.13.2" node-gyp "^3.8.0" npmlog "^4.0.0" request "^2.88.0" - sass-graph "^2.2.4" + sass-graph "2.2.5" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" @@ -6393,6 +6595,14 @@ node-sass@4.12.0: dependencies: abbrev "1" +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -6415,6 +6625,27 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -6429,7 +6660,7 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -6439,7 +6670,7 @@ npm-run-path@^4.0.0: gauge "~2.7.3" set-blocking "~2.0.0" -null-loader@3.0.0: +null-loader@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245" integrity sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw== @@ -6585,28 +6816,12 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - -os-locale@^3.0.0, os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0: +osenv@0, osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -6614,11 +6829,6 @@ osenv@0: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" @@ -6634,11 +6844,6 @@ p-finally@^2.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -6874,7 +7079,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -6886,7 +7091,7 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -portfinder@^1.0.25: +portfinder@^1.0.26: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== @@ -6917,7 +7122,7 @@ postcss-modules-local-by-default@^3.0.2: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^2.1.0: +postcss-modules-scope@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== @@ -6943,12 +7148,12 @@ postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: uniq "^1.0.1" util-deprecate "^1.0.2" -postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7.0.14, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.35" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== @@ -6962,7 +7167,7 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@1.19.1: +prettier@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== @@ -7164,15 +7369,25 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -react-dom@16.12.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" - integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-dom@^16.12.0: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.18.0" + scheduler "^0.19.1" react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4: version "16.13.1" @@ -7184,10 +7399,10 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react@16.12.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" - integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== +react@^16.12.0: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -7456,11 +7671,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -7602,15 +7812,20 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sass-graph@^2.2.4: - version "2.2.6" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.6.tgz#09fda0e4287480e3e4967b72a2d133ba09b8d827" - integrity sha512-MKuEYXFSGuRSi8FZ3A7imN1CeVn9Gpw0/SFJKdL1ejXJneI9a5rwlEZrKejhEFAA3O6yr3eIyl/WuvASvlT36g== +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== dependencies: glob "^7.0.0" lodash "^4.0.0" scss-tokenizer "^0.2.3" - yargs "^7.0.0" + yargs "^13.3.2" + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^3.1.9: version "3.1.11" @@ -7619,10 +7834,10 @@ saxes@^3.1.9: dependencies: xmlchars "^2.1.1" -scheduler@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" - integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -7636,7 +7851,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.0.1: +schema-utils@^2.6.5, schema-utils@^2.7.0: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -7704,11 +7919,6 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== - serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -7818,6 +8028,20 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" + integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -7875,20 +8099,21 @@ sockjs-client@1.4.0: json3 "^3.3.2" url-parse "^1.4.3" -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== dependencies: faye-websocket "^0.10.0" - uuid "^3.0.1" + uuid "^3.4.0" + websocket-driver "0.6.5" source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: +source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== @@ -7899,6 +8124,14 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" @@ -7979,7 +8212,7 @@ spdy-transport@^3.0.0: readable-stream "^3.0.6" wbuf "^1.7.3" -spdy@^4.0.1: +spdy@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== @@ -8096,7 +8329,7 @@ string-length@^3.1.0: astral-regex "^1.0.0" strip-ansi "^5.2.0" -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= @@ -8105,7 +8338,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2": version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -8225,20 +8458,18 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -style-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.0.0.tgz#1d5296f9165e8e2c85d24eee0b7caf9ec8ca1f82" - integrity sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw== - dependencies: - loader-utils "^1.2.3" - schema-utils "^2.0.1" +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -supports-color@6.1.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== +style-loader@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== dependencies: - has-flag "^3.0.0" + loader-utils "^2.0.0" + schema-utils "^2.7.0" supports-color@^2.0.0: version "2.0.0" @@ -8252,6 +8483,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -8286,6 +8524,19 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" +tar@^4: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -8294,7 +8545,7 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^1.4.1: +terser-webpack-plugin@^1.4.3: version "1.4.5" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== @@ -8466,10 +8717,10 @@ ts-jest@^25.5.1: semver "6.x" yargs-parser "18.x" -ts-loader@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef" - integrity sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g== +ts-loader@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.2.tgz#dffa3879b01a1a1e0a4b85e2b8421dc0dfff1c58" + integrity sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -8482,37 +8733,38 @@ tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslint-config-prettier@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.15.0.tgz#76b9714399004ab6831fdcf76d89b73691c812cf" - integrity sha512-06CgrHJxJmNYVgsmeMoa1KXzQRoOdvfkqnJth6XUkNeOz707qxN0WfxfhYwhL5kXHHbYJRby2bqAPKwThlZPhw== +tslint-config-prettier@^1.15.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" + integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== -tslint-react@3.6.0: +tslint-react@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-3.6.0.tgz#7f462c95c4a0afaae82507f06517ff02942196a1" integrity sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw== dependencies: tsutils "^2.13.1" -tslint@5.12.1: - version "5.12.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.1.tgz#8cec9d454cf8a1de9b0a26d7bdbad6de362e52c1" - integrity sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw== +tslint@^5.12.1: + version "5.20.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" + integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== dependencies: - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" - diff "^3.2.0" + diff "^4.0.1" glob "^7.1.1" - js-yaml "^3.7.0" + js-yaml "^3.13.1" minimatch "^3.0.4" + mkdirp "^0.5.1" resolve "^1.3.2" semver "^5.3.0" tslib "^1.8.0" - tsutils "^2.27.2" + tsutils "^2.29.0" -tsutils@^2.13.1, tsutils@^2.27.2: +tsutils@^2.13.1, tsutils@^2.29.0: version "2.29.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== @@ -8583,10 +8835,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== +typescript@^3.8.3: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -8715,15 +8967,15 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" - integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +v8-compile-cache@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== v8-to-istanbul@^4.1.3: version "4.1.4" @@ -8791,7 +9043,7 @@ watchpack-chokidar2@^2.0.1: dependencies: chokidar "^2.1.8" -watchpack@^1.6.0: +watchpack@^1.7.4: version "1.7.5" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== @@ -8814,22 +9066,22 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-cli@3.3.10: - version "3.3.10" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" - integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg== - dependencies: - chalk "2.4.2" - cross-spawn "6.0.5" - enhanced-resolve "4.1.0" - findup-sync "3.0.0" - global-modules "2.0.0" - import-local "2.0.0" - interpret "1.2.0" - loader-utils "1.2.3" - supports-color "6.1.0" - v8-compile-cache "2.0.3" - yargs "13.2.4" +webpack-cli@^3.3.10: + version "3.3.12" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" + integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== + dependencies: + chalk "^2.4.2" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.1" + findup-sync "^3.0.0" + global-modules "^2.0.0" + import-local "^2.0.0" + interpret "^1.4.0" + loader-utils "^1.4.0" + supports-color "^6.1.0" + v8-compile-cache "^2.1.1" + yargs "^13.3.2" webpack-dev-middleware@^3.7.2: version "3.7.2" @@ -8842,10 +9094,10 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz#27c3b5d0f6b6677c4304465ac817623c8b27b89c" - integrity sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw== +webpack-dev-server@^3.9.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -8855,31 +9107,31 @@ webpack-dev-server@3.9.0: debug "^4.1.1" del "^4.1.1" express "^4.17.1" - html-entities "^1.2.1" + html-entities "^1.3.1" http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.4" + loglevel "^1.6.8" opn "^5.5.0" p-retry "^3.0.1" - portfinder "^1.0.25" + portfinder "^1.0.26" schema-utils "^1.0.0" selfsigned "^1.10.7" semver "^6.3.0" serve-index "^1.9.1" - sockjs "0.3.19" + sockjs "0.3.20" sockjs-client "1.4.0" - spdy "^4.0.1" + spdy "^4.0.2" strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" ws "^6.2.1" - yargs "12.0.5" + yargs "^13.3.2" webpack-log@^2.0.0: version "2.0.0" @@ -8897,7 +9149,7 @@ webpack-merge@^5.0.9: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-node-externals@1.7.2: +webpack-node-externals@^1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3" integrity sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg== @@ -8910,35 +9162,42 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@4.41.2: - version "4.41.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" - integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== +webpack@^4.41.2: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" + enhanced-resolve "^4.3.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" loader-utils "^1.2.3" memory-fs "^0.4.1" micromatch "^3.1.10" - mkdirp "^0.5.1" + mkdirp "^0.5.3" neo-async "^2.6.1" node-libs-browser "^2.2.1" schema-utils "^1.0.0" tapable "^1.1.3" - terser-webpack-plugin "^1.4.1" - watchpack "^1.6.0" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" webpack-sources "^1.4.1" +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + websocket-driver@>=0.5.1: version "0.7.4" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" @@ -8974,11 +9233,6 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -9022,14 +9276,6 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -9095,12 +9341,7 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: +y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== @@ -9110,7 +9351,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -9123,23 +9364,7 @@ yargs-parser@18.x, yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@5.0.0-security.0: - version "5.0.0-security.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz#4ff7271d25f90ac15643b86076a2ab499ec9ee24" - integrity sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ== - dependencies: - camelcase "^3.0.0" - object.assign "^4.1.0" - -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^13.1.0: +yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== @@ -9155,40 +9380,21 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@12.0.5: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: cliui "^5.0.0" find-up "^3.0.0" get-caller-file "^2.0.1" - os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.0" + yargs-parser "^13.1.2" yargs@^14.2.0: version "14.2.3" @@ -9223,22 +9429,3 @@ yargs@^15.3.1: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^18.1.2" - -yargs@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.1.tgz#67f0ef52e228d4ee0d6311acede8850f53464df6" - integrity sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g== - dependencies: - 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-security.0" diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/model/ExternalComponent.java b/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/model/ExternalComponent.java index 63b0ad67b4..d17854cf18 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/model/ExternalComponent.java +++ b/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/model/ExternalComponent.java @@ -23,14 +23,16 @@ @Portable public class ExternalComponent { - + public static final String COMPONENT_ID_KEY = "componentId"; public static final String COMPONENT_PARTITION_KEY = "componentPartition"; - + private String id; private String name; private String icon; + private String category; private boolean noData; + private boolean provided; private List parameters; public ExternalComponent() { @@ -65,6 +67,10 @@ public String getIcon() { return icon; } + public String getCategory() { + return category; + } + public boolean isNoData() { return noData; } @@ -72,5 +78,14 @@ public boolean isNoData() { public List getParameters() { return parameters; } + + public boolean isProvided() { + return provided; + } + + public void setProvided(boolean provided) { + this.provided = provided; + } + } \ No newline at end of file diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/service/ComponentLoader.java b/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/service/ComponentLoader.java index b86bcfbb54..278590ecc2 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/service/ComponentLoader.java +++ b/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/service/ComponentLoader.java @@ -37,8 +37,18 @@ public interface ComponentLoader { */ List loadProvided(); + /** + * The filesystem directory for external components. + * + * @return + */ String getExternalComponentsDir(); + /** + * The internal path for provided components. + * + * @return + */ String getProvidedComponentsPath(); boolean isExternalComponentsEnabled(); diff --git a/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/service/ComponentService.java b/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/service/ComponentService.java index 21856b2927..0b1877e287 100644 --- a/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/service/ComponentService.java +++ b/dashbuilder/dashbuilder-shared/dashbuilder-services-api/src/main/java/org/dashbuilder/external/service/ComponentService.java @@ -28,7 +28,11 @@ public interface ComponentService { List listProvidedComponents(); List listExternalComponents(); + + List listAllComponents(); Optional byId(String componentId); + + } \ No newline at end of file