From 38ffc53ee592f3541de678da7b80aa29364a89c9 Mon Sep 17 00:00:00 2001 From: Aravindan Ramkumar <1028385+aravindanr@users.noreply.github.com> Date: Tue, 22 Mar 2022 14:17:31 -0700 Subject: [PATCH 01/10] START_WORKFLOW system task --- .../common/metadata/tasks/TaskType.java | 2 + .../mapper/StartWorkflowTaskMapper.java | 63 +++ .../core/execution/tasks/StartWorkflow.java | 168 +++++++ .../execution/tasks/StartWorkflowSpec.groovy | 119 +++++ .../test/integration/StartWorkflowSpec.groovy | 166 +++++++ .../utils/MockExternalPayloadStorage.java | 3 + .../simple_workflow_1_integration_test.json | 24 +- .../test/resources/start_workflow_input.json | 427 ++++++++++++++++++ ...workflow_that_starts_another_workflow.json | 23 + 9 files changed, 974 insertions(+), 21 deletions(-) create mode 100644 core/src/main/java/com/netflix/conductor/core/execution/mapper/StartWorkflowTaskMapper.java create mode 100644 core/src/main/java/com/netflix/conductor/core/execution/tasks/StartWorkflow.java create mode 100644 core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy create mode 100644 test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy create mode 100644 test-harness/src/test/resources/start_workflow_input.json create mode 100644 test-harness/src/test/resources/workflow_that_starts_another_workflow.json diff --git a/common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskType.java b/common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskType.java index 72b79f108a..9a3cbe416d 100644 --- a/common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskType.java +++ b/common/src/main/java/com/netflix/conductor/common/metadata/tasks/TaskType.java @@ -28,6 +28,7 @@ public enum TaskType { JOIN, DO_WHILE, SUB_WORKFLOW, + START_WORKFLOW, EVENT, WAIT, USER_DEFINED, @@ -54,6 +55,7 @@ public enum TaskType { public static final String TASK_TYPE_EVENT = "EVENT"; public static final String TASK_TYPE_WAIT = "WAIT"; public static final String TASK_TYPE_SUB_WORKFLOW = "SUB_WORKFLOW"; + public static final String TASK_TYPE_START_WORKFLOW = "START_WORKFLOW"; public static final String TASK_TYPE_FORK_JOIN = "FORK_JOIN"; public static final String TASK_TYPE_SIMPLE = "SIMPLE"; public static final String TASK_TYPE_HTTP = "HTTP"; diff --git a/core/src/main/java/com/netflix/conductor/core/execution/mapper/StartWorkflowTaskMapper.java b/core/src/main/java/com/netflix/conductor/core/execution/mapper/StartWorkflowTaskMapper.java new file mode 100644 index 0000000000..696c8b1f37 --- /dev/null +++ b/core/src/main/java/com/netflix/conductor/core/execution/mapper/StartWorkflowTaskMapper.java @@ -0,0 +1,63 @@ +/* + * Copyright 2022 Netflix, Inc. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package com.netflix.conductor.core.execution.mapper; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import com.netflix.conductor.common.metadata.tasks.TaskType; +import com.netflix.conductor.common.metadata.workflow.WorkflowTask; +import com.netflix.conductor.core.exception.TerminateWorkflowException; +import com.netflix.conductor.model.TaskModel; +import com.netflix.conductor.model.WorkflowModel; + +import static com.netflix.conductor.common.metadata.tasks.TaskType.START_WORKFLOW; +import static com.netflix.conductor.common.metadata.tasks.TaskType.TASK_TYPE_START_WORKFLOW; + +@Component +public class StartWorkflowTaskMapper implements TaskMapper { + + private static final Logger LOGGER = LoggerFactory.getLogger(StartWorkflowTaskMapper.class); + + @Override + public TaskType getTaskType() { + return START_WORKFLOW; + } + + @Override + public List getMappedTasks(TaskMapperContext taskMapperContext) + throws TerminateWorkflowException { + WorkflowTask taskToSchedule = taskMapperContext.getTaskToSchedule(); + WorkflowModel workflowInstance = taskMapperContext.getWorkflowInstance(); + String taskId = taskMapperContext.getTaskId(); + + TaskModel startWorkflowTask = new TaskModel(); + startWorkflowTask.setTaskType(TASK_TYPE_START_WORKFLOW); + startWorkflowTask.setReferenceTaskName(taskToSchedule.getTaskReferenceName()); + startWorkflowTask.setWorkflowInstanceId(workflowInstance.getWorkflowId()); + startWorkflowTask.setWorkflowType(workflowInstance.getWorkflowName()); + startWorkflowTask.setCorrelationId(workflowInstance.getCorrelationId()); + startWorkflowTask.setScheduledTime(System.currentTimeMillis()); + startWorkflowTask.setTaskId(taskId); + startWorkflowTask.addInput(taskMapperContext.getTaskInput()); + startWorkflowTask.setStatus(TaskModel.Status.SCHEDULED); + startWorkflowTask.setWorkflowTask(taskToSchedule); + startWorkflowTask.setWorkflowPriority(workflowInstance.getPriority()); + startWorkflowTask.setCallbackAfterSeconds(taskToSchedule.getStartDelay()); + LOGGER.debug("{} created", startWorkflowTask); + return List.of(startWorkflowTask); + } +} diff --git a/core/src/main/java/com/netflix/conductor/core/execution/tasks/StartWorkflow.java b/core/src/main/java/com/netflix/conductor/core/execution/tasks/StartWorkflow.java new file mode 100644 index 0000000000..1b481f3712 --- /dev/null +++ b/core/src/main/java/com/netflix/conductor/core/execution/tasks/StartWorkflow.java @@ -0,0 +1,168 @@ +/* + * Copyright 2022 Netflix, Inc. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package com.netflix.conductor.core.execution.tasks; + +import java.util.Map; + +import javax.validation.Validator; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import com.netflix.conductor.common.metadata.workflow.StartWorkflowRequest; +import com.netflix.conductor.core.exception.ApplicationException; +import com.netflix.conductor.core.execution.WorkflowExecutor; +import com.netflix.conductor.model.TaskModel; +import com.netflix.conductor.model.WorkflowModel; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import static com.netflix.conductor.common.metadata.tasks.TaskType.TASK_TYPE_START_WORKFLOW; +import static com.netflix.conductor.model.TaskModel.Status.COMPLETED; +import static com.netflix.conductor.model.TaskModel.Status.FAILED; + +@Component(TASK_TYPE_START_WORKFLOW) +public class StartWorkflow extends WorkflowSystemTask { + + private static final Logger LOGGER = LoggerFactory.getLogger(StartWorkflow.class); + + private static final String WORKFLOW_ID = "workflowId"; + private static final String START_WORKFLOW_PARAMETER = "start_workflow"; + + private final ObjectMapper objectMapper; + private final Validator validator; + + public StartWorkflow(ObjectMapper objectMapper, Validator validator) { + super(TASK_TYPE_START_WORKFLOW); + this.objectMapper = objectMapper; + this.validator = validator; + } + + @Override + public void start( + WorkflowModel workflow, TaskModel taskModel, WorkflowExecutor workflowExecutor) { + StartWorkflowRequest request = getRequest(taskModel); + if (request == null) { + return; + } + + // set the correlation id of starter workflow, if its empty in the StartWorkflowRequest + request.setCorrelationId( + StringUtils.defaultIfBlank( + request.getCorrelationId(), workflow.getCorrelationId())); + + try { + String workflowId = startWorkflow(request, workflowExecutor); + taskModel.addOutput(WORKFLOW_ID, workflowId); + taskModel.setStatus(COMPLETED); + } catch (ApplicationException ae) { + if (ae.isRetryable()) { + LOGGER.info( + "A transient backend error happened when task {} in {} tried to start workflow {}.", + taskModel.getTaskId(), + workflow.toShortString(), + request.getName()); + } else { + taskModel.setStatus(FAILED); + taskModel.setReasonForIncompletion(ae.getMessage()); + LOGGER.error( + "Error starting workflow: {} from workflow: {}", + request.getName(), + workflow.toShortString(), + ae); + } + } catch (Exception e) { + taskModel.setStatus(FAILED); + taskModel.setReasonForIncompletion(e.getMessage()); + LOGGER.error( + "Error starting workflow: {} from workflow: {}", + request.getName(), + workflow.toShortString(), + e); + } + } + + private StartWorkflowRequest getRequest(TaskModel taskModel) { + Map taskInput = taskModel.getInputData(); + + StartWorkflowRequest startWorkflowRequest = null; + + if (taskInput.get(START_WORKFLOW_PARAMETER) == null) { + taskModel.setStatus(FAILED); + taskModel.setReasonForIncompletion( + "Missing '" + START_WORKFLOW_PARAMETER + "' in input data."); + } else { + try { + startWorkflowRequest = + objectMapper.convertValue( + taskInput.get(START_WORKFLOW_PARAMETER), + StartWorkflowRequest.class); + + var violations = validator.validate(startWorkflowRequest); + if (!violations.isEmpty()) { + StringBuilder reasonForIncompletion = + new StringBuilder(START_WORKFLOW_PARAMETER) + .append(" validation failed. "); + for (var violation : violations) { + reasonForIncompletion + .append("'") + .append(violation.getPropertyPath().toString()) + .append("' -> ") + .append(violation.getMessage()) + .append(". "); + } + taskModel.setStatus(FAILED); + taskModel.setReasonForIncompletion(reasonForIncompletion.toString()); + startWorkflowRequest = null; + } + } catch (IllegalArgumentException e) { + LOGGER.error("Error reading StartWorkflowRequest for {}", taskModel, e); + taskModel.setStatus(FAILED); + taskModel.setReasonForIncompletion( + "Error reading StartWorkflowRequest. " + e.getMessage()); + } + } + + return startWorkflowRequest; + } + + private String startWorkflow(StartWorkflowRequest request, WorkflowExecutor workflowExecutor) { + if (request.getWorkflowDef() == null) { + return workflowExecutor.startWorkflow( + request.getName(), + request.getVersion(), + request.getCorrelationId(), + request.getPriority(), + request.getInput(), + request.getExternalInputPayloadStoragePath(), + null, + request.getTaskToDomain()); + } else { + return workflowExecutor.startWorkflow( + request.getWorkflowDef(), + request.getInput(), + request.getExternalInputPayloadStoragePath(), + request.getCorrelationId(), + request.getPriority(), + null, + request.getTaskToDomain()); + } + } + + @Override + public boolean isAsync() { + return true; + } +} diff --git a/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy b/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy new file mode 100644 index 0000000000..5b734bee9f --- /dev/null +++ b/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy @@ -0,0 +1,119 @@ +/* + * Copyright 2022 Netflix, Inc. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package com.netflix.conductor.core.execution.tasks + + +import javax.validation.ConstraintViolation +import javax.validation.Validator + +import com.netflix.conductor.common.config.ObjectMapperProvider +import com.netflix.conductor.core.exception.ApplicationException +import com.netflix.conductor.core.execution.WorkflowExecutor +import com.netflix.conductor.model.TaskModel +import com.netflix.conductor.model.WorkflowModel + +import spock.lang.Specification +import spock.lang.Subject + +import static com.netflix.conductor.core.execution.tasks.StartWorkflow.START_WORKFLOW_PARAMETER +import static com.netflix.conductor.model.TaskModel.Status.FAILED +import static com.netflix.conductor.model.TaskModel.Status.SCHEDULED + +/** + * Unit test for StartWorkflow. Success and Javax validation cases are covered by the StartWorkflowSpec in test-harness module. + */ +class StartWorkflowSpec extends Specification { + + @Subject + StartWorkflow startWorkflow + + WorkflowExecutor workflowExecutor + Validator validator + WorkflowModel workflowModel + TaskModel taskModel + + def setup() { + workflowExecutor = Mock(WorkflowExecutor.class) + validator = Mock(Validator.class) { + validate(_) >> new HashSet>() + } + + def inputData = [:] + inputData[START_WORKFLOW_PARAMETER] = ['name': 'some_workflow'] + taskModel = new TaskModel(status: SCHEDULED, inputData: inputData) + workflowModel = new WorkflowModel() + + startWorkflow = new StartWorkflow(new ObjectMapperProvider().getObjectMapper(), validator) + } + + def "StartWorkflow task is asynchronous"() { + when: + def async = startWorkflow.isAsync() + + then: + async + } + + def "start_workflow parameter is missing"() { + given: "a task with no start_workflow in input" + taskModel.inputData = [:] + + when: + startWorkflow.start(workflowModel, taskModel, workflowExecutor) + + then: + taskModel.status == FAILED + taskModel.reasonForIncompletion != null + } + + def "ObjectMapper throws an IllegalArgumentException"() { + given: "a task with no start_workflow in input" + taskModel.inputData[START_WORKFLOW_PARAMETER] = "I can't be converted to StartWorkflowRequest" + + when: + startWorkflow.start(workflowModel, taskModel, workflowExecutor) + + then: + taskModel.status == FAILED + taskModel.reasonForIncompletion != null + } + + def "WorkflowExecutor throws a retryable exception"() { + when: + startWorkflow.start(workflowModel, taskModel, workflowExecutor) + + then: + taskModel.status == SCHEDULED + 1 * workflowExecutor.startWorkflow(*_) >> { throw new ApplicationException(ApplicationException.Code.BACKEND_ERROR, "") } + } + + def "WorkflowExecutor throws a non-retryable ApplicationException"() { + when: + startWorkflow.start(workflowModel, taskModel, workflowExecutor) + + then: + taskModel.status == FAILED + taskModel.reasonForIncompletion != null + 1 * workflowExecutor.startWorkflow(*_) >> { throw new ApplicationException(ApplicationException.Code.NOT_FOUND, "") } + } + + def "WorkflowExecutor throws a RuntimeException"() { + when: + startWorkflow.start(workflowModel, taskModel, workflowExecutor) + + then: + taskModel.status == FAILED + taskModel.reasonForIncompletion != null + 1 * workflowExecutor.startWorkflow(*_) >> { throw new RuntimeException("I am an unexpected exception") } + } +} diff --git a/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy b/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy new file mode 100644 index 0000000000..3218ffc673 --- /dev/null +++ b/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy @@ -0,0 +1,166 @@ +/* + * Copyright 2022 Netflix, Inc. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package com.netflix.conductor.test.integration + +import org.springframework.beans.factory.annotation.Autowired + +import com.netflix.conductor.common.metadata.tasks.Task +import com.netflix.conductor.common.run.Workflow +import com.netflix.conductor.core.execution.tasks.StartWorkflow +import com.netflix.conductor.dao.QueueDAO +import com.netflix.conductor.model.TaskModel +import com.netflix.conductor.model.WorkflowModel +import com.netflix.conductor.test.base.AbstractSpecification + +import spock.lang.Shared +import spock.lang.Unroll + +import static com.netflix.conductor.model.TaskModel.Status.FAILED + +class StartWorkflowSpec extends AbstractSpecification { + + @Autowired + QueueDAO queueDAO + + @Autowired + StartWorkflow startWorkflowTask + + @Shared + def WORKFLOW_THAT_STARTS_ANOTHER_WORKFLOW = 'workflow_that_starts_another_workflow' + + def setup() { + workflowTestUtil.registerWorkflows('workflow_that_starts_another_workflow.json', + 'simple_workflow_1_integration_test.json') + } + + @Unroll + def "start another workflow using #testCase.name"() { + setup: 'create the correlationId for the starter workflow' + def correlationId = UUID.randomUUID().toString() + + when: "starter workflow is started" + def workflowInstanceId = workflowExecutor.startWorkflow(WORKFLOW_THAT_STARTS_ANOTHER_WORKFLOW, 1, + correlationId, testCase.workflowInput, testCase.workflowInputPath, null, null) + + then: "verify that the starter workflow is in RUNNING state" + with(workflowExecutionService.getExecutionStatus(workflowInstanceId, true)) { + status == Workflow.WorkflowStatus.RUNNING + tasks.size() == 1 + tasks[0].taskType == 'START_WORKFLOW' + tasks[0].status == Task.Status.SCHEDULED + } + + when: "the START_WORKFLOW task is started" + List polledTaskIds = queueDAO.pop("START_WORKFLOW", 1, 200) + String startWorkflowTaskId = polledTaskIds.get(0) + asyncSystemTaskExecutor.execute(startWorkflowTask, startWorkflowTaskId) + + then: "verify the START_WORKFLOW task and workflow are COMPLETED" + with(workflowExecutionService.getExecutionStatus(workflowInstanceId, true)) { + status == Workflow.WorkflowStatus.COMPLETED + tasks.size() == 1 + tasks[0].taskType == 'START_WORKFLOW' + tasks[0].status == Task.Status.COMPLETED + } + + when: "the started workflow is retrieved" + def startWorkflowTask = workflowExecutionService.getTask(startWorkflowTaskId) + String startedWorkflowId = startWorkflowTask.outputData['workflowId'] + + then: "verify that the started workflow is RUNNING" + with(workflowExecutionService.getExecutionStatus(startedWorkflowId, false)) { + status == Workflow.WorkflowStatus.RUNNING + it.correlationId == correlationId + // when the "starter" workflow is started with input from external payload storage, + // it sends a large input to the "started" workflow + // see start_workflow_input.json + if(testCase.workflowInputPath) { + externalInputPayloadStoragePath != null + } else { + input != null + } + } + + where: + testCase << [workflowName(), workflowDef(), workflowRequestWithExternalPayloadStorage()] + } + + def "start_workflow does not conform to StartWorkflowRequest"() { + given: "start_workflow that does not conform to StartWorkflowRequest" + def startWorkflowParam = ['param1': 'value1', 'param2': 'value2'] + def workflowInput = ['start_workflow': startWorkflowParam] + + when: "starter workflow is started" + def workflowInstanceId = workflowExecutor.startWorkflow(WORKFLOW_THAT_STARTS_ANOTHER_WORKFLOW, 1, + null, workflowInput, null, null, null) + + then: "verify that the starter workflow is in RUNNING state" + with(workflowExecutionService.getExecutionStatus(workflowInstanceId, true)) { + status == Workflow.WorkflowStatus.RUNNING + tasks.size() == 1 + tasks[0].taskType == 'START_WORKFLOW' + tasks[0].status == Task.Status.SCHEDULED + } + + when: "the START_WORKFLOW task is started" + List polledTaskIds = queueDAO.pop("START_WORKFLOW", 1, 200) + String startWorkflowTaskId = polledTaskIds.get(0) + asyncSystemTaskExecutor.execute(startWorkflowTask, startWorkflowTaskId) + + then: "verify the START_WORKFLOW task and workflow FAILED" + with(workflowExecutionService.getExecutionStatus(workflowInstanceId, true)) { + status == Workflow.WorkflowStatus.FAILED + tasks.size() == 1 + tasks[0].taskType == 'START_WORKFLOW' + tasks[0].status == Task.Status.FAILED + tasks[0].reasonForIncompletion != null + } + } + + /** + * Builds a TestCase for a StartWorkflowRequest with a WorkflowDef that contains two tasks. + */ + static workflowDef() { + def task1 = ['name': 'integration_task_1', 'taskReferenceName': 't1', 'type': 'SIMPLE', + 'inputParameters': ['tp1': '${workflow.input.param1}', 'tp2': '${workflow.input.param2}', 'tp3': '${CPEWF_TASK_ID}']] + def task2 = ['name': 'integration_task_2', 'taskReferenceName': 't2', 'type': 'SIMPLE', + 'inputParameters': ['tp1': '${workflow.input.param1}', 'tp2': '${t1.output.op}', 'tp3': '${CPEWF_TASK_ID}']] + def workflowDef = ['name': 'dynamic_wf', 'version': 1, 'tasks': [task1, task2], 'ownerEmail': 'abc@abc.com'] + + def startWorkflow = ['name': 'dynamic_wf', 'workflowDef': workflowDef] + + new TestCase(name: 'workflow definition', workflowInput: ['start_workflow': startWorkflow]) + } + + /** + * Builds a TestCase for a StartWorkflowRequest with a workflow name. + */ + static workflowName() { + def startWorkflow = ['name': 'integration_test_wf', 'input': ['param1': 'value1', 'param2': 'value2']] + + new TestCase(name: 'name and version', workflowInput: ['start_workflow': startWorkflow]) + } + + /** + * Builds a TestCase for a StartWorkflowRequest with a workflow name and input in external payload storage. + */ + static workflowRequestWithExternalPayloadStorage() { + new TestCase(name: 'name and version with external input', workflowInputPath: '/start_workflow_input.json') + } + + static class TestCase { + String name + Map workflowInput + String workflowInputPath + } +} diff --git a/test-harness/src/test/java/com/netflix/conductor/test/utils/MockExternalPayloadStorage.java b/test-harness/src/test/java/com/netflix/conductor/test/utils/MockExternalPayloadStorage.java index 8aafde9b31..bca58dbacf 100644 --- a/test-harness/src/test/java/com/netflix/conductor/test/utils/MockExternalPayloadStorage.java +++ b/test-harness/src/test/java/com/netflix/conductor/test/utils/MockExternalPayloadStorage.java @@ -131,6 +131,9 @@ private Map getPayload(String path) { InputStream ipStream = MockExternalPayloadStorage.class.getResourceAsStream(TEMP_FILE_PATH); return objectMapper.readValue(ipStream, Map.class); + default: + return objectMapper.readValue( + MockExternalPayloadStorage.class.getResourceAsStream(path), Map.class); } } catch (IOException e) { // just handle this exception here and return empty map so that test will fail in case diff --git a/test-harness/src/test/resources/simple_workflow_1_integration_test.json b/test-harness/src/test/resources/simple_workflow_1_integration_test.json index 7336e4f9e9..202cb13058 100644 --- a/test-harness/src/test/resources/simple_workflow_1_integration_test.json +++ b/test-harness/src/test/resources/simple_workflow_1_integration_test.json @@ -12,16 +12,7 @@ "p3": "${CPEWF_TASK_ID}", "someNullKey": null }, - "type": "SIMPLE", - "decisionCases": {}, - "defaultCase": [], - "forkTasks": [], - "startDelay": 0, - "joinOn": [], - "optional": false, - "defaultExclusiveJoinTask": [], - "asyncComplete": false, - "loopOver": [] + "type": "SIMPLE" }, { "name": "integration_task_2", @@ -31,16 +22,7 @@ "tp2": "${t1.output.op}", "tp3": "${CPEWF_TASK_ID}" }, - "type": "SIMPLE", - "decisionCases": {}, - "defaultCase": [], - "forkTasks": [], - "startDelay": 0, - "joinOn": [], - "optional": false, - "defaultExclusiveJoinTask": [], - "asyncComplete": false, - "loopOver": [] + "type": "SIMPLE" } ], "inputParameters": [ @@ -59,4 +41,4 @@ "timeoutPolicy": "ALERT_ONLY", "timeoutSeconds": 0, "ownerEmail": "test@harness.com" -} \ No newline at end of file +} diff --git a/test-harness/src/test/resources/start_workflow_input.json b/test-harness/src/test/resources/start_workflow_input.json new file mode 100644 index 0000000000..8212c3111a --- /dev/null +++ b/test-harness/src/test/resources/start_workflow_input.json @@ -0,0 +1,427 @@ +{ + "start_workflow": { + "name": "integration_test_wf", + "input": { + "op": { + "TEST_SAMPLE": [ + { + "sourceId": "1413900_10830", + "url": "file/location/a0bdc4d0-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "1413900_50241", + "url": "file/location/cd4e00a0-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "generated-55ee8663-85c2-42d3-aca2-4076707e6d4e", + "url": "file/sample/location/e008d018-63d7-44b2-b07e-c7435430ac71" + }, + { + "sourceId": "generated-14056154-1544-4350-81db-b3751fe44777", + "url": "file/sample/location/3d927190-1c4d-4af2-91cf-2968d3ccfe70" + }, + { + "sourceId": "generated-0b0ae5ea-d5c5-410c-adc9-bf16d2909c2e", + "url": "file/sample/location/3d927190-1c4d-4af2-91cf-2968d3ccfe70" + }, + { + "sourceId": "generated-08869779-614d-417c-bfea-36a3f8f199da", + "url": "file/sample/location/07ec28a1-189e-4f2a-9dd5-f3ca68ce977d" + }, + { + "sourceId": "generated-e117db45-1c48-45d0-b751-89386eb2d81d", + "url": "file/sample/location/e87da4d1-72da-47a3-801d-43e01c050c89" + }, + { + "sourceId": "f0221421-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/4a009209-002f-4b58-8b96-cb2198f8ba3c" + }, + { + "sourceId": "f0252161-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/55b56298-5e7a-4949-b919-88c5c9557e8e" + }, + { + "sourceId": "f038d070-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/3c4804f4-e826-436f-90c9-52b8d9266d52" + }, + { + "sourceId": "f04e0621-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/689283a1-1816-48ef-83da-7f9ac874bf45" + }, + { + "sourceId": "f04ddf10-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/586666ae-7321-445a-80b6-323c8c241ecd" + }, + { + "sourceId": "f05950c0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/31795cc4-2590-4b20-a617-deaa18301f99" + }, + { + "sourceId": "1413900_46819", + "url": "file/location/c74497a0-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "1413900_11177", + "url": "file/location/a231c730-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "1413900_48713", + "url": "file/location/ca638ae0-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "1413900_48525", + "url": "file/location/ca0c9140-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "1413900_73303", + "url": "file/location/d5943a40-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "1413900_55202", + "url": "file/location/d1a4d7a0-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "generated-61413adf-3c10-4484-b25d-e238df898f45", + "url": "file/sample/location/e008d018-63d7-44b2-b07e-c7435430ac71" + }, + { + "sourceId": "generated-addca397-f050-4339-ae86-9ba8c4e1b0d5", + "url": "file/sample/location/838a0ddb-a315-453a-8b8a-fa795f9d7691" + }, + { + "sourceId": "generated-e4de9810-0f69-4593-8926-01ed82cbebcb", + "url": "file/sample/location/838a0ddb-a315-453a-8b8a-fa795f9d7691" + }, + { + "sourceId": "generated-e16e2074-7af6-4700-ab05-ca41ba9c9ab4", + "url": "file/sample/location/ec16facd-86e3-4c3f-8dfb-7a2ad3a4e18c" + }, + { + "sourceId": "generated-341c86f8-57a5-40e1-8842-3eb41dd9f528", + "url": "file/sample/location/ec16facd-86e3-4c3f-8dfb-7a2ad3a4e18c" + }, + { + "sourceId": "generated-88c2ea9b-cef7-4120-8043-b92713d8fade", + "url": "file/sample/location/519f6c80-96ef-440f-9d37-ccf36c7d1e5d" + }, + { + "sourceId": "generated-3f6a731f-3c92-4677-9923-f80b8a6be632", + "url": "file/sample/location/3881aea9-a731-4e22-9ead-2d6eccc51140" + }, + { + "sourceId": "generated-1508b871-64de-47ce-8b07-76c5cb3f3e1e", + "url": "file/sample/location/a2e4195f-3900-45b4-9335-45f85fca6467" + }, + { + "sourceId": "generated-1406dce8-7b9c-4956-a7e8-78721c476ce9", + "url": "file/sample/location/a2e4195f-3900-45b4-9335-45f85fca6467" + }, + { + "sourceId": "f0206671-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/35ebee36-3072-44c5-abb5-702a5a3b1a91" + }, + { + "sourceId": "f01f5501-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/d3a9133d-c681-4910-a769-8195526ae634" + }, + { + "sourceId": "f022b060-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/8fc1413d-170e-4644-a554-5e0c596b225c" + }, + { + "sourceId": "f02fa8b1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/35bed0a2-7def-457b-bded-4f4d7d94f76e" + }, + { + "sourceId": "f031f2a0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/a5a2ea1f-8d13-429c-a44d-3057d21f608a" + }, + { + "sourceId": "f0424650-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/1c599ffc-4f10-4c0b-8d9a-ae41c7256113" + }, + { + "sourceId": "f04ec970-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/8404a421-e1a6-41cf-af63-a35ccb474457" + }, + { + "sourceId": "1413900_47197", + "url": "file/location/c81b6fa0-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "generated-2a63c0c8-62ea-44a4-a33b-f0b3047e8b00", + "url": "file/sample/location/e008d018-63d7-44b2-b07e-c7435430ac71" + }, + { + "sourceId": "generated-b27face7-3589-4209-944a-5153b20c5996", + "url": "file/sample/location/519f6c80-96ef-440f-9d37-ccf36c7d1e5d" + }, + { + "sourceId": "generated-144675b3-9321-48d2-8b5b-e19a40d30ef2", + "url": "file/sample/location/519f6c80-96ef-440f-9d37-ccf36c7d1e5d" + }, + { + "sourceId": "generated-8cbe821e-b1fb-48ce-beb5-735319af4db6", + "url": "file/sample/location/519f6c80-96ef-440f-9d37-ccf36c7d1e5d" + }, + { + "sourceId": "generated-ecc4ea47-9bad-4b91-97c7-35f4ea6fb479", + "url": "file/sample/location/519f6c80-96ef-440f-9d37-ccf36c7d1e5d" + }, + { + "sourceId": "generated-c1eb9ed0-8560-4e09-a748-f926edb7cdc2", + "url": "file/sample/location/07ec28a1-189e-4f2a-9dd5-f3ca68ce977d" + }, + { + "sourceId": "generated-6bed81fd-c777-4c61-8da1-0bb7f7cf0082", + "url": "file/sample/location/07ec28a1-189e-4f2a-9dd5-f3ca68ce977d" + }, + { + "sourceId": "generated-852e5510-dd5d-4900-a614-854148fcc716", + "url": "file/sample/location/07ec28a1-189e-4f2a-9dd5-f3ca68ce977d" + }, + { + "sourceId": "generated-f4dedcb7-37c9-4ba9-ab37-64ec9be7c882", + "url": "file/sample/location/e87da4d1-72da-47a3-801d-43e01c050c89" + }, + { + "sourceId": "f0259691-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/721bc0de-e75f-4386-8b2e-ca84eb653596" + }, + { + "sourceId": "f02b3be1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/d2043b17-8ce5-42ee-a5e4-81c68f0c4838" + }, + { + "sourceId": "f02b62f0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/63931561-3b5b-4ffe-af47-da2c9de94684" + }, + { + "sourceId": "f0315660-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/d99ed629-2885-4e4a-8a1b-22e487b875fa" + }, + { + "sourceId": "f0306c00-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/6f8e673a-7003-44aa-96b9-e2ed8a4654ff" + }, + { + "sourceId": "f033c760-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/627c00f9-14b3-4057-b6e2-0f962ad0308e" + }, + { + "sourceId": "f03526f1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/fafabaf9-fe58-4a9a-b555-026521aeb2fe" + }, + { + "sourceId": "f03acc41-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/6c9fed2c-558a-4db3-8360-659b5e8c46e4" + }, + { + "sourceId": "f0463df1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/e9fb83d2-5f14-4442-92b5-67e613f2e35f" + }, + { + "sourceId": "f04fb3d0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/e7a0f82f-be8d-4ada-a4b1-13e8165e08be" + }, + { + "sourceId": "f05272f0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/9aba488a-22b3-4932-85a7-52c461203541" + }, + { + "sourceId": "f0581841-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/457415f6-6d0c-4304-8533-0d5b43fac564" + }, + { + "sourceId": "generated-8fefb48c-6fde-4fd6-8f33-a1f3f3b62105", + "url": "file/sample/location/ec16facd-86e3-4c3f-8dfb-7a2ad3a4e18c" + }, + { + "sourceId": "generated-30c61aa5-f5bd-4077-8c32-336b87acbe96", + "url": "file/sample/location/ec16facd-86e3-4c3f-8dfb-7a2ad3a4e18c" + }, + { + "sourceId": "generated-d5da37db-d486-46d4-8f7d-1e0710a77eb5", + "url": "file/sample/location/3d927190-1c4d-4af2-91cf-2968d3ccfe70" + }, + { + "sourceId": "generated-77af26fe-9e22-48af-99e3-f63f10fbe6de", + "url": "file/sample/location/3d927190-1c4d-4af2-91cf-2968d3ccfe70" + }, + { + "sourceId": "generated-2e807016-3d11-4b60-bec7-c380a608b67d", + "url": "file/sample/location/3d927190-1c4d-4af2-91cf-2968d3ccfe70" + }, + { + "sourceId": "generated-615d02e9-62c2-43ab-9df7-753b6b8e2c22", + "url": "file/sample/location/519f6c80-96ef-440f-9d37-ccf36c7d1e5d" + }, + { + "sourceId": "generated-3e1600fd-a626-4ee6-972b-5f0187e96c38", + "url": "file/sample/location/e87da4d1-72da-47a3-801d-43e01c050c89" + }, + { + "sourceId": "generated-1dcb208c-6a58-4334-a60c-6fb54c8a2af5", + "url": "file/sample/location/e87da4d1-72da-47a3-801d-43e01c050c89" + }, + { + "sourceId": "f024ac30-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/0af2107b-4231-4d23-bef3-4e417ac6c5d3" + }, + { + "sourceId": "f0282ea1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/0f592681-fd23-4194-ae43-42f61c664485" + }, + { + "sourceId": "f02c4d50-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/ec46b9a3-99af-410a-af7d-726f8854909f" + }, + { + "sourceId": "f02b8a00-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/aed7e5da-b524-4d41-b264-28ce615ec826" + }, + { + "sourceId": "f02b14d1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/b88c9055-ab0d-4d27-a405-265ba2a15f0c" + }, + { + "sourceId": "f03044f1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/fb8c4df9-d59e-4ac3-880e-4ea94cd880a4" + }, + { + "sourceId": "f034ffe1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/59f3fbe8-b300-4861-9b2f-dac7b15aea7d" + }, + { + "sourceId": "f03c2bd0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/19a06d54-41ed-419d-9947-f10cd5f0d85c" + }, + { + "sourceId": "f03fae41-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/a9a48a62-7d62-4f67-b281-cc6fdc1e722c" + }, + { + "sourceId": "f0455390-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/0aeffc0a-a5ad-46ff-abab-1b3bc6a5840a" + }, + { + "sourceId": "f04b1ff1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/9a08aaed-c125-48f7-9d1d-fd11266c2b12" + }, + { + "sourceId": "f04cf4b1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/17a6e0f9-aa64-411f-9af7-837c84f7443f" + }, + { + "sourceId": "f0511360-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/fb633c73-cb33-4806-bc08-049024644856" + }, + { + "sourceId": "f0538460-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/a7012248-6769-42da-a6c8-d4b831f6efce" + }, + { + "sourceId": "f058db91-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/bcf71522-6168-48c4-86c9-995bca60ae51" + }, + { + "sourceId": "generated-adf005c4-95c1-4904-9968-09cc19a26bfe", + "url": "file/sample/location/ec16facd-86e3-4c3f-8dfb-7a2ad3a4e18c" + }, + { + "sourceId": "generated-c4d367a4-4cdc-412e-af79-09b227f2e3ba", + "url": "file/sample/location/3d927190-1c4d-4af2-91cf-2968d3ccfe70" + }, + { + "sourceId": "generated-48dba018-f884-49db-b87e-67274e244c8f", + "url": "file/sample/location/4bce4154-fb4b-4f0a-887d-a0cd12d4d214" + }, + { + "sourceId": "generated-26700b83-4892-420e-8b46-1ee21eba75fb", + "url": "file/sample/location/07ec28a1-189e-4f2a-9dd5-f3ca68ce977d" + }, + { + "sourceId": "generated-632f3198-c0dc-4348-974f-51684d4e443e", + "url": "file/sample/location/e87da4d1-72da-47a3-801d-43e01c050c89" + }, + { + "sourceId": "generated-86e2dd1d-1aa4-4dbe-b37b-b488f5dd1c70", + "url": "file/sample/location/e87da4d1-72da-47a3-801d-43e01c050c89" + }, + { + "sourceId": "f04134e0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/ff8f59bf-7757-4d51-a7e4-619f3e8ffaf2" + }, + { + "sourceId": "f04f65b0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/d66467d1-3ac6-4041-8d15-e722ee07231f" + }, + { + "sourceId": "1413900_15255", + "url": "file/location/a9e20260-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "generated-e953493b-cbe3-4319-885e-00c82089c76c", + "url": "file/sample/location/ec16facd-86e3-4c3f-8dfb-7a2ad3a4e18c" + }, + { + "sourceId": "generated-65c54676-3adb-4ef0-b65e-8e2a49533cbf", + "url": "file/sample/location/07ec28a1-189e-4f2a-9dd5-f3ca68ce977d" + }, + { + "sourceId": "f02ac6b0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/21568877-07a5-411f-9715-5e92806c4448" + }, + { + "sourceId": "f02fcfc1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/f3b1f1a2-48d3-475d-a607-2e5a1fe532e7" + }, + { + "sourceId": "f03526f0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/84a40c66-d925-4a4a-ba62-8491d26e29e9" + }, + { + "sourceId": "f03e75c1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/e84c00e8-a148-46cf-9a0b-431c4c2aeb08" + }, + { + "sourceId": "f0429471-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/178de9fa-7cc8-457a-8fb6-5c080e6163ea" + }, + { + "sourceId": "f047eba0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/18d153aa-e13b-4264-ae03-f3da75eb425b" + }, + { + "sourceId": "f04fdae0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/7c843e53-8d87-47cf-bca5-1a02e7f5e33f" + }, + { + "sourceId": "f0553210-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/26bacd65-9082-4d83-9506-90e5f1ccd16a" + }, + { + "sourceId": "1413900_84904", + "url": "file/location/d8f7b090-5315-11e8-bf88-0efd527701fc" + }, + { + "sourceId": "generated-84adc784-8d7d-4088-ba51-16fde57fbc21", + "url": "file/sample/location/3881aea9-a731-4e22-9ead-2d6eccc51140" + }, + { + "sourceId": "generated-9e49c58b-0b33-4daf-a39a-8fc91e302328", + "url": "file/sample/location/4bce4154-fb4b-4f0a-887d-a0cd12d4d214" + }, + { + "sourceId": "f02dd3f1-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/8937b328-8f0d-4762-8d1f-7d7bc80c3d2e" + }, + { + "sourceId": "f03240c0-86e8-11e8-af77-0a2ba4eae3ec", + "url": "file/test/location/aab6e386-4d59-4b40-b257-9aed12a45446" + } + ] + } + } + } +} diff --git a/test-harness/src/test/resources/workflow_that_starts_another_workflow.json b/test-harness/src/test/resources/workflow_that_starts_another_workflow.json new file mode 100644 index 0000000000..1ce302c663 --- /dev/null +++ b/test-harness/src/test/resources/workflow_that_starts_another_workflow.json @@ -0,0 +1,23 @@ +{ + "name": "workflow_that_starts_another_workflow", + "description": "A workflow that uses START_WORKFLOW task to start another workflow", + "version": 1, + "tasks": [ + { + "name": "start_workflow", + "taskReferenceName": "st", + "inputParameters": { + "start_workflow": "${workflow.input.start_workflow}" + }, + "type": "START_WORKFLOW" + } + ], + "inputParameters": ["start_workflow"], + "outputParameters": {}, + "schemaVersion": 2, + "restartable": true, + "workflowStatusListenerEnabled": false, + "timeoutPolicy": "ALERT_ONLY", + "timeoutSeconds": 0, + "ownerEmail": "test@harness.com" +} From 394e2798b5ce144facae03304421d9ba7cbf0f1d Mon Sep 17 00:00:00 2001 From: Aravindan Ramkumar <1028385+aravindanr@users.noreply.github.com> Date: Tue, 22 Mar 2022 14:18:29 -0700 Subject: [PATCH 02/10] removed redundant call to MetadataService when starting a workflow --- .../netflix/conductor/service/WorkflowServiceImpl.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/core/src/main/java/com/netflix/conductor/service/WorkflowServiceImpl.java b/core/src/main/java/com/netflix/conductor/service/WorkflowServiceImpl.java index 4af4b18312..f1a84a13dd 100644 --- a/core/src/main/java/com/netflix/conductor/service/WorkflowServiceImpl.java +++ b/core/src/main/java/com/netflix/conductor/service/WorkflowServiceImpl.java @@ -131,14 +131,6 @@ public String startWorkflow( WorkflowDef workflowDef) { if (workflowDef == null) { - workflowDef = metadataService.getWorkflowDef(name, version); - if (workflowDef == null) { - throw new ApplicationException( - ApplicationException.Code.NOT_FOUND, - String.format( - "No such workflow found by name: %s, version: %d", name, version)); - } - return workflowExecutor.startWorkflow( name, version, From 5bd6dc5f1e649a5bc15e29036dc02c2f67a085b0 Mon Sep 17 00:00:00 2001 From: Aravindan Ramkumar <1028385+aravindanr@users.noreply.github.com> Date: Tue, 22 Mar 2022 14:18:40 -0700 Subject: [PATCH 03/10] refactoring --- .../java/com/netflix/conductor/common/utils/EnvUtils.java | 3 +-- .../core/execution/mapper/SubWorkflowTaskMapper.java | 2 +- .../core/execution/tasks/StartWorkflowSpec.groovy | 7 ++----- .../core/execution/mapper/SubWorkflowTaskMapperTest.java | 2 +- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/com/netflix/conductor/common/utils/EnvUtils.java b/common/src/main/java/com/netflix/conductor/common/utils/EnvUtils.java index ec6a8d7f8e..202f1f31c6 100644 --- a/common/src/main/java/com/netflix/conductor/common/utils/EnvUtils.java +++ b/common/src/main/java/com/netflix/conductor/common/utils/EnvUtils.java @@ -29,8 +29,7 @@ public static boolean isEnvironmentVariable(String test) { } } String value = - Optional.ofNullable(System.getProperty(test)) - .orElseGet(() -> Optional.ofNullable(System.getenv(test)).orElse(null)); + Optional.ofNullable(System.getProperty(test)).orElseGet(() -> System.getenv(test)); return value != null; } diff --git a/core/src/main/java/com/netflix/conductor/core/execution/mapper/SubWorkflowTaskMapper.java b/core/src/main/java/com/netflix/conductor/core/execution/mapper/SubWorkflowTaskMapper.java index a89aa464b0..fdd0a7efaa 100644 --- a/core/src/main/java/com/netflix/conductor/core/execution/mapper/SubWorkflowTaskMapper.java +++ b/core/src/main/java/com/netflix/conductor/core/execution/mapper/SubWorkflowTaskMapper.java @@ -105,7 +105,7 @@ SubWorkflowParams getSubWorkflowParams(WorkflowTask taskToSchedule) { String reason = String.format( "Task %s is defined as sub-workflow and is missing subWorkflowParams. " - + "Please check the blueprint", + + "Please check the workflow definition", taskToSchedule.getName()); LOGGER.error(reason); return new TerminateWorkflowException(reason); diff --git a/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy b/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy index 5b734bee9f..cc41972a52 100644 --- a/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy +++ b/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy @@ -57,11 +57,8 @@ class StartWorkflowSpec extends Specification { } def "StartWorkflow task is asynchronous"() { - when: - def async = startWorkflow.isAsync() - - then: - async + expect: + startWorkflow.isAsync() } def "start_workflow parameter is missing"() { diff --git a/core/src/test/java/com/netflix/conductor/core/execution/mapper/SubWorkflowTaskMapperTest.java b/core/src/test/java/com/netflix/conductor/core/execution/mapper/SubWorkflowTaskMapperTest.java index 36e6fc076c..d638d830b5 100644 --- a/core/src/test/java/com/netflix/conductor/core/execution/mapper/SubWorkflowTaskMapperTest.java +++ b/core/src/test/java/com/netflix/conductor/core/execution/mapper/SubWorkflowTaskMapperTest.java @@ -179,7 +179,7 @@ public void getExceptionWhenNoSubWorkflowParamsPassed() { expectedException.expectMessage( String.format( "Task %s is defined as sub-workflow and is missing subWorkflowParams. " - + "Please check the blueprint", + + "Please check the workflow definition", workflowTask.getName())); subWorkflowTaskMapper.getSubWorkflowParams(workflowTask); From 931ec9b028cda9c475a368980be7903069879f0f Mon Sep 17 00:00:00 2001 From: Aravindan Ramkumar <1028385+aravindanr@users.noreply.github.com> Date: Wed, 23 Mar 2022 17:46:57 -0700 Subject: [PATCH 04/10] start_workflow -> startWorkflow --- .../core/execution/tasks/StartWorkflow.java | 2 +- .../execution/tasks/StartWorkflowSpec.groovy | 2 +- .../test/integration/StartWorkflowSpec.groovy | 18 +++++++++--------- .../test/resources/start_workflow_input.json | 2 +- .../workflow_that_starts_another_workflow.json | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/com/netflix/conductor/core/execution/tasks/StartWorkflow.java b/core/src/main/java/com/netflix/conductor/core/execution/tasks/StartWorkflow.java index 1b481f3712..59abde2a82 100644 --- a/core/src/main/java/com/netflix/conductor/core/execution/tasks/StartWorkflow.java +++ b/core/src/main/java/com/netflix/conductor/core/execution/tasks/StartWorkflow.java @@ -39,7 +39,7 @@ public class StartWorkflow extends WorkflowSystemTask { private static final Logger LOGGER = LoggerFactory.getLogger(StartWorkflow.class); private static final String WORKFLOW_ID = "workflowId"; - private static final String START_WORKFLOW_PARAMETER = "start_workflow"; + private static final String START_WORKFLOW_PARAMETER = "startWorkflow"; private final ObjectMapper objectMapper; private final Validator validator; diff --git a/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy b/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy index cc41972a52..7ef18baae1 100644 --- a/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy +++ b/core/src/test/groovy/com/netflix/conductor/core/execution/tasks/StartWorkflowSpec.groovy @@ -61,7 +61,7 @@ class StartWorkflowSpec extends Specification { startWorkflow.isAsync() } - def "start_workflow parameter is missing"() { + def "startWorkflow parameter is missing"() { given: "a task with no start_workflow in input" taskModel.inputData = [:] diff --git a/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy b/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy index 3218ffc673..24be857533 100644 --- a/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy +++ b/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy @@ -12,20 +12,16 @@ */ package com.netflix.conductor.test.integration -import org.springframework.beans.factory.annotation.Autowired - import com.netflix.conductor.common.metadata.tasks.Task import com.netflix.conductor.common.run.Workflow import com.netflix.conductor.core.execution.tasks.StartWorkflow import com.netflix.conductor.dao.QueueDAO -import com.netflix.conductor.model.TaskModel -import com.netflix.conductor.model.WorkflowModel import com.netflix.conductor.test.base.AbstractSpecification - +import org.springframework.beans.factory.annotation.Autowired import spock.lang.Shared import spock.lang.Unroll -import static com.netflix.conductor.model.TaskModel.Status.FAILED +import static com.netflix.conductor.core.execution.tasks.StartWorkflow.START_WORKFLOW_PARAMETER class StartWorkflowSpec extends AbstractSpecification { @@ -139,7 +135,10 @@ class StartWorkflowSpec extends AbstractSpecification { def startWorkflow = ['name': 'dynamic_wf', 'workflowDef': workflowDef] - new TestCase(name: 'workflow definition', workflowInput: ['start_workflow': startWorkflow]) + def input = [:] + input[START_WORKFLOW_PARAMETER] = startWorkflow + + new TestCase(name: 'workflow definition', workflowInput: input) } /** @@ -147,8 +146,9 @@ class StartWorkflowSpec extends AbstractSpecification { */ static workflowName() { def startWorkflow = ['name': 'integration_test_wf', 'input': ['param1': 'value1', 'param2': 'value2']] - - new TestCase(name: 'name and version', workflowInput: ['start_workflow': startWorkflow]) + def input = [:] + input[START_WORKFLOW_PARAMETER] = startWorkflow + new TestCase(name: 'name and version', workflowInput: input) } /** diff --git a/test-harness/src/test/resources/start_workflow_input.json b/test-harness/src/test/resources/start_workflow_input.json index 8212c3111a..0abd4d3b33 100644 --- a/test-harness/src/test/resources/start_workflow_input.json +++ b/test-harness/src/test/resources/start_workflow_input.json @@ -1,5 +1,5 @@ { - "start_workflow": { + "startWorkflow": { "name": "integration_test_wf", "input": { "op": { diff --git a/test-harness/src/test/resources/workflow_that_starts_another_workflow.json b/test-harness/src/test/resources/workflow_that_starts_another_workflow.json index 1ce302c663..ba3cf9c99b 100644 --- a/test-harness/src/test/resources/workflow_that_starts_another_workflow.json +++ b/test-harness/src/test/resources/workflow_that_starts_another_workflow.json @@ -7,7 +7,7 @@ "name": "start_workflow", "taskReferenceName": "st", "inputParameters": { - "start_workflow": "${workflow.input.start_workflow}" + "startWorkflow": "${workflow.input.startWorkflow}" }, "type": "START_WORKFLOW" } From 79ae7f1dcd199c307bb29f467686550efabb7ab6 Mon Sep 17 00:00:00 2001 From: Aravindan Ramkumar <1028385+aravindanr@users.noreply.github.com> Date: Wed, 23 Mar 2022 17:57:51 -0700 Subject: [PATCH 05/10] StartWorkflow system task documentation --- docs/docs/configuration/workflowdef.md | 2 +- docs/docs/gettingstarted/startworkflow.md | 20 ++++++------ .../reference-docs/start-workflow-task.md | 32 +++++++++++++++++++ docs/docs/reference-docs/sub-workflow-task.md | 26 +++++++-------- docs/mkdocs.yml | 5 +-- .../test/integration/StartWorkflowSpec.groovy | 16 ++++------ 6 files changed, 65 insertions(+), 36 deletions(-) create mode 100644 docs/docs/reference-docs/start-workflow-task.md diff --git a/docs/docs/configuration/workflowdef.md b/docs/docs/configuration/workflowdef.md index 62ca14d8cc..255652547a 100644 --- a/docs/docs/configuration/workflowdef.md +++ b/docs/docs/configuration/workflowdef.md @@ -5,7 +5,7 @@ At a high level, a workflow is the Conductor primitive that encompasses the definition and flow of your business logic. A workflow is a collection (graph) of tasks and sub-workflows. A workflow definition specifies the order of execution of these [Tasks](taskdef.md). It also specifies how data/state is passed from one task to the other (using the -input/output parameters). These are then combined together to give you the final result. This orchestration of Tasks can +input/output parameters). These are then combined to give you the final result. This orchestration of Tasks can happen in a hybrid ecosystem that includes microservices, serverless functions, and monolithic applications. They can also span across any public cloud and on-premise data center footprints. In addition, the orchestration of tasks can be across any programming language since Conductor is also language agnostic. diff --git a/docs/docs/gettingstarted/startworkflow.md b/docs/docs/gettingstarted/startworkflow.md index 6de77843f7..55ecec04bb 100644 --- a/docs/docs/gettingstarted/startworkflow.md +++ b/docs/docs/gettingstarted/startworkflow.md @@ -2,16 +2,16 @@ When starting a Workflow execution with a registered definition, Workflow accepts following parameters: -|field|description|Notes| -|:-----|:---|:---| -| name | Name of the Workflow. MUST be registered with Conductor before starting workflow | | -| version | Workflow version | defaults to latest available version | -| input | JSON object with key value params, that can be used by downstream tasks | See [Wiring Inputs and Outputs](../../configuration/workflowdef/#wiring-inputs-and-outputs) for details | -| correlationId | Unique Id that correlates multiple Workflow executions | optional | -| taskToDomain | See [Task Domains](../../configuration/taskdomains/#task-domains) for more information. | optional | -| workflowDef | Provide adhoc Workflow definition to run, without registering. See Dynamic Workflows below. | optional | -| externalInputPayloadStoragePath | This is taken care of by Java client. See [External Payload Storage](../../externalpayloadstorage/) for more info. | optional | -| priority | Priority level for the tasks within this workflow execution. Possible values are between 0 - 99. | optional | +|field| description |Notes| +|:-----|:--------------------------------------------------------------------------------------------------------------------------------------------------|:---| +| name | Name of the Workflow. MUST be registered with Conductor before starting workflow | | +| version | Workflow version | defaults to latest available version | +| input | JSON object with key value params, that can be used by downstream tasks | See [Wiring Inputs and Outputs](../../configuration/workflowdef/#wiring-inputs-and-outputs) for details | +| correlationId | Unique Id that correlates multiple Workflow executions | optional | +| taskToDomain | See [Task Domains](../../configuration/taskdomains/#task-domains) for more information. | optional | +| workflowDef | An adhoc [Workflow Definition](../../configuration/workflowdef.md) to run, without registering. See [Dynamic Workflows](#dynamic-workflows). | optional | +| externalInputPayloadStoragePath | This is taken care of by Java client. See [External Payload Storage](../../externalpayloadstorage/) for more info. | optional | +| priority | Priority level for the tasks within this workflow execution. Possible values are between 0 - 99. | optional | **Example:** diff --git a/docs/docs/reference-docs/start-workflow-task.md b/docs/docs/reference-docs/start-workflow-task.md new file mode 100644 index 0000000000..e7e2729232 --- /dev/null +++ b/docs/docs/reference-docs/start-workflow-task.md @@ -0,0 +1,32 @@ +--- +sidebar_position: 1 +--- +# Start Workflow +```json +"type" : "START_WORKFLOW" +``` +### Introduction + +Start Workflow starts another workflow. + +### Use Cases + +When another workflow needs to be started from a workflow, `START_WORKFLOW` can be used. + +### Configuration + +Start Workflow task is defined directly inside the workflow with type `START_WORKFLOW`. + +#### Input + +**Parameters:** + +| name |type| description | +|---------------|---|------------------------------------------------------------------------------------------------------------------------| +| startWorkflow | Map[String, Any] | The value of this parameter is [Start Workflow Request](../../gettingstarted/startworkflow.md#start-workflow-request). | + +#### Output + +| name |type| description | +|------------|---|--------------------------------| +| workflowId | String | The id of the started workflow | diff --git a/docs/docs/reference-docs/sub-workflow-task.md b/docs/docs/reference-docs/sub-workflow-task.md index c730c546ef..315afcfb80 100644 --- a/docs/docs/reference-docs/sub-workflow-task.md +++ b/docs/docs/reference-docs/sub-workflow-task.md @@ -6,7 +6,7 @@ sidebar_position: 1 "type" : "SUB_WORKFLOW" ``` ### Introduction -Sub Workflow task allows for nesting a workflow within another workflow. +Sub Workflow task allows for nesting a workflow within another workflow. Nested workflows contain a reference to their parent. ### Use Cases @@ -15,9 +15,9 @@ case, Sub Workflow Task would be used. ### Configuration -Sub Workflow task is defined directly inside the workflow with `"SUB_WORKFLOW"`. +Sub Workflow task is defined directly inside the workflow with type `SUB_WORKFLOW`. -#### Inputs +#### Input **Parameters:** @@ -27,12 +27,12 @@ Sub Workflow task is defined directly inside the workflow with `"SUB_WORKFLOW"`. **subWorkflowParam** -|name|type|description| -|---|---|---| -| name | String | Name of the workflow to execute | -| version | Integer | Version of the workflow to execute | -| taskToDomain | Map[String, String] | Allows scheduling the sub workflow's tasks per given mappings. See [Task Domains](conductor/configuration/taskdomains/) for instructions to configure taskDomains. | -| workflowDefinition | [WorkflowDefinition](conductor/configuration/workflowdef/) | Allows starting a subworkflow with a dynamic workflow definition. | +|name| type |description| +|---|----------------------------------------------------------|---| +| name | String | Name of the workflow to execute | +| version | Integer | Version of the workflow to execute | +| taskToDomain | Map[String, String] | Allows scheduling the sub workflow's tasks per given mappings. See [Task Domains](conductor/configuration/taskdomains/) for instructions to configure taskDomains. | +| workflowDefinition | [WorkflowDefinition](../../configuration/workflowdef.md) | Allows starting a subworkflow with a dynamic workflow definition. | #### Output @@ -44,11 +44,11 @@ Sub Workflow task is defined directly inside the workflow with `"SUB_WORKFLOW"`. ### Examples -Imagine we have a workflow that has a fork in it.. In the example below, we inputting one image, but using a fork to create 2 images simultaneously: +Imagine we have a workflow that has a fork in it. In the example below, we input one image, but using a fork to create 2 images simultaneously: ![](/img/workflow_fork.png) -The left fork will create a JPG, and the right fork a WEBP image. Maintaining this workflow might be difficult, as changes made to one side of the fork do not automatically propagate the otehr. Rather than using 2 tasks, we can define a ```image_convert_resize``` workflow that we can call for both forks as a subworkflow: +The left fork will create a JPG, and the right fork a WEBP image. Maintaining this workflow might be difficult, as changes made to one side of the fork do not automatically propagate the other. Rather than using 2 tasks, we can define a ```image_convert_resize``` workflow that we can call for both forks as a sub-workflow: ```json @@ -145,7 +145,7 @@ Now our diagram will appear as: ![workflow with 2 subworkflows](../img/subworkflow_diagram.png) -The inputs to both sides of the workflow are identical before and after - but we've abstraced the tasks into the subworkflow. nay change to the subworkflow will automatically occur in bth sides of the fork. +The inputs to both sides of the workflow are identical before and after - but we've abstracted the tasks into the sub-workflow. Any change to the sub-workflow will automatically occur in bth sides of the fork. Looking at the subworkflow (the WEBP version): @@ -172,4 +172,4 @@ Looking at the subworkflow (the WEBP version): ``` The ```subWorkflowParam``` tells conductor which workflow to call. The task is marked as completed upon the completion of the spawned workflow. -If the sub-workflow is terminated or fails the task is marked as failure and retried if configured. \ No newline at end of file +If the sub-workflow is terminated or fails the task is marked as failure and retried if configured. diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 826d5c264b..cfc68b2085 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -29,8 +29,9 @@ nav: - Fork: reference-docs/fork-task.md - Join: reference-docs/join-task.md - Set Variable: reference-docs/set-variable-task.md + - Start Workflow: reference-docs/start-workflow-task.md - Sub Workflow: reference-docs/sub-workflow-task.md - - Switch: reference-docs/switch-task.md + - Switch: reference-docs/switch-task.md - Terminate: reference-docs/terminate-task.md - Wait: reference-docs/wait-task.md - System Tasks: @@ -62,7 +63,7 @@ nav: - Task Inputs: how-tos/Tasks/task-inputs.md - Task Timeouts: how-tos/Tasks/task-timeouts.md - Updating Task Definitions: how-tos/Tasks/updating-tasks.md - - Workers: + - Workers: -Build a Go Task Worker: how-tos/Workers/build-a-golang-task-worker.md -Build a Java Task Worker: how-tos/Workers/build-a-java-task-worker.md -Build a Python Task Worker: how-tos/Workers/build-a-python-task-worker.md diff --git a/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy b/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy index 24be857533..6686804db3 100644 --- a/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy +++ b/test-harness/src/test/groovy/com/netflix/conductor/test/integration/StartWorkflowSpec.groovy @@ -12,17 +12,17 @@ */ package com.netflix.conductor.test.integration +import org.springframework.beans.factory.annotation.Autowired + import com.netflix.conductor.common.metadata.tasks.Task import com.netflix.conductor.common.run.Workflow import com.netflix.conductor.core.execution.tasks.StartWorkflow import com.netflix.conductor.dao.QueueDAO import com.netflix.conductor.test.base.AbstractSpecification -import org.springframework.beans.factory.annotation.Autowired + import spock.lang.Shared import spock.lang.Unroll -import static com.netflix.conductor.core.execution.tasks.StartWorkflow.START_WORKFLOW_PARAMETER - class StartWorkflowSpec extends AbstractSpecification { @Autowired @@ -135,10 +135,7 @@ class StartWorkflowSpec extends AbstractSpecification { def startWorkflow = ['name': 'dynamic_wf', 'workflowDef': workflowDef] - def input = [:] - input[START_WORKFLOW_PARAMETER] = startWorkflow - - new TestCase(name: 'workflow definition', workflowInput: input) + new TestCase(name: 'workflow definition', workflowInput: ['startWorkflow': startWorkflow]) } /** @@ -146,9 +143,8 @@ class StartWorkflowSpec extends AbstractSpecification { */ static workflowName() { def startWorkflow = ['name': 'integration_test_wf', 'input': ['param1': 'value1', 'param2': 'value2']] - def input = [:] - input[START_WORKFLOW_PARAMETER] = startWorkflow - new TestCase(name: 'name and version', workflowInput: input) + + new TestCase(name: 'name and version', workflowInput: ['startWorkflow': startWorkflow]) } /** From 8b6ca04f6083a99021d133e0d3fa897f3e256125 Mon Sep 17 00:00:00 2001 From: peterlau Date: Wed, 23 Mar 2022 23:49:00 -0700 Subject: [PATCH 06/10] Refactor data access hooks (react-query) for improved encapsulation. Do not expose useFetch and useAction in view components. - Upgrade dependencies and remove fontsource-roboto. --- ui/package.json | 1 - ui/src/data/actions.js | 43 + ui/src/data/bulkactions.js | 27 + ui/src/data/common.js | 37 + ui/src/data/misc.js | 9 + ui/src/data/task.js | 120 ++ ui/src/data/workflow.js | 137 +++ ui/src/pages/definition/EventHandler.jsx | 4 +- ui/src/pages/definition/SaveTaskDialog.jsx | 2 +- .../pages/definition/SaveWorkflowDialog.jsx | 6 +- ui/src/pages/definition/TaskDefinition.jsx | 2 +- .../pages/definition/WorkflowDefinition.jsx | 7 +- ui/src/pages/definitions/EventHandler.jsx | 6 +- ui/src/pages/definitions/Task.jsx | 5 +- ui/src/pages/definitions/Workflow.jsx | 2 +- ui/src/pages/execution/ActionModule.jsx | 47 +- ui/src/pages/execution/Execution.jsx | 10 +- ui/src/pages/execution/RightPanel.jsx | 1 - ui/src/pages/execution/TaskLogs.jsx | 4 +- ui/src/pages/executions/BulkActionModule.jsx | 44 +- ui/src/pages/executions/TaskSearch.jsx | 8 +- ui/src/pages/executions/WorkflowSearch.jsx | 3 +- ui/src/pages/misc/TaskQueue.jsx | 3 +- ui/src/setupProxy.js | 2 +- ui/yarn.lock | 1018 +++++++++-------- 25 files changed, 957 insertions(+), 591 deletions(-) create mode 100644 ui/src/data/actions.js create mode 100644 ui/src/data/bulkactions.js create mode 100644 ui/src/data/common.js create mode 100644 ui/src/data/misc.js create mode 100644 ui/src/data/task.js create mode 100644 ui/src/data/workflow.js diff --git a/ui/package.json b/ui/package.json index c50764238e..e328d4a31f 100644 --- a/ui/package.json +++ b/ui/package.json @@ -11,7 +11,6 @@ "d3": "^6.2.0", "dagre-d3": "^0.6.4", "date-fns": "^2.16.1", - "fontsource-roboto": "^4.0.0", "formik": "^2.2.9", "http-proxy-middleware": "^2.0.1", "immutability-helper": "^3.1.1", diff --git a/ui/src/data/actions.js b/ui/src/data/actions.js new file mode 100644 index 0000000000..46fdf9c0f0 --- /dev/null +++ b/ui/src/data/actions.js @@ -0,0 +1,43 @@ +import { useAction } from "./common"; + +export const useRestartAction = ({ workflowId, onSuccess }) => { + return useAction(`/workflow/${workflowId}/restart`, "post", { onSuccess }); +}; + +export const useRestartLatestAction = ({ workflowId, onSuccess }) => { + return useAction( + `/workflow/${workflowId}/restart?useLatestDefinitions=true`, + "post", + { onSuccess } + ); +}; + +export const useRetryAction = ({ workflowId, onSuccess }) => { + return useAction( + `/workflow/${workflowId}/retry?resumeSubworkflowTasks=false`, + "post", + { onSuccess } + ); +}; + +export const useRetryResumeSubworkflowTasksAction = ({ + workflowId, + onSuccess, +}) => { + return useAction( + `/workflow/${workflowId}/retry?resumeSubworkflowTasks=true`, + "post", + { onSuccess } + ); +}; + +export const useTerminateAction = ({ workflowId, onSuccess }) => { + return useAction(`/workflow/${workflowId}`, "delete", { onSuccess }); +}; +export const useResumeAction = ({ workflowId, onSuccess }) => { + return useAction(`/workflow/${workflowId}/resume`, "put", { onSuccess }); +}; + +export const usePauseAction = ({ workflowId, onSuccess }) => { + return useAction(`/workflow/${workflowId}/pause`, "put", { onSuccess }); +}; diff --git a/ui/src/data/bulkactions.js b/ui/src/data/bulkactions.js new file mode 100644 index 0000000000..c8c9a6853a --- /dev/null +++ b/ui/src/data/bulkactions.js @@ -0,0 +1,27 @@ +import { useAction } from "./common"; + +export const useBulkPauseAction = ({ onSuccess }) => { + return useAction("/workflow/bulk/pause", "put", { onSuccess }); +}; + +export const useBulkResumeAction = ({ onSuccess }) => { + return useAction("/workflow/bulk/resume", "put", { onSuccess }); +}; + +export const useBulkRestartAction = ({ onSuccess }) => { + return useAction("/workflow/bulk/restart", "post", { onSuccess }); +}; + +export const useBulkRestartLatestAction = ({ onSuccess }) => { + return useAction("/workflow/bulk/restart?useLatestDefinitions=true", "post", { + onSuccess, + }); +}; + +export const useBulkRetryAction = ({ onSuccess }) => { + return useAction("/workflow/bulk/retry", "post", { onSuccess }); +}; + +export const useBulkTerminateAction = ({ onSuccess }) => { + return useAction("/workflow/bulk/terminate", "post", { onSuccess }); +}; diff --git a/ui/src/data/common.js b/ui/src/data/common.js new file mode 100644 index 0000000000..b628e4c657 --- /dev/null +++ b/ui/src/data/common.js @@ -0,0 +1,37 @@ +import _ from "lodash"; +import { useQuery, useMutation } from "react-query"; +import { useFetchContext, fetchWithContext } from "../plugins/fetch"; + +export function useFetch(path, reactQueryOptions, defaultResponse) { + const fetchContext = useFetchContext(); + return useQuery( + [fetchContext.stack, path], + () => { + if (path) { + return fetchWithContext(path, fetchContext); + } else { + return Promise.resolve(defaultResponse); + } + }, + { + enabled: fetchContext.ready, + keepPreviousData: true, + ...reactQueryOptions, + } + ); +} + +export function useAction(path, method = "post", callbacks) { + const fetchContext = useFetchContext(); + return useMutation( + (mutateParams) => + fetchWithContext(path, fetchContext, { + method, + headers: { + "Content-Type": "application/json", + }, + body: _.get(mutateParams, "body"), + }), + callbacks + ); +} diff --git a/ui/src/data/misc.js b/ui/src/data/misc.js new file mode 100644 index 0000000000..8e0975bfab --- /dev/null +++ b/ui/src/data/misc.js @@ -0,0 +1,9 @@ +import { useFetch } from "./common"; + +export const useEventHandlers = () => { + return useFetch("/event"); +}; + +export const useLogs = ({ taskId }) => { + return useFetch(`/tasks/${taskId}/log`); +}; diff --git a/ui/src/data/task.js b/ui/src/data/task.js new file mode 100644 index 0000000000..8a6c9f4912 --- /dev/null +++ b/ui/src/data/task.js @@ -0,0 +1,120 @@ +import _ from "lodash"; +import { useMemo } from "react"; +import { + useQuery, + useInfiniteQuery, + useQueryClient, + useMutation, +} from "react-query"; +import qs from "qs"; +import { useFetchContext, fetchWithContext } from "../plugins/fetch"; +import { useFetch } from "./common"; +const STALE_TIME_DROPDOWN = 600000; // 10 mins + +export function useTask(taskName, defaultTask) { + let path; + if (taskName) { + path = `/metadata/taskdefs/${taskName}`; + } + return useFetch(path, {}, defaultTask); +} + +export function useTaskSearch({ searchReady, ...searchObj }) { + const fetchContext = useFetchContext(); + const queryClient = useQueryClient(); + + const pathRoot = "/workflow/search-by-tasks?"; + const key = [fetchContext.stack, pathRoot, searchObj]; + + return { + ...useInfiniteQuery( + key, + ({ pageParam = 0 }) => { + const { rowsPerPage, sort, freeText, query } = searchObj; + + if (!searchReady) { + console.log("blank query - returning empty result."); + return Promise.resolve({ results: [] }); + } + + const path = + pathRoot + + qs.stringify({ + start: rowsPerPage * pageParam, + size: rowsPerPage, + sort: sort, + freeText: freeText, + query: query, + }); + return fetchWithContext(path, fetchContext); + }, + { + getNextPageParam: (lastPage, pages) => pages.length, + } + ), + refetch: () => { + queryClient.refetchQueries(key); + }, + }; +} + +export function useTaskQueueInfo(taskName) { + const fetchContext = useFetchContext(); + + const pollDataPath = `/tasks/queue/polldata?taskType=${taskName}`; + const sizePath = `/tasks/queue/sizes?taskType=${taskName}`; + + const { data: pollData, isFetching: pollDataFetching } = useQuery( + [fetchContext.stack, pollDataPath], + () => fetchWithContext(pollDataPath, fetchContext), + { + enabled: fetchContext.ready && !_.isEmpty(taskName), + } + ); + const { data: size, isFetching: sizeFetching } = useQuery( + [fetchContext.stack, sizePath], + () => fetchWithContext(sizePath, fetchContext), + { + enabled: fetchContext.ready && !_.isEmpty(taskName), + } + ); + + const taskQueueInfo = useMemo( + () => ({ size: _.get(size, [taskName]), pollData: pollData }), + [taskName, pollData, size] + ); + + return { + data: taskQueueInfo, + isFetching: pollDataFetching || sizeFetching, + }; +} + +export function useTaskNames() { + const { data } = useFetch(`/metadata/taskdefs`, { + staleTime: STALE_TIME_DROPDOWN, + }); + return useMemo( + () => (data ? Array.from(new Set(data.map((def) => def.name))).sort() : []), + [data] + ); +} + +export function useTaskDefs() { + return useFetch("/metadata/taskdefs"); +} + +export function useSaveTask(callbacks) { + const path = "/metadata/taskdefs"; + const fetchContext = useFetchContext(); + + return useMutation(({ body, isNew }) => { + return fetchWithContext(path, fetchContext, { + method: isNew ? "post" : "put", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(isNew ? [body] : body), // Note: application of [] is opposite of workflow + }); + }, callbacks); +} diff --git a/ui/src/data/workflow.js b/ui/src/data/workflow.js new file mode 100644 index 0000000000..3aeffe2f3d --- /dev/null +++ b/ui/src/data/workflow.js @@ -0,0 +1,137 @@ +import { useMemo } from "react"; +import { useQuery, useMutation } from "react-query"; +import qs from "qs"; +import { useFetchContext, fetchWithContext } from "../plugins/fetch"; +import { useFetch } from "./common"; + +const STALE_TIME_WORKFLOW_DEFS = 600000; // 10 mins +const STALE_TIME_SEARCH = 60000; // 1 min + +export function useWorkflowSearch(searchObj) { + const fetchContext = useFetchContext(); + const pathRoot = "/workflow/search?"; + + return useQuery( + [fetchContext.stack, pathRoot, searchObj], + () => { + const { rowsPerPage, page, sort, freeText, query } = searchObj; + const path = + pathRoot + + qs.stringify({ + start: (page - 1) * rowsPerPage, + size: rowsPerPage, + sort: sort, + freeText: freeText, + query: query, + }); + return fetchWithContext(path, fetchContext); + // staletime to ensure stable view when paginating back and forth (even if underlying results change) + }, + { + enabled: fetchContext.ready, + keepPreviousData: true, + staleTime: STALE_TIME_SEARCH, + } + ); +} + +export function useWorkflow(workflowId) { + return useFetch(`/workflow/${workflowId}`); +} + +export function useWorkflowDef(workflowName, version, defaultWorkflow) { + let path; + if (workflowName) { + path = `/metadata/workflow/${workflowName}`; + if (version) path += `?version=${version}`; + } + return useFetch(path, {}, defaultWorkflow); +} + +export function useWorkflowDefs() { + const { data, ...rest } = useFetch("/metadata/workflow", { + staleTime: STALE_TIME_WORKFLOW_DEFS, + }); + + // Filter latest versions only + const workflows = useMemo(() => { + if (data) { + const unique = new Map(); + const types = new Set(); + for (let workflowDef of data) { + if (!unique.has(workflowDef.name)) { + unique.set(workflowDef.name, workflowDef); + } else if (unique.get(workflowDef.name).version < workflowDef.version) { + unique.set(workflowDef.name, workflowDef); + } + + for (let task of workflowDef.tasks) { + types.add(task.type); + } + } + + return Array.from(unique.values()); + } + }, [data]); + + return { + data: workflows, + ...rest, + }; +} + +export function useSaveWorkflow(callbacks) { + const path = "/metadata/workflow"; + const fetchContext = useFetchContext(); + + return useMutation( + ({ body, isNew }) => + fetchWithContext(path, fetchContext, { + method: isNew ? "post" : "put", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(isNew ? body : [body]), + }), + callbacks + ); +} + +export function useWorkflowNames() { + const { data } = useWorkflowDefs(); + return useMemo(() => (data ? data.map((def) => def.name) : []), [data]); +} + +// Version numbers do not necessarily start, or run contiguously from 1. Could be arbitrary integers e.g. 52335678. +// By convention they should be monotonic (ever increasing) wrt time. +export function useWorkflowNamesAndVersions() { + const { data, ...rest } = useFetch("/metadata/workflow", { + staleTime: STALE_TIME_WORKFLOW_DEFS, + }); + + const newData = useMemo(() => { + const retval = new Map(); + if (data) { + for (let def of data) { + let arr; + if (!retval.has(def.name)) { + arr = []; + retval.set(def.name, arr); + } else { + arr = retval.get(def.name); + } + arr.push({ + version: def.version, + createTime: def.createTime, + updateTime: def.updateTime, + }); + } + + // Sort arrays in place + retval.forEach((val) => val.sort()); + } + return retval; + }, [data]); + + return { ...rest, data: newData }; +} diff --git a/ui/src/pages/definition/EventHandler.jsx b/ui/src/pages/definition/EventHandler.jsx index ea3d8e9e05..8012f36a71 100644 --- a/ui/src/pages/definition/EventHandler.jsx +++ b/ui/src/pages/definition/EventHandler.jsx @@ -1,10 +1,10 @@ import React, { useMemo } from "react"; import { useRouteMatch } from "react-router-dom"; import sharedStyles from "../styles"; -import { useFetch } from "../../utils/query"; import { makeStyles } from "@material-ui/styles"; import { Helmet } from "react-helmet"; import { ReactJson, LinearProgress, Heading } from "../../components"; +import { useEventHandlers } from "../../data/misc"; const useStyles = makeStyles(sharedStyles); @@ -13,7 +13,7 @@ export default function EventHandlerDefinition() { const match = useRouteMatch(); // TODO: Need API that returns individual event handler by name. - const { data, isFetching } = useFetch("/event"); + const { data, isFetching } = useEventHandlers(); const eventHandler = useMemo( () => data && data.find((row) => row.name === match.params.name), diff --git a/ui/src/pages/definition/SaveTaskDialog.jsx b/ui/src/pages/definition/SaveTaskDialog.jsx index 0f48fb1dff..78793ec676 100644 --- a/ui/src/pages/definition/SaveTaskDialog.jsx +++ b/ui/src/pages/definition/SaveTaskDialog.jsx @@ -4,7 +4,7 @@ import Alert from "@material-ui/lab/Alert"; import { Text, Button, LinearProgress, Pill } from "../../components"; import { DiffEditor } from "@monaco-editor/react"; import { makeStyles } from "@material-ui/styles"; -import { useSaveTask, useTaskNames } from "../../utils/query"; +import { useSaveTask, useTaskNames } from "../../data/task"; import _ from "lodash"; const useStyles = makeStyles({ diff --git a/ui/src/pages/definition/SaveWorkflowDialog.jsx b/ui/src/pages/definition/SaveWorkflowDialog.jsx index b7552181e1..e576a7052b 100644 --- a/ui/src/pages/definition/SaveWorkflowDialog.jsx +++ b/ui/src/pages/definition/SaveWorkflowDialog.jsx @@ -10,10 +10,12 @@ import Alert from "@material-ui/lab/Alert"; import { Text, Button, LinearProgress, Pill } from "../../components"; import { DiffEditor } from "@monaco-editor/react"; import { makeStyles } from "@material-ui/styles"; -import { useSaveWorkflow } from "../../utils/query"; +import { + useSaveWorkflow, + useWorkflowNamesAndVersions, +} from "../../data/workflow"; import _ from "lodash"; import { useEffect } from "react"; -import { useWorkflowNamesAndVersions } from "../../utils/query"; const useStyles = makeStyles({ rightButtons: { diff --git a/ui/src/pages/definition/TaskDefinition.jsx b/ui/src/pages/definition/TaskDefinition.jsx index 2326286c3e..df01f226b8 100644 --- a/ui/src/pages/definition/TaskDefinition.jsx +++ b/ui/src/pages/definition/TaskDefinition.jsx @@ -10,7 +10,7 @@ import { configureMonaco } from "../../schema/task"; import { NEW_TASK_TEMPLATE } from "../../schema/task"; import ResetConfirmationDialog from "./ResetConfirmationDialog"; import SaveTaskDialog from "./SaveTaskDialog"; -import { useTask } from "../../utils/query"; +import { useTask } from "../../data/task"; import { usePushHistory } from "../../components/NavLink"; const useStyles = makeStyles({ diff --git a/ui/src/pages/definition/WorkflowDefinition.jsx b/ui/src/pages/definition/WorkflowDefinition.jsx index b2aaf57187..7e3812bda3 100644 --- a/ui/src/pages/definition/WorkflowDefinition.jsx +++ b/ui/src/pages/definition/WorkflowDefinition.jsx @@ -7,7 +7,10 @@ import { makeStyles } from "@material-ui/styles"; import { Helmet } from "react-helmet"; import _ from "lodash"; import Editor from "@monaco-editor/react"; -import { useWorkflow, useWorkflowNamesAndVersions } from "../../utils/query"; +import { + useWorkflowDef, + useWorkflowNamesAndVersions, +} from "../../data/workflow"; import WorkflowDAG from "../../components/diagram/WorkflowDAG"; import WorkflowGraph from "../../components/diagram/WorkflowGraph"; import ResetConfirmationDialog from "./ResetConfirmationDialog"; @@ -119,7 +122,7 @@ export default function Workflow() { data: workflowDef, isFetching, refetch: refetchWorkflow, - } = useWorkflow(workflowName, workflowVersion, NEW_WORKFLOW_TEMPLATE); + } = useWorkflowDef(workflowName, workflowVersion, NEW_WORKFLOW_TEMPLATE); const workflowJson = useMemo( () => (workflowDef ? JSON.stringify(workflowDef, null, 2) : ""), diff --git a/ui/src/pages/definitions/EventHandler.jsx b/ui/src/pages/definitions/EventHandler.jsx index 733d3b3340..275166bf12 100644 --- a/ui/src/pages/definitions/EventHandler.jsx +++ b/ui/src/pages/definitions/EventHandler.jsx @@ -1,10 +1,10 @@ import React from "react"; import { NavLink, DataTable } from "../../components"; import { makeStyles } from "@material-ui/styles"; -import { useFetch } from "../../utils/query"; import Header from "./Header"; import sharedStyles from "../styles"; import { Helmet } from "react-helmet"; +import { useEventHandlers } from "../../data/misc"; const useStyles = makeStyles(sharedStyles); @@ -23,10 +23,10 @@ const columns = [ }, ]; -export default function TaskDefinitions() { +export default function EventHandlers() { const classes = useStyles(); - const { data: eventHandlers, isFetching } = useFetch("/event"); + const { data: eventHandlers, isFetching } = useEventHandlers(); return (

diff --git a/ui/src/pages/definitions/Task.jsx b/ui/src/pages/definitions/Task.jsx index 12e2bcabc4..d543dbe950 100644 --- a/ui/src/pages/definitions/Task.jsx +++ b/ui/src/pages/definitions/Task.jsx @@ -1,11 +1,11 @@ import React from "react"; import { NavLink, DataTable, Button } from "../../components"; import { makeStyles } from "@material-ui/styles"; -import { useFetch } from "../../utils/query"; import Header from "./Header"; import sharedStyles from "../styles"; import { Helmet } from "react-helmet"; import AddIcon from "@material-ui/icons/Add"; +import { useTaskDefs } from "../../data/task"; const useStyles = makeStyles(sharedStyles); @@ -47,8 +47,7 @@ const columns = [ export default function TaskDefinitions() { const classes = useStyles(); - - const { data: tasks, isFetching } = useFetch("/metadata/taskdefs"); + const { data: tasks, isFetching } = useTaskDefs(); return (
diff --git a/ui/src/pages/definitions/Workflow.jsx b/ui/src/pages/definitions/Workflow.jsx index 01d875cf40..cd4d5bfad1 100644 --- a/ui/src/pages/definitions/Workflow.jsx +++ b/ui/src/pages/definitions/Workflow.jsx @@ -3,7 +3,7 @@ import { NavLink, DataTable, Button } from "../../components"; import { makeStyles } from "@material-ui/styles"; import _ from "lodash"; import { useQueryState } from "react-router-use-location-state"; -import { useWorkflowDefs } from "../../utils/query"; +import { useWorkflowDefs } from "../../data/workflow"; import Header from "./Header"; import sharedStyles from "../styles"; import { Helmet } from "react-helmet"; diff --git a/ui/src/pages/execution/ActionModule.jsx b/ui/src/pages/execution/ActionModule.jsx index 01debf99f6..8de1ee27b0 100644 --- a/ui/src/pages/execution/ActionModule.jsx +++ b/ui/src/pages/execution/ActionModule.jsx @@ -10,7 +10,15 @@ import ReplayIcon from "@material-ui/icons/Replay"; import ResumeIcon from "@material-ui/icons/PlayArrow"; import FlareIcon from "@material-ui/icons/Flare"; -import { useAction } from "../../utils/query"; +import { + useRestartAction, + useRestartLatestAction, + useResumeAction, + useRetryResumeSubworkflowTasksAction, + useRetryAction, + useTerminateAction, + usePauseAction, +} from "../../data/actions"; const useStyles = makeStyles({ menuIcon: { @@ -22,37 +30,18 @@ export default function ActionModule({ execution, triggerReload }) { const classes = useStyles(); const { workflowId, workflowDefinition } = execution; - const restartAction = useAction(`/workflow/${workflowId}/restart`, "post", { - onSuccess, - }); - const restartLatestAction = useAction( - `/workflow/${workflowId}/restart?useLatestDefinitions=true`, - "post", - { onSuccess } - ); - const retryAction = useAction( - `/workflow/${workflowId}/retry?resumeSubworkflowTasks=false`, - "post", - { onSuccess } - ); - const retryResumeSubworkflowTasksAction = useAction( - `/workflow/${workflowId}/retry?resumeSubworkflowTasks=true`, - "post", - { onSuccess } - ); - const terminateAction = useAction(`/workflow/${workflowId}`, "delete", { - onSuccess, - }); - const resumeAction = useAction(`/workflow/${workflowId}/resume`, "put", { - onSuccess, - }); - const pauseAction = useAction(`/workflow/${workflowId}/pause`, "put", { - onSuccess, - }); + const restartAction = useRestartAction({ workflowId, onSuccess }); + const restartLatestAction = useRestartLatestAction({ workflowId, onSuccess }); + const retryAction = useRetryAction({ workflowId, onSuccess }); + const retryResumeSubworkflowTasksAction = + useRetryResumeSubworkflowTasksAction({ workflowId, onSuccess }); + const terminateAction = useTerminateAction({ workflowId, onSuccess }); + const resumeAction = useResumeAction({ workflowId, onSuccess }); + const pauseAction = usePauseAction({ workflowId, onSuccess }); const { restartable } = workflowDefinition; - function onSuccess(data, variables, context) { + function onSuccess() { triggerReload(); } diff --git a/ui/src/pages/execution/Execution.jsx b/ui/src/pages/execution/Execution.jsx index 8efa345731..1fac590761 100644 --- a/ui/src/pages/execution/Execution.jsx +++ b/ui/src/pages/execution/Execution.jsx @@ -25,10 +25,10 @@ import FullscreenExitIcon from "@material-ui/icons/FullscreenExit"; import RightPanel from "./RightPanel"; import WorkflowDAG from "../../components/diagram/WorkflowDAG"; import StatusBadge from "../../components/StatusBadge"; -import { useFetch } from "../../utils/query"; import { Helmet } from "react-helmet"; import sharedStyles from "../styles"; import rison from "rison"; +import { useWorkflow } from "../../data/workflow"; const maxWindowWidth = window.innerWidth; const INIT_DRAWER_WIDTH = 650; @@ -119,8 +119,12 @@ const useStyles = makeStyles({ export default function Execution() { const match = useRouteMatch(); - const url = `/workflow/${match.params.id}`; - const { data: execution, isFetching, refetch: refresh } = useFetch(url); + + const { + data: execution, + isFetching, + refetch: refresh, + } = useWorkflow(match.params.id); const [isFullWidth, setIsFullWidth] = useState(false); const [isResizing, setIsResizing] = useState(false); diff --git a/ui/src/pages/execution/RightPanel.jsx b/ui/src/pages/execution/RightPanel.jsx index eb5be8bbb4..b952e0cec6 100644 --- a/ui/src/pages/execution/RightPanel.jsx +++ b/ui/src/pages/execution/RightPanel.jsx @@ -43,7 +43,6 @@ export default function RightPanel({ selectedTask, dag, onTaskChange }) { if (node.taskResults.length > 1) { retryOptions = node.taskResults; } - console.log(retryOptions); if (taskId) { taskResult = node.taskResults.find((task) => task.taskId === taskId); diff --git a/ui/src/pages/execution/TaskLogs.jsx b/ui/src/pages/execution/TaskLogs.jsx index 669ec57461..ecf8178246 100644 --- a/ui/src/pages/execution/TaskLogs.jsx +++ b/ui/src/pages/execution/TaskLogs.jsx @@ -1,10 +1,10 @@ import React from "react"; -import { useFetch } from "../../utils/query"; +import { useLogs } from "../../data/misc"; import { DataTable, Text, LinearProgress } from "../../components"; export default function TaskLogs({ task }) { const { taskId } = task; - const { data: log, isFetching } = useFetch(`/tasks/${taskId}/log`); + const { data: log, isFetching } = useLogs({ taskId }); if (isFetching) { return ; diff --git a/ui/src/pages/executions/BulkActionModule.jsx b/ui/src/pages/executions/BulkActionModule.jsx index 4fc44ed980..16791ac647 100644 --- a/ui/src/pages/executions/BulkActionModule.jsx +++ b/ui/src/pages/executions/BulkActionModule.jsx @@ -6,7 +6,6 @@ import { DialogTitle, } from "@material-ui/core"; import { makeStyles } from "@material-ui/styles"; -import { useAction } from "../../utils/query"; import { DataTable, DropdownButton, @@ -14,6 +13,13 @@ import { PrimaryButton, Heading, } from "../../components"; +import { + useBulkRestartAction, + useBulkRestartLatestAction, + useBulkResumeAction, + useBulkTerminateAction, + useBulkPauseAction, +} from "../../data/bulkactions"; const useStyles = makeStyles({ actionBar: { @@ -33,32 +39,20 @@ export default function BulkActionModule({ selectedRows }) { const [results, setResults] = useState(); const classes = useStyles(); - const { mutate: pauseAction, isLoading: pauseLoading } = useAction( - `/workflow/bulk/pause`, - "put", - { onSuccess } - ); - const { mutate: resumeAction, isLoading: resumeLoading } = useAction( - `/workflow/bulk/resume`, - "put", - { onSuccess } - ); + const { mutate: pauseAction, isLoading: pauseLoading } = useBulkPauseAction({ + onSuccess, + }); + const { mutate: resumeAction, isLoading: resumeLoading } = + useBulkResumeAction({ onSuccess }); const { mutate: restartCurrentAction, isLoading: restartCurrentLoading } = - useAction(`/workflow/bulk/restart`, "post", { onSuccess }); + useBulkRestartAction({ onSuccess }); const { mutate: restartLatestAction, isLoading: restartLatestLoading } = - useAction(`/workflow/bulk/restart?useLatestDefinitions=true`, "post", { - onSuccess, - }); - const { mutate: retryAction, isLoading: retryLoading } = useAction( - `/workflow/bulk/retry`, - "post", - { onSuccess } - ); - const { mutate: terminateAction, isLoading: terminateLoading } = useAction( - `/workflow/bulk/terminate`, - "post", - { onSuccess } - ); + useBulkRestartLatestAction({ onSuccess }); + const { mutate: retryAction, isLoading: retryLoading } = useBulkResumeAction({ + onSuccess, + }); + const { mutate: terminateAction, isLoading: terminateLoading } = + useBulkTerminateAction({ onSuccess }); const isLoading = pauseLoading || diff --git a/ui/src/pages/executions/TaskSearch.jsx b/ui/src/pages/executions/TaskSearch.jsx index b7b4f637a6..4e423aafcd 100644 --- a/ui/src/pages/executions/TaskSearch.jsx +++ b/ui/src/pages/executions/TaskSearch.jsx @@ -9,12 +9,8 @@ import { Input, } from "../../components"; -import { - useTaskSearch, - useTaskNames, - useWorkflowNames, -} from "../../utils/query"; - +import { useTaskSearch, useTaskNames } from "../../data/task"; +import { useWorkflowNames } from "../../data/workflow"; import DateRangePicker from "../../components/DateRangePicker"; import { useQueryState } from "react-router-use-location-state"; import SearchTabs from "./SearchTabs"; diff --git a/ui/src/pages/executions/WorkflowSearch.jsx b/ui/src/pages/executions/WorkflowSearch.jsx index 4ce1fd3fb3..f89c25edd3 100644 --- a/ui/src/pages/executions/WorkflowSearch.jsx +++ b/ui/src/pages/executions/WorkflowSearch.jsx @@ -15,7 +15,7 @@ import SearchTabs from "./SearchTabs"; import ResultsTable from "./ResultsTable"; import DateRangePicker from "../../components/DateRangePicker"; import { DEFAULT_ROWS_PER_PAGE } from "../../components/DataTable"; -import { useWorkflowSearch, useWorkflowNames } from "../../utils/query"; +import { useWorkflowSearch, useWorkflowNames } from "../../data/workflow"; import { makeStyles } from "@material-ui/styles"; import clsx from "clsx"; @@ -48,6 +48,7 @@ export default function WorkflowPanel() { ); const [sort, setSort] = useQueryState("sort", DEFAULT_SORT); const [queryFT, setQueryFT] = useState(buildQuery); + const { data: resultObj, error, diff --git a/ui/src/pages/misc/TaskQueue.jsx b/ui/src/pages/misc/TaskQueue.jsx index a8a9f2e538..5bf770884d 100644 --- a/ui/src/pages/misc/TaskQueue.jsx +++ b/ui/src/pages/misc/TaskQueue.jsx @@ -1,10 +1,9 @@ import React from "react"; import { useRouteMatch } from "react-router-dom"; import sharedStyles from "../styles"; -import { useTaskQueueInfo } from "../../utils/query"; +import { useTaskQueueInfo, useTaskNames } from "../../data/task"; import { makeStyles } from "@material-ui/styles"; import { Helmet } from "react-helmet"; -import { useTaskNames } from "../../utils/query"; import { usePushHistory } from "../../components/NavLink"; import { diff --git a/ui/src/setupProxy.js b/ui/src/setupProxy.js index 6ae5e79a43..a7c1ff10c1 100644 --- a/ui/src/setupProxy.js +++ b/ui/src/setupProxy.js @@ -6,7 +6,7 @@ module.exports = function (app) { "/api", createProxyMiddleware({ target: target, - pathRewrite: { '^/api/': '/'}, + pathRewrite: { "^/api/": "/" }, changeOrigin: true, }) ); diff --git a/ui/yarn.lock b/ui/yarn.lock index bcb45f5325..c127f74018 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@ampproject/remapping@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" + integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== + dependencies: + "@jridgewell/trace-mapping" "^0.3.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" @@ -23,10 +30,10 @@ dependencies: "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" - integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" + integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== "@babel/core@7.12.3": version "7.12.3" @@ -51,32 +58,32 @@ source-map "^0.5.0" "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.5", "@babel/core@^7.8.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.7.tgz#db990f931f6d40cb9b87a0dc7d2adc749f1dcbcf" - integrity sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA== + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" + integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== dependencies: + "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.7" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.16.7" - "@babel/parser" "^7.16.7" + "@babel/generator" "^7.17.7" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-module-transforms" "^7.17.7" + "@babel/helpers" "^7.17.8" + "@babel/parser" "^7.17.8" "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.1.2" semver "^6.3.0" - source-map "^0.5.0" -"@babel/generator@^7.12.1", "@babel/generator@^7.16.7", "@babel/generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" - integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== +"@babel/generator@^7.12.1", "@babel/generator@^7.17.3", "@babel/generator@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== dependencies: - "@babel/types" "^7.16.8" + "@babel/types" "^7.17.0" jsesc "^2.5.1" source-map "^0.5.0" @@ -95,20 +102,20 @@ "@babel/helper-explode-assignable-expression" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" + integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== dependencies: - "@babel/compat-data" "^7.16.4" + "@babel/compat-data" "^7.17.7" "@babel/helper-validator-option" "^7.16.7" browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz#9c5b34b53a01f2097daf10678d65135c1b9f84ba" - integrity sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw== +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6": + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" + integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-environment-visitor" "^7.16.7" @@ -119,17 +126,17 @@ "@babel/helper-split-export-declaration" "^7.16.7" "@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" - integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" + integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^4.7.1" + regexpu-core "^5.0.1" -"@babel/helper-define-polyfill-provider@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971" - integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg== +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -178,11 +185,11 @@ "@babel/types" "^7.16.7" "@babel/helper-member-expression-to-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" - integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" + integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.17.0" "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.16.7": version "7.16.7" @@ -191,19 +198,19 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" + integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== dependencies: "@babel/helper-environment-visitor" "^7.16.7" "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" "@babel/helper-split-export-declaration" "^7.16.7" "@babel/helper-validator-identifier" "^7.16.7" "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" @@ -237,12 +244,12 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== +"@babel/helper-simple-access@^7.17.7": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" + integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.17.0" "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" @@ -278,28 +285,28 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helpers@^7.12.1", "@babel/helpers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" - integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== +"@babel/helpers@^7.12.1", "@babel/helpers@^7.17.8": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" + integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== dependencies: "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/traverse" "^7.17.3" + "@babel/types" "^7.17.0" "@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" - integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== dependencies: "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.16.8", "@babel/parser@^7.7.0": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.8.tgz#61c243a3875f7d0b0962b0543a33ece6ff2f1f17" - integrity sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8", "@babel/parser@^7.7.0": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" + integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" @@ -335,22 +342,24 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" - integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" + integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.6" "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.7.tgz#922907d2e3e327f5b07d2246bcfc0bd438f360d2" - integrity sha512-DoEpnuXK14XV9btI1k8tzNGCutMclpj4yru8aXKoHlVmbO1s+2A+g2+h4JhcjrxkFJqzbymnLG6j/niOf3iFXQ== + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz#4f0444e896bee85d35cf714a006fc5418f87ff00" + integrity sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.6" "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/plugin-syntax-decorators" "^7.17.0" + charcodes "^0.2.0" "@babel/plugin-proposal-dynamic-import@^7.16.7": version "7.16.7" @@ -401,11 +410,11 @@ "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-proposal-object-rest-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" - integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" + integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== dependencies: - "@babel/compat-data" "^7.16.4" + "@babel/compat-data" "^7.17.0" "@babel/helper-compilation-targets" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" @@ -428,12 +437,12 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz#e418e3aa6f86edd6d327ce84eff188e479f571e0" - integrity sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw== +"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.10" "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-proposal-private-property-in-object@^7.16.7": @@ -482,10 +491,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.7.tgz#f66a0199f16de7c1ef5192160ccf5d069739e3d3" - integrity sha512-vQ+PxL+srA7g6Rx6I1e15m55gftknl2X8GCUW1JTlkTaXZLJOS0UcaY0eK9jYT7IYf4awn6qwyghVHLDz1WyMw== +"@babel/plugin-syntax-decorators@^7.17.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d" + integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A== dependencies: "@babel/helper-plugin-utils" "^7.16.7" @@ -646,9 +655,9 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-destructuring@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" - integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" + integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" @@ -723,22 +732,22 @@ babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" - integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz#d86b217c8e45bb5f2dbc11eefc8eab62cf980d19" + integrity sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA== dependencies: - "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" - integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" + integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== dependencies: "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-module-transforms" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" @@ -788,9 +797,9 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.7.tgz#19e9e4c2df2f6c3e6b3aea11778297d81db8df62" - integrity sha512-lF+cfsyTgwWkcw715J88JhMYJ5GpysYNLhLP1PkvkhTRN7B3e74R/1KsDxFxhRpSn0UUD3IWM4GvdBR2PEbbQQ== + version "7.17.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz#6cc273c2f612a6a50cb657e63ee1303e5e68d10a" + integrity sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw== dependencies: "@babel/helper-plugin-utils" "^7.16.7" @@ -809,15 +818,15 @@ "@babel/plugin-transform-react-jsx" "^7.16.7" "@babel/plugin-transform-react-jsx@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4" - integrity sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag== + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" + integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== dependencies: "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-module-imports" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-jsx" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/types" "^7.17.0" "@babel/plugin-transform-react-pure-annotations@^7.16.7": version "7.16.7" @@ -842,9 +851,9 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-runtime@^7.16.4": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.8.tgz#3339368701103edae708f0fba9e4bfb70a3e5872" - integrity sha512-6Kg2XHPFnIarNweZxmzbgYnnWsXxkx9WQUVk2sksBRL80lBC1RAQV3wQagWxdCHiYHqPN+oenwNIuttlYgIbQQ== + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" + integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== dependencies: "@babel/helper-module-imports" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" @@ -914,9 +923,9 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.8.4": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.8.tgz#e682fa0bcd1cf49621d64a8956318ddfb9a05af9" - integrity sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg== + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== dependencies: "@babel/compat-data" "^7.16.8" "@babel/helper-compilation-targets" "^7.16.7" @@ -936,7 +945,7 @@ "@babel/plugin-proposal-object-rest-spread" "^7.16.7" "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" "@babel/plugin-proposal-private-property-in-object" "^7.16.7" "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" @@ -1026,24 +1035,17 @@ "@babel/plugin-transform-typescript" "^7.16.7" "@babel/runtime-corejs3@^7.10.2": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz#ea533d96eda6fdc76b1812248e9fbd0c11d4a1a7" - integrity sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg== + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz#d7dd49fb812f29c61c59126da3792d8740d4e284" + integrity sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ== dependencies: core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" - integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.15.4": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.7.tgz#a5f3328dc41ff39d803f311cfe17703418cf9825" - integrity sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": + version "7.17.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" + integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== dependencies: regenerator-runtime "^0.13.4" @@ -1056,26 +1058,26 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.8.tgz#bab2f2b09a5fe8a8d9cad22cbfe3ba1d126fef9c" - integrity sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": + version "7.17.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" + integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== dependencies: "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" + "@babel/generator" "^7.17.3" "@babel/helper-environment-visitor" "^7.16.7" "@babel/helper-function-name" "^7.16.7" "@babel/helper-hoist-variables" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.8" - "@babel/types" "^7.16.8" + "@babel/parser" "^7.17.3" + "@babel/types" "^7.17.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" - integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" + integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== dependencies: "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" @@ -1153,9 +1155,9 @@ strip-json-comments "^3.1.1" "@gar/promisify@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" - integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== "@hapi/address@2.x.x": version "2.1.4" @@ -1409,6 +1411,24 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jridgewell/resolve-uri@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" + integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" + integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== + +"@jridgewell/trace-mapping@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" + integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@material-ui/core@^4.12.3": version "4.12.3" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.3.tgz#80d665caf0f1f034e52355c5450c0e38b099d3ca" @@ -1492,9 +1512,9 @@ react-is "^16.8.0 || ^17.0.0" "@monaco-editor/loader@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.2.0.tgz#373fad69973384624e3d9b60eefd786461a76acd" - integrity sha512-cJVCG/T/KxXgzYnjKqyAgsKDbH9mGLjcXxN6AmwumBwa2rVFkwvGcUj1RJtD0ko4XqLqJxwqsN/Z/KURB5f1OQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.3.0.tgz#659fbaf1d612ea67b2a0519a18612d1c4813e444" + integrity sha512-N3mGq1ktC3zh7WUx3NGO+PSDdNq9Vspk/41rEmRdrCqV9vNbBTRzAOplmUpNQsi+hmTs++ERMBobMERb8Kb+3g== dependencies: state-local "^1.0.6" @@ -1528,9 +1548,9 @@ fastq "^1.6.0" "@npmcli/fs@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.0.tgz#bec1d1b89c170d40e1b73ad6c943b0b75e7d2951" - integrity sha512-VhP1qZLXcrXRIaPoqb4YA55JQxLNF3jNR4T55IdOJa3+IFJKNYHtPvtXx8slmeMavj37vCzCfrqQM1vWLsYKLA== + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" semver "^7.3.5" @@ -1589,9 +1609,9 @@ integrity sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw== "@sindresorhus/is@^4.0.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.1.tgz#b88b5724283db80b507cd612caee9a1947412a20" - integrity sha512-BrzrgtaqEre0qfvI8sMTaEvx+bayuhPmfe2rfeUGPPHYr/PLxCOqkOe4TQTDPb+qcqgNcsAtXV/Ew74mcDIE8w== + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@sinonjs/commons@^1.7.0": version "1.8.3" @@ -1726,9 +1746,9 @@ defer-to-connect "^2.0.0" "@testing-library/dom@*", "@testing-library/dom@^8.2.0": - version "8.11.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.11.1.tgz#03fa2684aa09ade589b460db46b4c7be9fc69753" - integrity sha512-3KQDyx9r0RKYailW2MiYrSSKEfH0GTkI51UGEvJenvcoDoeRYs0PZpi2SXqtnMClQvCqdtTTpOfFETDTVADpAg== + version "8.11.4" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.11.4.tgz#dc94d830b862e7a20686b0379eefd931baf0445b" + integrity sha512-7vZ6ZoBEbr6bfEM89W1nzl0vHbuI0g0kRrI0hwSXH3epnuqGO3KulFLQCKfmmW+60t7e4sevAkJPASSMmnNCRw== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -1792,9 +1812,9 @@ integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.18" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" - integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + version "7.1.19" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1848,9 +1868,9 @@ "@types/json-schema" "*" "@types/estree@*": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== "@types/estree@0.0.39": version "0.0.39" @@ -1887,7 +1907,7 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== -"@types/http-proxy@^1.17.5": +"@types/http-proxy@^1.17.8": version "1.17.8" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.8.tgz#968c66903e7e42b483608030ee85800f22d03f55" integrity sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA== @@ -1922,9 +1942,9 @@ "@types/istanbul-lib-report" "*" "@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + version "7.0.10" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.10.tgz#9b05b7896166cd00e9cbd59864853abf65d9ac23" + integrity sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A== "@types/json5@^0.0.29": version "0.0.29" @@ -1932,16 +1952,16 @@ integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= "@types/keyv@*": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.3.tgz#1c9aae32872ec1f20dcdaee89a9f3ba88f465e41" - integrity sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg== + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" "@types/lodash@^4.14.175": - version "4.14.179" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.179.tgz#490ec3288088c91295780237d2497a3aa9dfb5c5" - integrity sha512-uwc1x90yCKqGcIOAT6DwOSuxnrAbpkdPsUOZtwrXb4D/6wZs+6qG7QnIawDuZWg0sWpxl+ltIKCaLoMlna678w== + version "4.14.180" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.180.tgz#4ab7c9ddfc92ec4a887886483bc14c79fb380670" + integrity sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g== "@types/minimatch@*": version "3.0.5" @@ -1949,9 +1969,9 @@ integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/node@*": - version "17.0.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b" - integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg== + version "17.0.23" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" + integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -1964,9 +1984,9 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^2.0.0": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf" - integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w== + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" + integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== "@types/prop-types@*": version "15.7.4" @@ -1979,9 +1999,9 @@ integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== "@types/react-dom@*": - version "17.0.11" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.11.tgz#e1eadc3c5e86bdb5f7684e00274ae228e7bcc466" - integrity sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q== + version "17.0.14" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.14.tgz#c8f917156b652ddf807711f5becbd2ab018dea9f" + integrity sha512-H03xwEP1oXmSfl3iobtmQ/2dHF5aBHr8aUMwyGZya6OW45G+xtdzmq6HkncefiBt5JU8DVyaWl/nWZbjZCnzAQ== dependencies: "@types/react" "*" @@ -1993,9 +2013,9 @@ "@types/react" "*" "@types/react@*": - version "17.0.38" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" - integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ== + version "17.0.42" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.42.tgz#8242b9219bf8a911c47f248e327206fea3f4ee5a" + integrity sha512-nuab3x3CpJ7VFeNA+3HTUuEkvClYHXqWtWd7Ud6AZYW7Z3NH9WKtgU+tFB0ZLcHq+niB/HnzLcaZPqMJ95+k5Q== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2109,9 +2129,9 @@ source-map "^0.6.0" "@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^13.0.0": version "13.0.12" @@ -2564,13 +2584,13 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + mime-types "~2.1.34" + negotiator "0.6.3" acorn-globals@^6.0.0: version "6.0.0" @@ -2600,7 +2620,7 @@ acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4: +acorn@^8.2.4, acorn@^8.5.0: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== @@ -2654,9 +2674,9 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" - integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2711,9 +2731,9 @@ ansi-regex@^3.0.0: integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-regex@^4.0.0, ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" @@ -3016,9 +3036,9 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axe-core@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.3.5.tgz#78d6911ba317a8262bfee292aeafcc1e04b49cc5" - integrity sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA== + version "4.4.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" + integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw== axobject-query@^2.2.0: version "2.2.0" @@ -3112,38 +3132,39 @@ babel-plugin-named-asset-import@^0.3.7: integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz#407082d0d355ba565af24126fb6cb8e9115251fd" - integrity sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA== + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.0.tgz#f81371be3fe499d39e074e272a1ef86533f3d268" - integrity sha512-Hcrgnmkf+4JTj73GbK3bBhlVPiLL47owUAnoJIf69Hakl3q+KfodbDXiZWGMM7iqCZTxCG3Z2VRfPNYES4rXqQ== + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.0" - core-js-compat "^3.20.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be" - integrity sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg== + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" "babel-plugin-styled-components@>= 1.12.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.2.tgz#0fac11402dc9db73698b55847ab1dc73f5197c54" - integrity sha512-7eG5NE8rChnNTDxa6LQfynwgHTVOYYaHJbUYSlOhk8QBXIQiMBKq4gyfHBBKPrxUcVBXVJL61ihduCpCQbuNbw== + version "2.0.6" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.6.tgz#6f76c7f7224b7af7edc24a4910351948c691fc90" + integrity sha512-Sk+7o/oa2HfHv3Eh8sxoz75/fFvEdHsXV4grdeHufX0nauCmymlnN0rGhIvfpMQSJMvGutJ85gvCGea4iqmDpg== dependencies: "@babel/helper-annotate-as-pure" "^7.16.0" "@babel/helper-module-imports" "^7.16.0" babel-plugin-syntax-jsx "^6.18.0" lodash "^4.17.11" + picomatch "^2.3.0" babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" @@ -3325,20 +3346,20 @@ bn.js@^5.0.0, bn.js@^5.1.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== -body-parser@1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" - integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== +body-parser@1.19.2: + version "1.19.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" + integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== dependencies: - bytes "3.1.1" + bytes "3.1.2" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" http-errors "1.8.1" iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.9.6" - raw-body "2.4.2" + qs "6.9.7" + raw-body "2.4.3" type-is "~1.6.18" bonjour@^3.5.0: @@ -3490,14 +3511,14 @@ browserslist@4.14.2: node-releases "^1.1.61" browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.17.5, browserslist@^4.19.1, browserslist@^4.6.2, browserslist@^4.6.4: - version "4.19.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + version "4.20.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" + integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" + caniuse-lite "^1.0.30001317" + electron-to-chromium "^1.4.84" escalade "^3.1.1" - node-releases "^2.0.1" + node-releases "^2.0.2" picocolors "^1.0.0" bser@2.1.1: @@ -3559,10 +3580,10 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -bytes@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a" - integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== cac@^3.0.3: version "3.0.4" @@ -3733,10 +3754,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001286: - version "1.0.30001299" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz#d753bf6444ed401eb503cbbe17aa3e1451b5a68c" - integrity sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001317: + version "1.0.30001319" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz#eb4da4eb3ecdd409f7ba1907820061d56096e88f" + integrity sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw== capture-exit@^2.0.0: version "2.0.0" @@ -3783,7 +3804,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3796,6 +3817,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +charcodes@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" + integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3806,7 +3832,7 @@ check-types@^11.1.1: resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== -"chokidar@>=3.0.0 <4.0.0": +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.4.1: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -3840,21 +3866,6 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.0.0, chokidar@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -4176,10 +4187,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== +cookie@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== copy-concurrently@^1.0.0: version "1.0.5" @@ -4198,18 +4209,18 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.20.0, core-js-compat@^3.20.2: - version "3.20.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.2.tgz#d1ff6936c7330959b46b2e08b122a8b14e26140b" - integrity sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg== +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" + integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== dependencies: browserslist "^4.19.1" semver "7.0.0" core-js-pure@^3.20.2: - version "3.20.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.20.2.tgz#5d263565f0e34ceeeccdc4422fae3e84ca6b8c0f" - integrity sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg== + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" + integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== core-js@^2.4.0: version "2.6.12" @@ -4217,9 +4228,9 @@ core-js@^2.4.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.6.5: - version "3.20.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.2.tgz#46468d8601eafc8b266bd2dd6bf9dee622779581" - integrity sha512-nuqhq11DcOAbFBV4zCbKeGbKQsUDRqTX0oqx7AttUBuqe3h20ixsE039QHelbL6P4h+9kytVqyEtyZ6gsiwEYw== + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94" + integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig== core-util-is@1.0.2: version "1.0.2" @@ -4613,14 +4624,14 @@ cssstyle@^2.3.0: cssom "~0.3.6" csstype@^2.5.2: - version "2.6.19" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa" - integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ== + version "2.6.20" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" + integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== csstype@^3.0.2: - version "3.0.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" - integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== + version "3.0.11" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" + integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== cyclist@^1.0.1: version "1.0.1" @@ -5191,13 +5202,13 @@ debug@3.2.6: ms "^2.1.1" debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: +debug@^3.1.1, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -5442,9 +5453,9 @@ dom-accessibility-api@^0.3.0: integrity sha512-PzwHEmsRP3IGY4gv/Ug+rMeaTIyTJvadCb+ujYXYeIylbHJezIyNToe8KfEgHTCEYyC+/bUghYOGg8yMGlZ6vA== dom-accessibility-api@^0.5.9: - version "0.5.10" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.10.tgz#caa6d08f60388d0bb4539dd75fe458a9a1d0014c" - integrity sha512-Xu9mD0UjrJisTmv7lmVSDMagQcU9R5hwAbxsaAE/35XPnPLJobbuREfV/rraiSaEj/UOvgrzQs66zyTWTlyd+g== + version "0.5.13" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.13.tgz#102ee5f25eacce09bdf1cfa5a298f86da473be4b" + integrity sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw== dom-converter@^0.2.0: version "0.2.0" @@ -5501,9 +5512,9 @@ domexception@^2.0.1: webidl-conversions "^5.0.0" domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" - integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" @@ -5598,10 +5609,10 @@ ejs@^3.0.1: dependencies: jake "^10.6.1" -electron-to-chromium@^1.3.564, electron-to-chromium@^1.4.17: - version "1.4.46" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz#c88a6fedc766589826db0481602a888864ade1ca" - integrity sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ== +electron-to-chromium@^1.3.564, electron-to-chromium@^1.4.84: + version "1.4.92" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.92.tgz#88996e9aceb3a500710fd439abfa89b6cc1ac56c" + integrity sha512-YAVbvQIcDE/IJ/vzDMjD484/hsRbFPW2qXJPaYTfOhtligmfYEYOep+5QojpaEU9kq6bMvNeC2aG7arYvTHYsA== elliptic@^6.5.3: version "6.5.4" @@ -5694,9 +5705,9 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" error-stack-parser@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + version "2.0.7" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz#b0c6e2ce27d0495cf78ad98715e0cad1219abb57" + integrity sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA== dependencies: stackframe "^1.1.1" @@ -5736,15 +5747,15 @@ es-to-primitive@^1.2.1: is-symbol "^1.0.2" es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + version "0.10.59" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.59.tgz#71038939730eb6f4f165f1421308fb60be363bc6" + integrity sha512-cOgyhW0tIJyQY1Kfw6Kr0viu9ZlUctVchRMZ7R0HiH3dxTSp5zJDLecwxUqPUrGKMsgBI1wd1FL+d9Jxfi4cLw== dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" -es6-iterator@2.0.3, es6-iterator@~2.0.3: +es6-iterator@2.0.3, es6-iterator@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -5753,7 +5764,7 @@ es6-iterator@2.0.3, es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-symbol@^3.1.1, es6-symbol@~3.1.3: +es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== @@ -5814,9 +5825,9 @@ eslint-import-resolver-node@^0.3.6: resolve "^1.20.0" eslint-module-utils@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz#1d0aa455dcf41052339b63cada8ab5fd57577129" - integrity sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg== + version "2.7.3" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== dependencies: debug "^3.2.7" find-up "^2.1.0" @@ -5879,21 +5890,21 @@ eslint-plugin-react-hooks@^4.2.0: integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA== eslint-plugin-react@^7.21.5: - version "7.28.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz#8f3ff450677571a659ce76efc6d80b6a525adbdf" - integrity sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw== + version "7.29.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" + integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== dependencies: array-includes "^3.1.4" array.prototype.flatmap "^1.2.5" doctrine "^2.1.0" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.0.4" + minimatch "^3.1.2" object.entries "^1.1.5" object.fromentries "^2.0.5" object.hasown "^1.1.0" object.values "^1.1.5" - prop-types "^15.7.2" + prop-types "^15.8.1" resolve "^2.0.0-next.3" semver "^6.3.0" string.prototype.matchall "^4.0.6" @@ -6071,7 +6082,7 @@ events@^3.0.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource@^1.0.7: +eventsource@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== @@ -6150,16 +6161,16 @@ expect@^26.6.0, expect@^26.6.2: jest-regex-util "^26.0.0" express@^4.17.1: - version "4.17.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.2.tgz#c18369f265297319beed4e5558753cc8c1364cb3" - integrity sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg== + version "4.17.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" + integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== dependencies: - accepts "~1.3.7" + accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.19.1" + body-parser "1.19.2" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.1" + cookie "0.4.2" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" @@ -6174,7 +6185,7 @@ express@^4.17.1: parseurl "~1.3.3" path-to-regexp "0.1.7" proxy-addr "~2.0.7" - qs "6.9.6" + qs "6.9.7" range-parser "~1.2.1" safe-buffer "5.2.1" send "0.17.2" @@ -6283,7 +6294,7 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -faye-websocket@^0.11.3: +faye-websocket@^0.11.3, faye-websocket@^0.11.4: version "0.11.4" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== @@ -6456,9 +6467,9 @@ flat@^4.1.0: is-buffer "~2.0.3" flatted@^3.1.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" - integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== + version "3.2.5" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== flatten@^1.0.2: version "1.0.3" @@ -6474,14 +6485,9 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.14.7" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" - integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== - -fontsource-roboto@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fontsource-roboto/-/fontsource-roboto-4.0.0.tgz#35eacd4fb8d90199053c0eec9b34a57fb79cd820" - integrity sha512-zD6L8nvdWRcwSgp4ojxFchG+MPj8kXXQKDEAH9bfhbxy+lkpvpC1WgAK0lCa4dwobv+hvAe0uyHaawcgH7WH/g== + version "1.14.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" + integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== for-in@^1.0.2: version "1.0.2" @@ -6792,9 +6798,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" - integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== + version "13.13.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" + integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== dependencies: type-fest "^0.20.2" @@ -6944,10 +6950,10 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" @@ -7166,9 +7172,9 @@ http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5" - integrity sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA== + version "0.5.6" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" + integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== http-proxy-agent@^4.0.1: version "4.0.1" @@ -7190,11 +7196,11 @@ http-proxy-middleware@0.19.1: micromatch "^3.1.10" http-proxy-middleware@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz#7ef3417a479fb7666a571e09966c66a39bd2c15f" - integrity sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg== + version "2.0.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.4.tgz#03af0f4676d172ae775cb5c33f592f40e1a4e07a" + integrity sha512-m/4FxX17SUvz4lJ5WPXOHDUuCwIqXLfLHs1s0uZ3oYjhoXlx9csYxaOa0ElDEJ+h8Q4iJ1s+lTMbiCa4EXIJqg== dependencies: - "@types/http-proxy" "^1.17.5" + "@types/http-proxy" "^1.17.8" http-proxy "^1.18.1" is-glob "^4.0.1" is-plain-obj "^3.0.0" @@ -7565,7 +7571,7 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.0.0, is-core-module@^2.2.0, is-core-module@^2.8.0: +is-core-module@^2.0.0, is-core-module@^2.2.0, is-core-module@^2.8.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -7915,20 +7921,20 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" - integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== + version "3.1.4" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" + integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" jake@^10.6.1: - version "10.8.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" - integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== + version "10.8.4" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.4.tgz#f6a8b7bf90c6306f768aa82bb7b98bf4ca15e84a" + integrity sha512-MtWeTkl1qGsWUtbl/Jsca/8xSoK3x0UmS82sNbjqxxG/de/M/3b1DntdjHgPMC50enlTNwXOCRqPXLLt5cCfZA== dependencies: async "0.9.x" - chalk "^2.4.2" + chalk "^4.0.2" filelist "^1.0.1" minimatch "^3.0.4" @@ -8384,9 +8390,9 @@ jest-worker@^26.5.0, jest-worker@^26.6.2: supports-color "^7.0.0" jest-worker@^27.3.1: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" - integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" @@ -8520,11 +8526,6 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -8533,11 +8534,9 @@ json5@^1.0.1: minimist "^1.2.0" json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== jsonfile@^4.0.0: version "4.0.0" @@ -8659,9 +8658,9 @@ keycharm@^0.3.1: integrity sha512-zn47Ti4FJT9zdF+YBBLWJsfKF/fYQHkrYlBeB5Ez5e2PjW7SoIxr43yehAne2HruulIoid4NKZZxO0dHBygCtQ== keyv@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.5.tgz#bb12b467aba372fab2a44d4420c00d3c4ebd484c" - integrity sha512-531pkGLqV3BMg0eDqqJFI0R1mkK1Nm5xIP2mM6keP5P8WfFtCkg2IOwplTUmlGoTgIg9yQYZ/kdihhz89XH3vA== + version "4.1.1" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.1.1.tgz#02c538bfdbd2a9308cc932d4096f05ae42bfa06a" + integrity sha512-tGv1yP6snQVDSM4X6yxrv2zzq/EvpW+oYiUz6aueW1u9CtS8RzUQYxxmFwgZlO2jSgCxQbchhxaqXXp2hnKGpQ== dependencies: json-buffer "3.0.1" @@ -9020,11 +9019,11 @@ lz-string@^1.4.4: integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= magic-string@^0.25.0, magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== dependencies: - sourcemap-codec "^1.4.4" + sourcemap-codec "^1.4.8" make-dir@^2.0.0: version "2.1.0" @@ -9178,17 +9177,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.51.0" + mime-db "1.52.0" mime@1.6.0: version "1.6.0" @@ -9253,17 +9252,31 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimatch@^3.0.4, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@~3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== minipass-collect@^1.0.2: version "1.0.2" @@ -9333,11 +9346,11 @@ mkdirp@0.5.4: minimist "^1.2.5" mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" @@ -9450,10 +9463,10 @@ nanoid@^2.1.0: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== -nanoid@^3.1.30: - version "3.1.32" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.32.tgz#8f96069e6239cc0a9ae8c0d3b41a3b4933a88c0a" - integrity sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw== +nanoid@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== nanomatch@^1.2.9: version "1.2.13" @@ -9484,20 +9497,20 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== nice-try@^1.0.4: version "1.0.5" @@ -9576,10 +9589,10 @@ node-releases@^1.1.61: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +node-releases@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" @@ -10181,7 +10194,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -10209,9 +10222,9 @@ pinkie@^2.0.0: integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pirates@^4.0.1: - version "4.0.4" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.4.tgz#07df81e61028e402735cdd49db701e4885b4e6e6" - integrity sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw== + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^3.0.0: version "3.0.0" @@ -10856,9 +10869,9 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: uniq "^1.0.1" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.8" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz#f023ed7a9ea736cd7ef70342996e8e78645a7914" - integrity sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ== + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -10918,13 +10931,13 @@ postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, po source-map "^0.6.1" postcss@^8.1.0: - version "8.4.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" - integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== + version "8.4.12" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" + integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== dependencies: - nanoid "^3.1.30" + nanoid "^3.3.1" picocolors "^1.0.0" - source-map-js "^1.0.1" + source-map-js "^1.0.2" prelude-ls@^1.2.1: version "1.2.1" @@ -10942,9 +10955,9 @@ prepend-http@^1.0.0: integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= prettier@^2.2.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" - integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== + version "2.6.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.0.tgz#12f8f504c4d8ddb76475f441337542fa799207d4" + integrity sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A== pretty-bytes@^5.3.0: version "5.6.0" @@ -10990,9 +11003,9 @@ pretty-format@^26.6.0, pretty-format@^26.6.2: react-is "^17.0.1" pretty-format@^27.0.2: - version "27.4.6" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" - integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: ansi-regex "^5.0.1" ansi-styles "^5.0.0" @@ -11048,7 +11061,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -11149,10 +11162,10 @@ q@^1.1.2: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qs@6.9.6: - version "6.9.6" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" - integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== +qs@6.9.7: + version "6.9.7" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" + integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== qs@~6.5.2: version "6.5.3" @@ -11234,12 +11247,12 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32" - integrity sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ== +raw-body@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" + integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== dependencies: - bytes "3.1.1" + bytes "3.1.2" http-errors "1.8.1" iconv-lite "0.4.24" unpipe "1.0.0" @@ -11348,9 +11361,9 @@ react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react- integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-query@^3.19.4: - version "3.34.8" - resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.34.8.tgz#a3be8523fd95f766b04c32847a1b58d8231db03c" - integrity sha512-pl9e2VmVbgKf29Qn/WpmFVtB2g17JPqLLyOQg3GfSs/S2WABvip5xlT464vfXtilLPcJVg9bEHHlqmC38/nvDw== + version "3.34.16" + resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.34.16.tgz#279ea180bcaeaec49c7864b29d1711ee9f152594" + integrity sha512-7FvBvjgEM4YQ8nPfmAr+lJfbW95uyW/TVjFoi2GwCkF33/S8ajx45tuPHPFGWs4qYwPy1mzwxD4IQfpUDrefNQ== dependencies: "@babel/runtime" "^7.5.5" broadcast-channel "^3.4.1" @@ -11600,10 +11613,10 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -regenerate-unicode-properties@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" - integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== dependencies: regenerate "^1.4.2" @@ -11642,7 +11655,7 @@ regex-parser@^2.2.11: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== @@ -11655,27 +11668,27 @@ regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^4.7.1: - version "4.8.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" - integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== dependencies: regenerate "^1.4.2" - regenerate-unicode-properties "^9.0.0" - regjsgen "^0.5.2" - regjsparser "^0.7.0" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" -regjsgen@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== -regjsparser@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" - integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== dependencies: jsesc "~0.5.0" @@ -11835,11 +11848,11 @@ resolve@1.18.1: path-parse "^1.0.6" resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.2: - version "1.21.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" - integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA== + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== dependencies: - is-core-module "^2.8.0" + is-core-module "^2.8.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -12345,9 +12358,9 @@ side-channel@^1.0.4: object-inspect "^1.9.0" signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.6" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" - integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-swizzle@^0.2.2: version "0.2.2" @@ -12406,16 +12419,15 @@ snapdragon@^0.8.1: use "^3.1.0" sockjs-client@^1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.2.tgz#4bc48c2da9ce4769f19dc723396b50f5c12330a3" - integrity sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.6.0.tgz#e0277b8974558edcb557eafc7d3027ef6128d865" + integrity sha512-qVHJlyfdHFht3eBFZdKEXKTlb7I4IV41xnVNo8yUKA1UHcPJwgW2SvTq9LhnjjCywSkSK7c/e4nghU0GOoMCRQ== dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" + debug "^3.2.7" + eventsource "^1.1.0" + faye-websocket "^0.11.4" inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.3" + url-parse "^1.5.10" sockjs@^0.3.21: version "0.3.24" @@ -12438,16 +12450,11 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -"source-map-js@>=0.6.2 <2.0.0": +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-js@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" - integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== - source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -12487,7 +12494,7 @@ source-map@^0.7.3, source-map@~0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -sourcemap-codec@^1.4.4: +sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== @@ -12595,9 +12602,9 @@ stack-utils@^2.0.2: escape-string-regexp "^2.0.0" stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + version "1.2.1" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" + integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== state-local@^1.0.6: version "1.0.7" @@ -12699,17 +12706,17 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: strip-ansi "^6.0.1" string.prototype.matchall@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" - integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" es-abstract "^1.19.1" get-intrinsic "^1.1.1" - has-symbols "^1.0.2" + has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" + regexp.prototype.flags "^1.4.1" side-channel "^1.0.4" string.prototype.trimend@^1.0.4: @@ -13059,10 +13066,11 @@ terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: source-map-support "~0.5.12" terser@^5.3.4: - version "5.10.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc" - integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA== + version "5.12.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.12.1.tgz#4cf2ebed1f5bceef5c83b9f60104ac4a78b49e9c" + integrity sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ== dependencies: + acorn "^8.5.0" commander "^2.20.0" source-map "~0.7.2" source-map-support "~0.5.20" @@ -13225,13 +13233,13 @@ ts-pnp@1.2.0, ts-pnp@^1.1.6: integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== tsconfig-paths@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" - integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.1" - minimist "^1.2.0" + minimist "^1.2.6" strip-bom "^3.0.0" tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: @@ -13326,9 +13334,9 @@ type@^1.0.1: integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + version "2.6.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" + integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -13478,10 +13486,10 @@ url-loader@4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url-parse@^1.4.3, url-parse@^1.5.1, url-parse@^1.5.3: - version "1.5.4" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.4.tgz#e4f645a7e2a0852cc8a66b14b292a3e9a11a97fd" - integrity sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg== +url-parse@^1.4.3, url-parse@^1.5.1, url-parse@^1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -14174,9 +14182,9 @@ ws@^6.2.1: async-limiter "~1.0.0" ws@^7.4.6: - version "7.5.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" - integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== xml-name-validator@^3.0.0: version "3.0.0" @@ -14194,9 +14202,9 @@ xmlchars@^2.2.0: integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xss@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.10.tgz#5cd63a9b147a755a14cb0455c7db8866120eb4d2" - integrity sha512-qmoqrRksmzqSKvgqzN0055UFWY7OKx1/9JWeRswwEVX9fCG5jcYRxa/A2DHcmZX6VJvjzHRQ2STeeVcQkrmLSw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.11.tgz#211cb82e95b5071d4c75d597283c021157ebe46a" + integrity sha512-EimjrjThZeK2MO7WKR9mN5ZC1CSqivSl55wvUK5EtU6acf0rzEE1pN+9ZDrFXJ82BRp3JL38pPE6S4o/rpp1zQ== dependencies: commander "^2.20.3" cssfilter "0.0.10" From 0aa6af7115e21b8bba9da83b9e834582687f51f0 Mon Sep 17 00:00:00 2001 From: peterlau Date: Wed, 23 Mar 2022 23:54:09 -0700 Subject: [PATCH 07/10] [UI] Fix event handler json display --- ui/src/components/ReactJson.jsx | 9 ++++----- ui/src/pages/definition/EventHandler.jsx | 21 +++++++++++++++++---- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/ui/src/components/ReactJson.jsx b/ui/src/components/ReactJson.jsx index 5eb8f41501..a39688e8e0 100644 --- a/ui/src/components/ReactJson.jsx +++ b/ui/src/components/ReactJson.jsx @@ -60,11 +60,10 @@ export default function ReactJson({ className, label, src }) { return (
- {label && ( - - {label} - - )} + + {label} + + diff --git a/ui/src/pages/definition/EventHandler.jsx b/ui/src/pages/definition/EventHandler.jsx index 8012f36a71..16aaad512f 100644 --- a/ui/src/pages/definition/EventHandler.jsx +++ b/ui/src/pages/definition/EventHandler.jsx @@ -3,10 +3,23 @@ import { useRouteMatch } from "react-router-dom"; import sharedStyles from "../styles"; import { makeStyles } from "@material-ui/styles"; import { Helmet } from "react-helmet"; -import { ReactJson, LinearProgress, Heading } from "../../components"; +import { ReactJson, LinearProgress, Heading, Paper } from "../../components"; import { useEventHandlers } from "../../data/misc"; -const useStyles = makeStyles(sharedStyles); +const useStyles = makeStyles({ + wrapper: { + display: "flex", + height: "100%", + alignItems: "stretch", + flexDirection: "column", + }, + header: sharedStyles.header, + paper: { + flex: 1, + margin: 30, + paddingTop: 10 + } +}); export default function EventHandlerDefinition() { const classes = useStyles(); @@ -32,9 +45,9 @@ export default function EventHandlerDefinition() { {match.params.name}
{isFetching && } -
+ {eventHandler && } -
+
); } From 9c8341eec8b14f5c80f7c0c98b69ebdc44b27ccb Mon Sep 17 00:00:00 2001 From: peterlau Date: Thu, 24 Mar 2022 00:41:09 -0700 Subject: [PATCH 08/10] [UI] Ensure rewrite rule in setupProxy.js remains commented out. OSS server endpoints are prefixed with /api --- ui/src/setupProxy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/setupProxy.js b/ui/src/setupProxy.js index a7c1ff10c1..39896b4501 100644 --- a/ui/src/setupProxy.js +++ b/ui/src/setupProxy.js @@ -6,7 +6,7 @@ module.exports = function (app) { "/api", createProxyMiddleware({ target: target, - pathRewrite: { "^/api/": "/" }, + //pathRewrite: { "^/api/": "/" }, changeOrigin: true, }) ); From 713ebf772821415e1ff967778c2d798a2bb930f1 Mon Sep 17 00:00:00 2001 From: peterlau Date: Thu, 24 Mar 2022 00:44:04 -0700 Subject: [PATCH 09/10] [UI] query.js no longer needed after react-query hooks refactor --- ui/src/utils/query.js | 276 ------------------------------------------ 1 file changed, 276 deletions(-) delete mode 100644 ui/src/utils/query.js diff --git a/ui/src/utils/query.js b/ui/src/utils/query.js deleted file mode 100644 index 7ecf390d7f..0000000000 --- a/ui/src/utils/query.js +++ /dev/null @@ -1,276 +0,0 @@ -import _ from "lodash"; -import { useMemo } from "react"; -import { - useQuery, - useMutation, - useInfiniteQuery, - useQueryClient, -} from "react-query"; -import qs from "qs"; -import { useFetchContext, fetchWithContext } from "../plugins/fetch"; - -const STALE_TIME_DROPDOWN = 600000; // 10 mins -const STALE_TIME_WORKFLOW_DEFS = 600000; // 10 mins -const STALE_TIME_SEARCH = 60000; // 1 min - -export function useFetch(path, reactQueryOptions, defaultResponse) { - const fetchContext = useFetchContext(); - return useQuery( - [fetchContext.stack, path], - () => { - if (path) { - return fetchWithContext(path, fetchContext); - } else { - return Promise.resolve(defaultResponse); - } - }, - { - enabled: fetchContext.ready, - keepPreviousData: true, - ...reactQueryOptions, - } - ); -} - -export function useWorkflow(workflowName, version, defaultWorkflow) { - let path; - if (workflowName) { - path = `/metadata/workflow/${workflowName}`; - if (version) path += `?version=${version}`; - } - return useFetch(path, {}, defaultWorkflow); -} - -export function useTask(taskName, defaultTask) { - let path; - if (taskName) { - path = `/metadata/taskdefs/${taskName}`; - } - return useFetch(path, {}, defaultTask); -} - -export function useWorkflowSearch(searchObj) { - const fetchContext = useFetchContext(); - const pathRoot = "/workflow/search?"; - - return useQuery( - [fetchContext.stack, pathRoot, searchObj], - () => { - const { rowsPerPage, page, sort, freeText, query } = searchObj; - const path = - pathRoot + - qs.stringify({ - start: (page - 1) * rowsPerPage, - size: rowsPerPage, - sort: sort, - freeText: freeText, - query: query, - }); - return fetchWithContext(path, fetchContext); - // staletime to ensure stable view when paginating back and forth (even if underlying results change) - }, - { - enabled: fetchContext.ready, - keepPreviousData: true, - staleTime: STALE_TIME_SEARCH, - } - ); -} - -export function useTaskSearch({ searchReady, ...searchObj }) { - const fetchContext = useFetchContext(); - const queryClient = useQueryClient(); - - const pathRoot = "/workflow/search-by-tasks?"; - const key = [fetchContext.stack, pathRoot, searchObj]; - - return { - ...useInfiniteQuery( - key, - ({ pageParam = 0 }) => { - const { rowsPerPage, sort, freeText, query } = searchObj; - - if (!searchReady) { - console.log("blank query - returning empty result."); - return Promise.resolve({ results: [] }); - } - - const path = - pathRoot + - qs.stringify({ - start: rowsPerPage * pageParam, - size: rowsPerPage, - sort: sort, - freeText: freeText, - query: query, - }); - return fetchWithContext(path, fetchContext); - }, - { - getNextPageParam: (lastPage, pages) => pages.length, - } - ), - refetch: () => { - queryClient.refetchQueries(key); - }, - }; -} - -export function useTaskQueueInfo(taskName) { - const fetchContext = useFetchContext(); - - const pollDataPath = `/tasks/queue/polldata?taskType=${taskName}`; - const sizePath = `/tasks/queue/sizes?taskType=${taskName}`; - - const { data: pollData, isFetching: pollDataFetching } = useQuery( - [fetchContext.stack, pollDataPath], - () => fetchWithContext(pollDataPath, fetchContext), - { - enabled: fetchContext.ready && !_.isEmpty(taskName), - } - ); - const { data: size, isFetching: sizeFetching } = useQuery( - [fetchContext.stack, sizePath], - () => fetchWithContext(sizePath, fetchContext), - { - enabled: fetchContext.ready && !_.isEmpty(taskName), - } - ); - - const taskQueueInfo = useMemo( - () => ({ size: _.get(size, [taskName]), pollData: pollData }), - [taskName, pollData, size] - ); - - return { - data: taskQueueInfo, - isFetching: pollDataFetching || sizeFetching, - }; -} -export function useAction(path, method = "post", callbacks) { - const fetchContext = useFetchContext(); - return useMutation( - (mutateParams) => - fetchWithContext(path, fetchContext, { - method, - headers: { - "Content-Type": "application/json", - }, - body: _.get(mutateParams, "body"), - }), - callbacks - ); -} - -export function useWorkflowDefs() { - const { data, ...rest } = useFetch("/metadata/workflow", { - staleTime: STALE_TIME_WORKFLOW_DEFS, - }); - - // Filter latest versions only - const workflows = useMemo(() => { - if (data) { - const unique = new Map(); - const types = new Set(); - for (let workflowDef of data) { - if (!unique.has(workflowDef.name)) { - unique.set(workflowDef.name, workflowDef); - } else if (unique.get(workflowDef.name).version < workflowDef.version) { - unique.set(workflowDef.name, workflowDef); - } - - for (let task of workflowDef.tasks) { - types.add(task.type); - } - } - - return Array.from(unique.values()); - } - }, [data]); - - return { - data: workflows, - ...rest, - }; -} - -export function useWorkflowNames() { - const { data } = useWorkflowDefs(); - return useMemo(() => (data ? data.map((def) => def.name) : []), [data]); -} - -// Version numbers do not necessarily start, or run contiguously from 1. Could be arbitrary integers e.g. 52335678. -// By convention they should be monotonic (ever increasing) wrt time. -export function useWorkflowNamesAndVersions() { - const { data, ...rest } = useFetch("/metadata/workflow", { - staleTime: STALE_TIME_WORKFLOW_DEFS, - }); - - const newData = useMemo(() => { - const retval = new Map(); - if (data) { - for (let def of data) { - let arr; - if (!retval.has(def.name)) { - arr = []; - retval.set(def.name, arr); - } else { - arr = retval.get(def.name); - } - arr.push({ - version: def.version, - createTime: def.createTime, - updateTime: def.updateTime, - }); - } - - // Sort arrays in place - retval.forEach((val) => val.sort()); - } - return retval; - }, [data]); - - return { ...rest, data: newData }; -} - -export function useTaskNames() { - const { data } = useFetch(`/metadata/taskdefs`, { - staleTime: STALE_TIME_DROPDOWN, - }); - return useMemo( - () => (data ? Array.from(new Set(data.map((def) => def.name))).sort() : []), - [data] - ); -} - -export function useSaveWorkflow(callbacks) { - const path = "/metadata/workflow"; - const fetchContext = useFetchContext(); - - return useMutation( - ({ body, isNew }) => - fetchWithContext(path, fetchContext, { - method: isNew ? "post" : "put", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(isNew ? body : [body]), - }), - callbacks - ); -} - -export function useSaveTask(callbacks) { - const path = "/metadata/taskdefs"; - const fetchContext = useFetchContext(); - - return useMutation(({ body, isNew }) => { - return fetchWithContext(path, fetchContext, { - method: isNew ? "post" : "put", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(isNew ? [body] : body), // Note: application of [] is opposite of workflow - }); - }, callbacks); -} From a0e731432ab90798de14fa4257712ff8ea25e73b Mon Sep 17 00:00:00 2001 From: peterlau Date: Thu, 24 Mar 2022 10:15:35 -0700 Subject: [PATCH 10/10] Remediate dependabot warnings with forced resolutions. Note: Remove once able to upgrade from react-scripts 4.0.3 --- ui/package.json | 6 +++++- ui/yarn.lock | 48 ++++++++++++++---------------------------------- 2 files changed, 19 insertions(+), 35 deletions(-) diff --git a/ui/package.json b/ui/package.json index e328d4a31f..947650415f 100644 --- a/ui/package.json +++ b/ui/package.json @@ -65,7 +65,11 @@ ] }, "resolutions": { - "vis-timeline": "7.3.6" + "vis-timeline": "7.3.6", + "immer": "^9.0.6", + "ansi-html": "^0.0.8", + "glob-parent": "^5.1.2", + "node-forge": "^1.3.0" }, "devDependencies": { "@testing-library/dom": "^8.2.0", diff --git a/ui/yarn.lock b/ui/yarn.lock index c127f74018..3d9cefa80e 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -2715,10 +2715,10 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: dependencies: type-fest "^0.21.3" -ansi-html@0.0.7, ansi-html@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= +ansi-html@0.0.7, ansi-html@^0.0.7, ansi-html@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.8.tgz#e969db193b12bcdfa6727b29ffd8882dc13cc501" + integrity sha512-QROYz1I1Kj+8bTYgx0IlMBpRSCIU+7GjbE0oH+KF7QKc+qSF8YAlIutN59Db17tXN70Ono9upT9Ht0iG93W7ug== ansi-regex@^2.0.0: version "2.1.1" @@ -6725,15 +6725,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^3.1.0, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -7296,10 +7288,10 @@ ignore@^5.1.4, ignore@^5.1.8, ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -immer@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" - integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== +immer@8.0.1, immer@^9.0.6: + version "9.0.12" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.12.tgz#2d33ddf3ee1d247deab9d707ca472c8c942a0f20" + integrity sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA== immutability-helper@^3.1.1: version "3.1.1" @@ -7639,7 +7631,7 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -7659,13 +7651,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -9533,10 +9518,10 @@ node-environment-flags@1.0.5: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-forge@^0.10.0, node-forge@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.0.tgz#37a874ea723855f37db091e6c186e5b67a01d4b2" + integrity sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA== node-int64@^0.4.0: version "0.4.0" @@ -10090,11 +10075,6 @@ path-browserify@0.0.1: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"